#include "frontends/Menubar.h"
#include "frontends/Toolbars.h"
+#include "support/environment.h"
#include "support/filefilterlist.h"
#include "support/filetools.h"
#include "support/forkedcontr.h"
bool getStatus(LCursor cursor,
FuncRequest const & cmd, FuncStatus & status)
{
+ // Try to fix cursor in case it is broken.
+ cursor.fixIfBroken();
+
// This is, of course, a mess. Better create a new doc iterator and use
// this in Inset::getStatus. This might require an additional
// BufferView * arg, though (which should be avoided)
//LCursor safe = *this;
bool res = false;
- for ( ; cursor.size(); cursor.pop()) {
+ for ( ; cursor.depth(); cursor.pop()) {
//lyxerr << "\nLCursor::getStatus: cmd: " << cmd << endl << *this << endl;
DocIterator::idx_type & idx = cursor.idx();
DocIterator::idx_type const lastidx = cursor.lastidx();
-
- if (idx > lastidx) {
- lyxerr << "wrong idx " << idx << ", max is " << lastidx
- << ". Trying to correct this." << endl;
- idx = lastidx;
- }
+ BOOST_ASSERT(idx <= lastidx);
DocIterator::pit_type & pit = cursor.pit();
DocIterator::pit_type const lastpit = cursor.lastpit();
-
- if (pit > lastpit) {
- lyxerr << "wrong par " << pit << ", max is " << lastpit
- << ". Trying to correct this." << endl;
- pit = lastpit;
- }
+ BOOST_ASSERT(pit <= lastpit);
DocIterator::pos_type & pos = cursor.pos();
DocIterator::pos_type const lastpos = cursor.lastpos();
-
- if (pos > lastpos) {
- lyxerr << "wrong pos " << pos << ", max is " << lastpos
- << ". Trying to correct this." << endl;
- pos = lastpos;
- }
+ BOOST_ASSERT(pos <= lastpos);
// The inset's getStatus() will return 'true' if it made
// a definitive decision on whether it want to handle the
cancel_meta_seq.reset();
FuncRequest func = cancel_meta_seq.addkey(keysym, state);
- lyxerr[Debug::KEY] << "action first set to [" << func.action << ']' << endl;
+ lyxerr[Debug::KEY] << BOOST_CURRENT_FUNCTION
+ << " action first set to [" << func.action << ']'
+ << endl;
// When not cancel or meta-fake, do the normal lookup.
// Note how the meta_fake Mod1 bit is OR-ed in and reset afterwards.
if ((func.action != LFUN_CANCEL) && (func.action != LFUN_META_FAKE)) {
// remove Caps Lock and Mod2 as a modifiers
func = keyseq.addkey(keysym, (state | meta_fake_bit));
- lyxerr[Debug::KEY] << "action now set to ["
- << func.action << ']' << endl;
+ lyxerr[Debug::KEY] << BOOST_CURRENT_FUNCTION
+ << "action now set to ["
+ << func.action << ']' << endl;
}
// Dont remove this unless you know what you are doing.
meta_fake_bit = key_modifier::none;
- // can this happen now ?
+ // Can this happen now ?
if (func.action == LFUN_NOACTION) {
func = FuncRequest(LFUN_PREFIX);
}
if (lyxerr.debugging(Debug::KEY)) {
- lyxerr << "Key [action="
+ lyxerr << BOOST_CURRENT_FUNCTION
+ << " Key [action="
<< func.action << "]["
<< keyseq.print() << ']'
<< endl;
if (func.action == LFUN_SELFINSERT) {
if (encoded_last_key != 0) {
- string arg(1, encoded_last_key);
+ string const arg(1, encoded_last_key);
dispatch(FuncRequest(LFUN_SELFINSERT, arg));
lyxerr[Debug::KEY]
<< "SelfInsert arg[`" << arg << "']" << endl;
enable = !buf->isUnnamed() && !buf->isClean();
break;
-
case LFUN_INSET_SETTINGS: {
enable = false;
- if (!cur.size())
+ if (!cur)
break;
UpdatableInset * inset = cur.inset().asUpdatableInset();
lyxerr << "inset: " << inset << endl;
case LFUN_GETNAME:
case LFUN_NOTIFY:
case LFUN_GOTOFILEROW:
- case LFUN_GOTO_PARAGRAPH:
case LFUN_DIALOG_SHOW_NEXT_INSET:
case LFUN_DIALOG_HIDE:
case LFUN_DIALOG_DISCONNECT_INSET:
errorstat = false;
dispatch_buffer.erase();
- bool update = true;
+ bool update = false;
FuncStatus const flag = getStatus(cmd);
if (!flag.enabled()) {
break;
}
- case LFUN_GOTO_PARAGRAPH: {
- istringstream is(argument);
- int id;
- is >> id;
- ParIterator par = owner->buffer()->getParFromID(id);
- if (par == owner->buffer()->par_iterator_end()) {
- lyxerr[Debug::INFO] << "No matching paragraph found! ["
- << id << ']' << endl;
- break;
- } else {
- lyxerr[Debug::INFO] << "Paragraph " << par->id()
- << " found." << endl;
- }
-
- // Set the cursor
- view()->setCursor(par, 0);
-
- view()->switchKeyMap();
- owner->view_state_changed();
-
- view()->center();
- // see BufferView_pimpl::center()
- view()->updateScrollbar();
- break;
- }
-
case LFUN_DIALOG_SHOW: {
string const name = cmd.getArg(0);
string data = trim(cmd.argument.substr(name.size()));
}
default: {
- update = false;
view()->cursor().dispatch(cmd);
- if (view()->cursor().result().dispatched())
- update |= view()->cursor().result().update();
- else
+ update |= view()->cursor().result().update();
+ if (!view()->cursor().result().dispatched()) {
update |= view()->dispatch(cmd);
+ }
+
break;
}
}