From 73a7bf9dad0913c25bb6119ed11972562381395f Mon Sep 17 00:00:00 2001 From: Scott Kostyshak Date: Tue, 21 Oct 2014 01:45:31 -0400 Subject: [PATCH] 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 --- src/frontends/qt4/GuiView.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/frontends/qt4/GuiView.cpp b/src/frontends/qt4/GuiView.cpp index 5f197c8f19..469f9ca40f 100644 --- a/src/frontends/qt4/GuiView.cpp +++ b/src/frontends/qt4/GuiView.cpp @@ -3877,6 +3877,18 @@ void GuiView::dispatch(FuncRequest const & cmd, DispatchResult & dr) if (menuBar()->isVisible() && lyxrc.full_screen_menubar) 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(); + } + } } -- 2.39.5