X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Flyxfunc.C;h=f6e54aa3faf682d4d37af6ac964aedb5cdc7c024;hb=3c851f1f7951f3a24b57826f3e580e4318b5e6c4;hp=062c87d75104af9ed33e9af2a1cc1726c1930da8;hpb=b6e6f87f71b83a01607f11fe9201a114993ff559;p=lyx.git diff --git a/src/lyxfunc.C b/src/lyxfunc.C index 062c87d751..f6e54aa3fa 100644 --- a/src/lyxfunc.C +++ b/src/lyxfunc.C @@ -78,6 +78,7 @@ #include "frontends/Menubar.h" #include "frontends/Toolbars.h" +#include "support/environment.h" #include "support/filefilterlist.h" #include "support/filetools.h" #include "support/forkedcontr.h" @@ -95,6 +96,7 @@ using bv_funcs::freefont2string; +using lyx::support::AbsolutePath; using lyx::support::AddName; using lyx::support::AddPath; using lyx::support::bformat; @@ -144,39 +146,27 @@ namespace { 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 @@ -246,7 +236,9 @@ void LyXFunc::processKeySym(LyXKeySymPtr keysym, key_modifier::state state) 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. @@ -254,20 +246,22 @@ void LyXFunc::processKeySym(LyXKeySymPtr keysym, key_modifier::state state) 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; @@ -307,7 +301,7 @@ void LyXFunc::processKeySym(LyXKeySymPtr keysym, key_modifier::state state) 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; @@ -437,10 +431,9 @@ FuncStatus LyXFunc::getStatus(FuncRequest const & cmd) const 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; @@ -487,7 +480,7 @@ FuncStatus LyXFunc::getStatus(FuncRequest const & cmd) const else if (name == "print") enable = Exporter::IsExportable(*buf, "dvi") && lyxrc.print_command != "none"; - else if (name == "character") + else if (name == "character" || name == "mathpanel") enable = cur.inset().lyxCode() != InsetBase::ERT_CODE; else if (name == "vclog") enable = buf->lyxvc().inUse(); @@ -496,6 +489,10 @@ FuncStatus LyXFunc::getStatus(FuncRequest const & cmd) const break; } + case LFUN_DIALOG_SHOW_NEW_INSET: + enable = cur.inset().lyxCode() != InsetBase::ERT_CODE; + break; + case LFUN_DIALOG_UPDATE: { string const name = cmd.getArg(0); if (!buf) @@ -539,8 +536,6 @@ FuncStatus LyXFunc::getStatus(FuncRequest const & cmd) const case LFUN_GETNAME: case LFUN_NOTIFY: case LFUN_GOTOFILEROW: - case LFUN_GOTO_PARAGRAPH: - case LFUN_DIALOG_SHOW_NEW_INSET: case LFUN_DIALOG_SHOW_NEXT_INSET: case LFUN_DIALOG_HIDE: case LFUN_DIALOG_DISCONNECT_INSET: @@ -669,7 +664,7 @@ void LyXFunc::dispatch(FuncRequest const & cmd) errorstat = false; dispatch_buffer.erase(); - bool update = true; + bool update = false; FuncStatus const flag = getStatus(cmd); if (!flag.enabled()) { @@ -1094,32 +1089,6 @@ void LyXFunc::dispatch(FuncRequest const & cmd) 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())); @@ -1506,12 +1475,12 @@ void LyXFunc::dispatch(FuncRequest const & cmd) } 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; } }