diff --git a/src/utils/vvim.cpp b/src/utils/vvim.cpp index 70895772..0d424a66 100644 --- a/src/utils/vvim.cpp +++ b/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); diff --git a/src/utils/vvim.h b/src/utils/vvim.h index df4c8fdd..8979d0ce 100644 --- a/src/utils/vvim.h +++ b/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(); diff --git a/src/veditor.h b/src/veditor.h index 673c0352..f950e414 100644 --- a/src/veditor.h +++ b/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() diff --git a/src/vmdeditor.cpp b/src/vmdeditor.cpp index b971cdd8..7ed673b5 100644 --- a/src/vmdeditor.cpp +++ b/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)