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
This commit is contained in:
Abdelrazak Younes 2010-12-05 00:57:04 +00:00
parent 2a11b8347c
commit ae7bcd3312
2 changed files with 41 additions and 35 deletions

View File

@ -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();
}
}

View File

@ -3026,38 +3026,32 @@ 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())
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);
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
@ -3072,7 +3066,6 @@ void GuiView::dispatchToBufferView(FuncRequest const & cmd, DispatchResult & dr)
}
dr = bv->cursor().result();
}
}