Browse Source

vim-mode: amend cursor position after mouse release

Le Tan 8 years ago
parent
commit
2373a0326e
4 changed files with 22 additions and 0 deletions
  1. 16 0
      src/utils/vvim.cpp
  2. 2 0
      src/utils/vvim.h
  3. 2 0
      src/veditor.h
  4. 2 0
      src/vmdeditor.cpp

+ 16 - 0
src/utils/vvim.cpp

@@ -120,6 +120,8 @@ VVim::VVim(VEditor *p_editor)
             this, &VVim::handleMousePressed);
     connect(m_editor->object(), &VEditorObject::mouseMoved,
             this, &VVim::handleMouseMoved);
+    connect(m_editor->object(), &VEditorObject::mouseReleased,
+            this, &VVim::handleMouseReleased);
 }
 
 // Set @p_cursor's position specified by @p_positionInBlock.
@@ -6231,6 +6233,20 @@ void VVim::handleMouseMoved(QMouseEvent *p_event)
     }
 }
 
+void VVim::handleMouseReleased(QMouseEvent *p_event)
+{
+    Q_UNUSED(p_event);
+
+    if (checkMode(VimMode::Normal)) {
+        QTextCursor cursor = m_editor->textCursorW();
+        if (cursor.hasSelection()) {
+            return;
+        }
+
+        amendCursorPosition();
+    }
+}
+
 void VVim::setCursorBlockMode(VEditor *p_cursor, CursorBlock p_mode)
 {
     p_cursor->setCursorBlockModeW(p_mode);

+ 2 - 0
src/utils/vvim.h

@@ -223,6 +223,8 @@ private slots:
 
     void handleMouseMoved(QMouseEvent *p_event);
 
+    void handleMouseReleased(QMouseEvent *p_event);
+
     // When we display cursor as block, it makes no sense to put cursor at the
     // end of line.
     void amendCursorPosition();

+ 2 - 0
src/veditor.h

@@ -344,6 +344,8 @@ signals:
 
     void mousePressed(QMouseEvent *p_event);
 
+    void mouseReleased(QMouseEvent *p_event);
+
 private slots:
     // Timer for find-wrap label.
     void labelTimerTimeout()

+ 2 - 0
src/vmdeditor.cpp

@@ -315,6 +315,8 @@ void VMdEditor::mouseReleaseEvent(QMouseEvent *p_event)
     }
 
     VTextEdit::mouseReleaseEvent(p_event);
+
+    emit m_object->mouseReleased(p_event);
 }
 
 void VMdEditor::mouseMoveEvent(QMouseEvent *p_event)