commit 73a7bf9dad0913c25bb6119ed11972562381395f
Author: Scott Kostyshak <skost...@lyx.org>
Date:   Tue Oct 21 01:45:31 2014 -0400

    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

diff --git a/src/frontends/qt4/GuiView.cpp b/src/frontends/qt4/GuiView.cpp
index 5f197c8..469f9ca 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();
+               }
+       }
 }
 
 

Reply via email to