Alfredo Braunstein <[EMAIL PROTECTED]> writes: | Pretty funny actually :-) Once you get over the claustrophobia...
I have a patch that solves the problem for me. Unless you find huge problems with this I will commit it.
? Config ? dispatch-4.diff ? dispatch-5.diff ? dispatch-6.diff ? dispatch-7.diff ? dispatch-8.diff ? doit.sh ? newfile1.lyx ? src/doit.sh ? src/insets/doit.sh ? src/mathed/doit.sh Index: src/cursor.C =================================================================== RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/cursor.C,v retrieving revision 1.10 diff -u -p -r1.10 cursor.C --- src/cursor.C 3 Nov 2003 19:52:41 -0000 1.10 +++ src/cursor.C 4 Nov 2003 00:08:22 -0000 @@ -28,6 +28,8 @@ using std::endl; DispatchResult Cursor::dispatch(FuncRequest const & cmd) { for (int i = data_.size() - 1; i >= 0; --i) { + CursorItem & citem = data_[i]; + lyxerr << "trying to dispatch to inset" << data_[i].inset_ << endl; DispatchResult res = data_[i].inset_->dispatch(cmd); lyxerr << " result: " << res.val() << endl; Index: src/dispatchresult.h =================================================================== RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/dispatchresult.h,v retrieving revision 1.6 diff -u -p -r1.6 dispatchresult.h --- src/dispatchresult.h 3 Nov 2003 19:52:41 -0000 1.6 +++ src/dispatchresult.h 4 Nov 2003 00:08:22 -0000 @@ -53,6 +53,9 @@ public: DispatchResult(bool dis, dispatch_result_t val) : dispatched_(dis), update_(false), val_(val) {} dispatch_result_t val() const { return val_; } + void val(dispatch_result_t drt) { + val_ = drt; + } bool dispatched() const { return dispatched_; } Index: src/insets/insettext.C =================================================================== RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/insets/insettext.C,v retrieving revision 1.524 diff -u -p -r1.524 insettext.C --- src/insets/insettext.C 3 Nov 2003 19:52:46 -0000 1.524 +++ src/insets/insettext.C 4 Nov 2003 00:08:23 -0000 @@ -676,14 +676,16 @@ InsetText::priv_dispatch(FuncRequest con DispatchResult result = UpdatableInset::priv_dispatch(cmd, idx, pos); if (result.dispatched()) - return DispatchResult(true, true); + return result; - result = DispatchResult(true, true); +#if 0 + // This looks utterly strange. (Lgb) if (cmd.action == LFUN_UNKNOWN_ACTION && cmd.argument.empty()) return DispatchResult(false, FINISHED); +#endif if (the_locking_inset) { - result = the_locking_inset->dispatch(cmd); + DispatchResult result = the_locking_inset->dispatch(cmd); if (result.dispatched()) { if (result.update()) { @@ -696,7 +698,8 @@ InsetText::priv_dispatch(FuncRequest con switch (result.val()) { case FINISHED_RIGHT: moveRightIntern(bv, false, false); - result = DispatchResult(true, true); + result.dispatched(true); + result.update(true); break; case FINISHED_UP: result = moveUp(bv); @@ -713,7 +716,8 @@ InsetText::priv_dispatch(FuncRequest con } break; default: - result = DispatchResult(true, true); + result.dispatched(true); + result.update(true); break; } the_locking_inset = 0; @@ -722,10 +726,8 @@ InsetText::priv_dispatch(FuncRequest con bv->owner()->clearMessage(); return result; } - bool updflag = false; switch (cmd.action) { - // Normal chars case LFUN_SELFINSERT: if (bv->buffer()->isReadonly()) { @@ -753,8 +755,8 @@ InsetText::priv_dispatch(FuncRequest con TranslateAndInsert(cmd.argument[i], &text_); } text_.selection.cursor = text_.cursor; - updflag = true; - result = DispatchResult(true); + result.dispatched(true); + result.update(true); break; // cursor movements that need special handling @@ -778,21 +780,21 @@ InsetText::priv_dispatch(FuncRequest con case LFUN_PRIOR: if (crow() == text_.firstRow()) - result = DispatchResult(false, FINISHED_UP); + result.val(FINISHED_UP); else { text_.cursorPrevious(); text_.clearSelection(); - result = DispatchResult(true); + result.dispatched(true); } break; case LFUN_NEXT: if (crow() == text_.lastRow()) - result = DispatchResult(false, FINISHED_DOWN); + result.val(FINISHED_DOWN); else { text_.cursorNext(); text_.clearSelection(); - result = DispatchResult(true); + result.dispatched(true); } break; @@ -801,7 +803,8 @@ InsetText::priv_dispatch(FuncRequest con text_.cutSelection(true, false); else text_.backspace(); - updflag = true; +#warning should be also set dispatched here? + result.update(true); break; case LFUN_DELETE: @@ -809,7 +812,8 @@ InsetText::priv_dispatch(FuncRequest con text_.cutSelection(true, false); else text_.Delete(); - updflag = true; +#warning should be also set dispatched here? + result.update(true); break; case LFUN_PASTE: @@ -831,38 +835,45 @@ InsetText::priv_dispatch(FuncRequest con text_.pasteSelection(sel_index); // bug 393 text_.clearSelection(); - updflag = true; +#warning should be also set dispatched here? + result.update(true); } break; case LFUN_BREAKPARAGRAPH: if (!autoBreakRows_) { - result = DispatchResult(true, true); + result.dispatched(true); + result.update(true); } else { replaceSelection(bv->getLyXText()); text_.breakParagraph(paragraphs, 0); - updflag = true; +#warning should be also set dispatched here? + result.update(true); } break; case LFUN_BREAKPARAGRAPHKEEPLAYOUT: if (!autoBreakRows_) { - result = DispatchResult(true, true); + result.dispatched(true); + result.update(true); } else { replaceSelection(bv->getLyXText()); text_.breakParagraph(paragraphs, 1); - updflag = true; +#warning should be also set dispatched here? + result.update(true); } break; case LFUN_BREAKLINE: { if (!autoBreakRows_) { - result = DispatchResult(true, true); + result.dispatched(true); + result.update(true); } else { replaceSelection(bv->getLyXText()); auto_ptr<InsetNewline> ins(new InsetNewline); text_.insertInset(ins.release()); - updflag = true; +#warning should be also set dispatched here? + result.update(true); } break; } @@ -897,7 +908,8 @@ InsetText::priv_dispatch(FuncRequest con cur_layout = layout; text_.setLayout(layout); bv->owner()->setLayout(cpar()->layout()->name()); - updflag = true; +#warning should be also set dispatched here? + result.update(true); } } else { // reset the layout box @@ -906,13 +918,14 @@ InsetText::priv_dispatch(FuncRequest con break; default: - if (!bv->dispatch(cmd)) - result = DispatchResult(false); break; } - updateLocal(bv, updflag); - + if (result.update()) { + result.update(false); + updateLocal(bv, true); + } + /// If the action has deleted all text in the inset, we need to change the // language to the language of the surronding text. if (!was_empty && paragraphs.begin()->empty() && @@ -922,11 +935,11 @@ InsetText::priv_dispatch(FuncRequest con setFont(bv, font, false); } - if (result.val() >= FINISHED) + if (result.val() >= FINISHED) { + result.val(NONE); bv->unlockInset(this); + } - if (result.val() == NONE) - result = DispatchResult(true, true); return result; }
-- Lgb