From 77e101406f91ed52268d77894d2cba73de146519 Mon Sep 17 00:00:00 2001 From: Lukas Holecek Date: Thu, 2 Aug 2012 19:35:45 +0200 Subject: [PATCH] fakevim: Fixed pasting from clipboard Paste from clipboard if register is "" and 'clipboard' contains 'unnamedplus' (otherwise from selection if available and 'clipboard' contains 'unnamed'). Also correctly parse 'clipboard' option to string list. Change-Id: Ic78cd2953789c0402f515973ed2eb48fc3e72154 Reviewed-by: hjk --- src/plugins/fakevim/fakevimhandler.cpp | 50 +++++++++++++++++--------- 1 file changed, 34 insertions(+), 16 deletions(-) diff --git a/src/plugins/fakevim/fakevimhandler.cpp b/src/plugins/fakevim/fakevimhandler.cpp index 3b989ba8611..c5aa4597c5f 100644 --- a/src/plugins/fakevim/fakevimhandler.cpp +++ b/src/plugins/fakevim/fakevimhandler.cpp @@ -1144,6 +1144,7 @@ public: void setRegisterContents(int reg, const QString &contents); RangeMode registerRangeMode(int reg) const; void setRegisterRangeMode(int reg, RangeMode mode); + void getRegisterType(int reg, bool *isClipboard, bool *isSelection) const; void recordJump(); QVector m_jumpListUndo; @@ -5372,17 +5373,9 @@ RangeMode FakeVimHandler::Private::registerRangeMode(int reg) const void FakeVimHandler::Private::setRegisterContents(int reg, const QString &contents) { - bool copyToClipboard = false; - bool copyToSelection = false; - if (reg == '"') { - QStringList list = config(ConfigClipboard).toStringList(); - copyToClipboard = list.contains(QString("unnamedplus")); - copyToSelection = list.contains(QString("unnamed")); - } else if (reg == '+') { - copyToClipboard = true; - } else if (reg == '*') { - copyToSelection = true; - } + bool copyToClipboard; + bool copyToSelection; + getRegisterType(reg, ©ToClipboard, ©ToSelection); if (copyToClipboard || copyToSelection) { QClipboard *clipboard = QApplication::clipboard(); @@ -5398,18 +5391,43 @@ void FakeVimHandler::Private::setRegisterContents(int reg, const QString &conten QString FakeVimHandler::Private::registerContents(int reg) const { - if (reg == '+') - return QApplication::clipboard()->text(QClipboard::Clipboard); + bool copyFromClipboard; + bool copyFromSelection; + getRegisterType(reg, ©FromClipboard, ©FromSelection); - if (reg == '*') { + if (copyFromClipboard || copyFromSelection) { QClipboard *clipboard = QApplication::clipboard(); - return clipboard->text(clipboard->supportsSelection() ? - QClipboard::Selection : QClipboard::Clipboard); + bool hasSelection = clipboard->supportsSelection(); + if (copyFromClipboard || (copyFromSelection && !hasSelection)) + return clipboard->text(QClipboard::Clipboard); + if (copyFromSelection && hasSelection) + return clipboard->text(QClipboard::Selection); } return g.registers[reg].contents; } +void FakeVimHandler::Private::getRegisterType(int reg, bool *isClipboard, bool *isSelection) const +{ + bool clipboard = false; + bool selection = false; + + if (reg == '"') { + QStringList list = config(ConfigClipboard).toString().split(','); + clipboard = list.contains(QString("unnamedplus")); + selection = list.contains(QString("unnamed")); + } else if (reg == '+') { + clipboard = true; + } else if (reg == '*') { + selection = true; + } + + if (isClipboard != 0) + *isClipboard = clipboard; + if (isSelection != 0) + *isSelection = selection; +} + /////////////////////////////////////////////////////////////////////// // // FakeVimHandler