diff --git a/src/plugins/fakevim/fakevimactions.cpp b/src/plugins/fakevim/fakevimactions.cpp index 0c6dcc01ec4..fbb7556eef8 100644 --- a/src/plugins/fakevim/fakevimactions.cpp +++ b/src/plugins/fakevim/fakevimactions.cpp @@ -108,6 +108,7 @@ FakeVimSettings::FakeVimSettings() createAction(ConfigTildeOp, false, "TildeOp", "top"); createAction(ConfigShowCmd, true, "ShowCmd", "sc"); createAction(ConfigRelativeNumber, false, "RelativeNumber", "rnu"); + createAction(ConfigBlinkingCursor, false, "BlinkingCursor", "cb"); createAction(ConfigScrollOff, 0, "ScrollOff", "so"); createAction(ConfigBackspace, QString("indent,eol,start"), "ConfigBackspace", "bs"); createAction(ConfigIsKeyword, QString("@,48-57,_,192-255,a-z,A-Z"), "IsKeyword", "isk"); diff --git a/src/plugins/fakevim/fakevimactions.h b/src/plugins/fakevim/fakevimactions.h index f0607f33d84..47d026b5f62 100644 --- a/src/plugins/fakevim/fakevimactions.h +++ b/src/plugins/fakevim/fakevimactions.h @@ -106,7 +106,9 @@ enum FakeVimSettingsCode ConfigClipboard, ConfigShowCmd, ConfigScrollOff, - ConfigRelativeNumber + ConfigRelativeNumber, + + ConfigBlinkingCursor }; class FakeVimSettings diff --git a/src/plugins/fakevim/fakevimoptions.ui b/src/plugins/fakevim/fakevimoptions.ui index db3cb7df450..82e72a1e074 100644 --- a/src/plugins/fakevim/fakevimoptions.ui +++ b/src/plugins/fakevim/fakevimoptions.ui @@ -130,6 +130,13 @@ + + + + Blinking cursor + + + diff --git a/src/plugins/fakevim/fakevimplugin.cpp b/src/plugins/fakevim/fakevimplugin.cpp index 0cf23112690..7fabc33771a 100644 --- a/src/plugins/fakevim/fakevimplugin.cpp +++ b/src/plugins/fakevim/fakevimplugin.cpp @@ -83,6 +83,7 @@ #include #include #include +#include #include #include #include @@ -91,6 +92,7 @@ #include #include #include +#include #include #include #include @@ -426,6 +428,7 @@ QWidget *FakeVimOptionPage::widget() m_group.insert(theFakeVimSetting(ConfigShowCmd), m_ui.checkBoxShowCmd); m_group.insert(theFakeVimSetting(ConfigRelativeNumber), m_ui.checkBoxRelativeNumber); + m_group.insert(theFakeVimSetting(ConfigBlinkingCursor), m_ui.checkBoxBlinkingCursor); connect(m_ui.pushButtonCopyTextEditorSettings, &QAbstractButton::clicked, this, &FakeVimOptionPage::copyTextEditorSettings); @@ -529,6 +532,7 @@ public: void fold(FakeVimHandler *handler, int depth, bool fold); void maybeReadVimRc(); void setShowRelativeLineNumbers(const QVariant &value); + void updateCursorBlinking(const QVariant &value); void resetCommandBuffer(); void showCommandBuffer(FakeVimHandler *handler, const QString &contents, @@ -569,6 +573,8 @@ public: MiniBuffer *m_miniBuffer = nullptr; FakeVimPluginRunData *runData = nullptr; + + int m_savedCursorFlashTime = 0; }; /////////////////////////////////////////////////////////////////////// @@ -1223,6 +1229,8 @@ bool FakeVimPluginPrivate::initialize() this, &FakeVimPluginPrivate::maybeReadVimRc); connect(theFakeVimSetting(ConfigRelativeNumber), &SavedAction::valueChanged, this, &FakeVimPluginPrivate::setShowRelativeLineNumbers); + connect(theFakeVimSetting(ConfigBlinkingCursor), &SavedAction::valueChanged, + this, &FakeVimPluginPrivate::updateCursorBlinking); // Delayed operations. connect(this, &FakeVimPluginPrivate::delayedQuitRequested, @@ -1235,6 +1243,8 @@ bool FakeVimPluginPrivate::initialize() maybeReadVimRc(); // << "MODE: " << theFakeVimSetting(ConfigUseFakeVim)->value(); + updateCursorBlinking(theFakeVimSetting(ConfigBlinkingCursor)->value()); + return true; } @@ -1854,6 +1864,7 @@ void FakeVimPluginPrivate::setUseFakeVim(const QVariant &value) Find::setUseFakeVim(on); setUseFakeVimInternal(on); setShowRelativeLineNumbers(theFakeVimSetting(ConfigRelativeNumber)->value()); + updateCursorBlinking(theFakeVimSetting(ConfigBlinkingCursor)->value()); } void FakeVimPluginPrivate::setUseFakeVimInternal(bool on) @@ -1884,6 +1895,15 @@ void FakeVimPluginPrivate::setShowRelativeLineNumbers(const QVariant &value) } } +void FakeVimPluginPrivate::updateCursorBlinking(const QVariant &value) +{ + if (m_savedCursorFlashTime == 0) + m_savedCursorFlashTime = QGuiApplication::styleHints()->cursorFlashTime(); + + bool blink = value.toBool() || !theFakeVimSetting(ConfigUseFakeVim)->value().toBool(); + QGuiApplication::styleHints()->setCursorFlashTime(blink ? m_savedCursorFlashTime : 0); +} + void FakeVimPluginPrivate::handleExCommand(FakeVimHandler *handler, bool *handled, const ExCommand &cmd) { QTC_ASSERT(handler, return);