Recommit clearing of empty selections in GuiView

A similar fix was reverted (453ce611) because of crashes.
The crashes occurred simply because of a failed check that
we have a buffer view before using it. That is now done in
this commit.

The below commit description is copied from the original
commit (fb05011a):

Empty selections can cause confusing behavior for a few reasons:

(1) some functions behave differently depending on whether there is a
selection. If I press delete, nothing happens (where I expect the
character or inset before the cusor to be deleted). If I toggle bold or
emphasize nothing happens (where if there is no selection the entire
word is toggled). There are other LyX functions that depend on whether
there is a selection or not. Further, I wonder if any part of LyX's code
assumes that if there is a selection it is non-empty.

(2) menu options are incorrectly set. For example, the scissors icon.

For remaining empty selection issues, see #9222.

For more information, see:
https://www.mail-archive.com/lyx-devel@lists.lyx.org/msg184758.html
This commit is contained in:
Scott Kostyshak 2014-10-21 01:45:31 -04:00
parent 73f2b01678
commit 73a7bf9dad

View File

@ -3877,6 +3877,18 @@ void GuiView::dispatch(FuncRequest const & cmd, DispatchResult & dr)
if (menuBar()->isVisible() && lyxrc.full_screen_menubar) if (menuBar()->isVisible() && lyxrc.full_screen_menubar)
menuBar()->hide(); menuBar()->hide();
} }
// Need to update bv because many LFUNs here might have destroyed it
bv = currentBufferView();
// Clear non-empty selections
// (e.g. from a "char-forward-select" followed by "char-backward-select")
if (bv) {
Cursor & cur = bv->cursor();
if ((cur.selection() && cur.selBegin() == cur.selEnd())) {
cur.clearSelection();
}
}
} }