From: Jean-Marc Lasgouttes Date: Fri, 5 Jun 2015 09:43:05 +0000 (+0200) Subject: Properly notify insets after BufferView::doDispatch X-Git-Tag: 2.2.0alpha1~552 X-Git-Url: https://git.lyx.org/gitweb/?a=commitdiff_plain;h=469a1f48a62a61d7ec5680a26f77fc7d687af56e;p=features.git Properly notify insets after BufferView::doDispatch Currently, insets are notified that the cursor entered or leaved them in Cursor::dispatch. This is not the cas efor lfuns which are handled in BufferView. Adding the proper code allows to fix many bugs where previews are not updated correctly. This also reverts cf4f79f8, which was the same fix for a particular case. Fixes bug #6173. --- diff --git a/src/BufferView.cpp b/src/BufferView.cpp index b2478a0014..41d85bf400 100644 --- a/src/BufferView.cpp +++ b/src/BufferView.cpp @@ -1237,6 +1237,7 @@ void BufferView::dispatch(FuncRequest const & cmd, DispatchResult & dr) string const argument = to_utf8(cmd.argument()); Cursor & cur = d->cursor_; + Cursor old = cur; // Don't dispatch function that does not apply to internal buffers. if (buffer_.isInternal() @@ -1745,11 +1746,8 @@ void BufferView::dispatch(FuncRequest const & cmd, DispatchResult & dr) p = Point(0, 0); if (act == LFUN_SCREEN_DOWN && scrolled < height_) p = Point(width_, height_); - Cursor old = cur; bool const in_texted = cur.inTexted(); cur.setCursor(doc_iterator_begin(cur.buffer())); - if (cur != old) - notifyCursorLeavesOrEnters(old, cur); cur.selHandle(false); buffer_.changed(true); updateHoveredInset(); @@ -2069,6 +2067,21 @@ void BufferView::dispatch(FuncRequest const & cmd, DispatchResult & dr) buffer_.undo().endUndoGroup(); dr.dispatched(dispatched); + + // NOTE: The code below is copied from Cursor::dispatch. If you + // need to modify this, please update the other one too. + + // notify insets we just entered/left + if (cursor() != old) { + old.beginUndoGroup(); + old.fixIfBroken(); + bool badcursor = notifyCursorLeavesOrEnters(old, cursor()); + if (badcursor) { + cursor().fixIfBroken(); + resetInlineCompletionPos(); + } + old.endUndoGroup(); + } } diff --git a/src/Cursor.cpp b/src/Cursor.cpp index 44457e335f..6e011bccf9 100644 --- a/src/Cursor.cpp +++ b/src/Cursor.cpp @@ -458,6 +458,9 @@ void Cursor::dispatch(FuncRequest const & cmd0) } endUndoGroup(); + // NOTE: The code below has been copied to BufferView::dispatch. + // If you need to modify this, please update the other one too. + // notify insets we just left if (*this != old) { old.beginUndoGroup();