>>>>> "Juergen" == Juergen Spitzmueller <[EMAIL PROTECTED]> writes:
Juergen> Jean-Marc Lasgouttes wrote: >> Please test. Juergen> Seems to work. However, LyX crashed two times on me while Juergen> testing this. I'm not sure it is related, and I couldn't Juergen> reproduce it, unfortunately. Juergen> Also I get the debug output: I don't have a cell 1 Juergen> When I hit C-i in the outermost math inset. OK, try this new version instead. I undid the simplifications to the code, since they were wrong %-] So now the code for LFUN_NEXT_INSET_TOGGLE is basically moved as is to BufferView::Pimpl. One thing I failed to do is to allow locking an outermost math inset. JMarc
Index: src/BufferView_pimpl.C =================================================================== --- src/BufferView_pimpl.C (revision 14591) +++ src/BufferView_pimpl.C (working copy) @@ -1054,6 +1054,7 @@ FuncStatus BufferView::Pimpl::getStatus( case LFUN_BIBDB_ADD: case LFUN_BIBDB_DEL: case LFUN_WORDS_COUNT: + case LFUN_NEXT_INSET_TOGGLE: flag.enabled(true); break; @@ -1351,6 +1352,30 @@ bool BufferView::Pimpl::dispatch(FuncReq buffer_->params().compressed = !buffer_->params().compressed; break; + case LFUN_NEXT_INSET_TOGGLE: { + // this is the real function we want to invoke + FuncRequest tmpcmd = FuncRequest(LFUN_INSET_TOGGLE, cmd.origin); + // if there is an inset at cursor, see whether it + // wants to toggle. + InsetBase * inset = cur.nextInset(); + if (inset && inset->isActive()) { + LCursor tmpcur = cur; + tmpcur.pushLeft(*inset); + inset->dispatch(tmpcur, tmpcmd); + if (tmpcur.result().dispatched()) { + cur.dispatched(); + } + } + // if it did not work, try the underlying inset. + if (!cur.result().dispatched()) + cur.dispatch(tmpcmd); + + if (cur.result().dispatched()) + cur.clearSelection(); + + break; + } + default: return false; } Index: src/ChangeLog =================================================================== --- src/ChangeLog (revision 14591) +++ src/ChangeLog (working copy) @@ -1,5 +1,13 @@ 2006-08-09 Jean-Marc Lasgouttes <[EMAIL PROTECTED]> + * BufferView_pimpl.C (dispatch/LFUN_NEXT_INSET_TOGGLE): moved from + LyXText. + + * text3.C (dispatch/LFUN_NEXT_INSET_TOGGLE): moved to + BufferView::Pimpl, since this should work in mathed too. + +2006-08-09 Jean-Marc Lasgouttes <[EMAIL PROTECTED]> + * CutAndPaste.C (copySelection): remove annoying debug message. Index: src/mathed/ChangeLog =================================================================== --- src/mathed/ChangeLog (revision 14591) +++ src/mathed/ChangeLog (working copy) @@ -1,5 +1,10 @@ 2006-08-09 Jean-Marc Lasgouttes <[EMAIL PROTECTED]> + * math_nestinset.C (doDispatch/LFUN_INSET_TOGGLE): do not try to + do the work which belongs to LFUN_NEXT_INSET_TOGGLE (bug 2756). + +2006-08-09 Jean-Marc Lasgouttes <[EMAIL PROTECTED]> + * math_nestinset.C (script): * math_scriptinset.C (removeScript): remove annoying debug messages. Index: src/mathed/math_nestinset.C =================================================================== --- src/mathed/math_nestinset.C (revision 14591) +++ src/mathed/math_nestinset.C (working copy) @@ -649,15 +649,8 @@ void MathNestInset::doDispatch(LCursor & case LFUN_INSET_TOGGLE: recordUndo(cur); - //lockToggle(); - if (cur.pos() != cur.lastpos()) { - // toggle previous inset ... - cur.nextAtom().nucleus()->lock(!cur.nextAtom()->lock()); - } else if (cur.popLeft() && cur.pos() != cur.lastpos()) { - // ... or enclosing inset if we are in the last inset position - cur.nextAtom().nucleus()->lock(!cur.nextAtom()->lock()); - ++cur.pos(); - } + lock(!lock()); + cur.popRight(); break; case LFUN_SELFINSERT: Index: src/text3.C =================================================================== --- src/text3.C (revision 14591) +++ src/text3.C (working copy) @@ -674,28 +674,6 @@ void LyXText::dispatch(LCursor & cur, Fu cur.inset().showInsetDialog(bv); break; - case LFUN_NEXT_INSET_TOGGLE: { - InsetBase * inset = cur.nextInset(); - // this is the real function we want to invoke - cmd = FuncRequest(LFUN_INSET_TOGGLE); - cur.undispatched(); - // if there is an inset at cursor, see whether it - // wants to toggle. - if (inset) { - LCursor tmpcur = cur; - tmpcur.pushLeft(*inset); - inset->dispatch(tmpcur, cmd); - if (tmpcur.result().dispatched()) { - cur.clearSelection(); - cur.dispatched(); - } - } - // if it did not work, try the underlying inset. - if (!cur.result().dispatched()) - cur.inset().dispatch(cur, cmd); - break; - } - case LFUN_SPACE_INSERT: if (cur.paragraph().layout()->free_spacing) insertChar(cur, ' '); @@ -1719,7 +1697,6 @@ bool LyXText::getStatus(LCursor & cur, F case LFUN_BREAKPARAGRAPH_SKIP: case LFUN_PARAGRAPH_SPACING: case LFUN_INSET_INSERT: - case LFUN_NEXT_INSET_TOGGLE: case LFUN_UPCASE_WORD: case LFUN_LOWCASE_WORD: case LFUN_CAPITALIZE_WORD: