vim-mode: amend cursor position after mouse release

This commit is contained in:
Le Tan 2017-12-18 21:53:18 +08:00
parent 0976d65923
commit 2373a0326e
4 changed files with 22 additions and 0 deletions

View File

@ -120,6 +120,8 @@ VVim::VVim(VEditor *p_editor)
this, &VVim::handleMousePressed); this, &VVim::handleMousePressed);
connect(m_editor->object(), &VEditorObject::mouseMoved, connect(m_editor->object(), &VEditorObject::mouseMoved,
this, &VVim::handleMouseMoved); this, &VVim::handleMouseMoved);
connect(m_editor->object(), &VEditorObject::mouseReleased,
this, &VVim::handleMouseReleased);
} }
// Set @p_cursor's position specified by @p_positionInBlock. // 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) void VVim::setCursorBlockMode(VEditor *p_cursor, CursorBlock p_mode)
{ {
p_cursor->setCursorBlockModeW(p_mode); p_cursor->setCursorBlockModeW(p_mode);

View File

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

View File

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

View File

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