mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-12-13 01:08:45 +00:00
Properly notify insets after BufferView::doDispatch
Currently, insets are notified that the cursor entered or leaved them in Cursor::dispatch. This is not the case for lfuns which are handled in BufferView. Adding the proper code allows to fix many bugs where previews are not updated correctly. Fixes bug #6173.
This commit is contained in:
parent
b18fff0caa
commit
56c4bf6c74
@ -1223,6 +1223,7 @@ void BufferView::dispatch(FuncRequest const & cmd, DispatchResult & dr)
|
|||||||
|
|
||||||
string const argument = to_utf8(cmd.argument());
|
string const argument = to_utf8(cmd.argument());
|
||||||
Cursor & cur = d->cursor_;
|
Cursor & cur = d->cursor_;
|
||||||
|
Cursor old = cur;
|
||||||
|
|
||||||
// Don't dispatch function that does not apply to internal buffers.
|
// Don't dispatch function that does not apply to internal buffers.
|
||||||
if (buffer_.isInternal()
|
if (buffer_.isInternal()
|
||||||
@ -1720,7 +1721,6 @@ void BufferView::dispatch(FuncRequest const & cmd, DispatchResult & dr)
|
|||||||
p = Point(0, 0);
|
p = Point(0, 0);
|
||||||
if (act == LFUN_SCREEN_DOWN && scrolled < height_)
|
if (act == LFUN_SCREEN_DOWN && scrolled < height_)
|
||||||
p = Point(width_, height_);
|
p = Point(width_, height_);
|
||||||
Cursor old = cur;
|
|
||||||
bool const in_texted = cur.inTexted();
|
bool const in_texted = cur.inTexted();
|
||||||
cur.setCursor(doc_iterator_begin(cur.buffer()));
|
cur.setCursor(doc_iterator_begin(cur.buffer()));
|
||||||
cur.selHandle(false);
|
cur.selHandle(false);
|
||||||
@ -2042,6 +2042,21 @@ void BufferView::dispatch(FuncRequest const & cmd, DispatchResult & dr)
|
|||||||
|
|
||||||
buffer_.undo().endUndoGroup();
|
buffer_.undo().endUndoGroup();
|
||||||
dr.dispatched(dispatched);
|
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();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -454,6 +454,9 @@ void Cursor::dispatch(FuncRequest const & cmd0)
|
|||||||
}
|
}
|
||||||
endUndoGroup();
|
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
|
// notify insets we just left
|
||||||
if (*this != old) {
|
if (*this != old) {
|
||||||
old.beginUndoGroup();
|
old.beginUndoGroup();
|
||||||
|
@ -70,6 +70,8 @@ What's new
|
|||||||
- Fix setting of nested minipage via the dialog (bug 8716).
|
- Fix setting of nested minipage via the dialog (bug 8716).
|
||||||
|
|
||||||
- When the document language is changed, update cursor language too (bug 9586).
|
- When the document language is changed, update cursor language too (bug 9586).
|
||||||
|
|
||||||
|
- Correctly update previews when cursor leaves inset (bug 6173).
|
||||||
|
|
||||||
|
|
||||||
* INTERNALS
|
* INTERNALS
|
||||||
|
Loading…
Reference in New Issue
Block a user