From ae7bcd331274980ef631d8f00e9270798147c1c6 Mon Sep 17 00:00:00 2001 From: Abdelrazak Younes Date: Sun, 5 Dec 2010 00:57:04 +0000 Subject: [PATCH] GuiView::dispatchToBufferView(): simplify code and move some to Cursor::dispatch(). git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@36733 a592a061-630c-0410-9148-cb99ea01b6c8 --- src/Cursor.cpp | 13 +++++++ src/frontends/qt4/GuiView.cpp | 65 ++++++++++++++++------------------- 2 files changed, 42 insertions(+), 36 deletions(-) diff --git a/src/Cursor.cpp b/src/Cursor.cpp index c96762d5f7..d504670fa7 100644 --- a/src/Cursor.cpp +++ b/src/Cursor.cpp @@ -333,6 +333,7 @@ void Cursor::dispatch(FuncRequest const & cmd0) fixIfBroken(); FuncRequest cmd = cmd0; Cursor safe = *this; + Cursor old = *this; disp_ = DispatchResult(); buffer()->undo().beginUndoGroup(); @@ -393,6 +394,18 @@ void Cursor::dispatch(FuncRequest const & cmd0) beforeDispatchCursor_ = safe.beforeDispatchCursor_; } buffer()->undo().endUndoGroup(); + + // notify insets we just left + if (*this != old) { + old.beginUndoGroup(); + old.fixIfBroken(); + bool badcursor = notifyCursorLeavesOrEnters(old, *this); + if (badcursor) { + fixIfBroken(); + bv().fixInlineCompletionPos(); + } + old.endUndoGroup(); + } } diff --git a/src/frontends/qt4/GuiView.cpp b/src/frontends/qt4/GuiView.cpp index a2626a2f0f..d2fc7b04fa 100644 --- a/src/frontends/qt4/GuiView.cpp +++ b/src/frontends/qt4/GuiView.cpp @@ -3026,53 +3026,46 @@ void GuiView::dispatchToBufferView(FuncRequest const & cmd, DispatchResult & dr) // Let the current BufferView dispatch its own actions. bv->dispatch(cmd, dr); + if (dr.dispatched()) + return; // Try with the document BufferView dispatch if any. BufferView * doc_bv = documentBufferView(); - if (doc_bv && !dr.dispatched()) - doc_bv->dispatch(cmd, dr); + if (doc_bv) { + doc_bv->dispatch(cmd, dr); + if (dr.dispatched()) + return; + } // OK, so try the current Buffer itself... - if (!dr.dispatched()) - bv->buffer().dispatch(cmd, dr); + bv->buffer().dispatch(cmd, dr); + if (dr.dispatched()) + return; // and with the document Buffer. - if (doc_bv && !dr.dispatched()) + if (doc_bv) { doc_bv->buffer().dispatch(cmd, dr); + if (dr.dispatched()) + return; + } // Then let the current Cursor dispatch its own actions. - if (!dr.dispatched()) { - Cursor old = bv->cursor(); - bv->cursor().dispatch(cmd); - - // notify insets we just left - // FIXME: move this code to Cursor::dispatch - if (bv->cursor() != old) { - old.beginUndoGroup(); - old.fixIfBroken(); - bool badcursor = notifyCursorLeavesOrEnters(old, bv->cursor()); - if (badcursor) { - bv->cursor().fixIfBroken(); - bv->fixInlineCompletionPos(); - } - old.endUndoGroup(); - } - - // update completion. We do it here and not in - // processKeySym to avoid another redraw just for a - // changed inline completion - if (cmd.origin() == FuncRequest::KEYBOARD) { - if (cmd.action() == LFUN_SELF_INSERT - || (cmd.action() == LFUN_ERT_INSERT && bv->cursor().inMathed())) - updateCompletion(bv->cursor(), true, true); - else if (cmd.action() == LFUN_CHAR_DELETE_BACKWARD) - updateCompletion(bv->cursor(), false, true); - else - updateCompletion(bv->cursor(), false, false); - } - - dr = bv->cursor().result(); + bv->cursor().dispatch(cmd); + + // update completion. We do it here and not in + // processKeySym to avoid another redraw just for a + // changed inline completion + if (cmd.origin() == FuncRequest::KEYBOARD) { + if (cmd.action() == LFUN_SELF_INSERT + || (cmd.action() == LFUN_ERT_INSERT && bv->cursor().inMathed())) + updateCompletion(bv->cursor(), true, true); + else if (cmd.action() == LFUN_CHAR_DELETE_BACKWARD) + updateCompletion(bv->cursor(), false, true); + else + updateCompletion(bv->cursor(), false, false); } + + dr = bv->cursor().result(); } -- 2.39.2