From 75c9193ff6f6ddf7c6c908c51aa17a41fb4baba4 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Thorbj=C3=B8rn=20Lindeijer?= <thorbjorn.lindeijer@nokia.com>
Date: Fri, 19 Dec 2008 13:55:03 +0100
Subject: [PATCH] Use the QKeyEvent::text() for inserting text

Avoids inserting all kinds of funny characters when special keys are
pressed. For some reason, the Delete key now inserts spades. At least
those are more useful than phones, according to hjk.
---
 src/plugins/fakevim/handler.cpp | 34 +++++++++++++++++----------------
 1 file changed, 18 insertions(+), 16 deletions(-)

diff --git a/src/plugins/fakevim/handler.cpp b/src/plugins/fakevim/handler.cpp
index 9a827a2ecc5..5c5f89e6699 100644
--- a/src/plugins/fakevim/handler.cpp
+++ b/src/plugins/fakevim/handler.cpp
@@ -81,11 +81,11 @@ public:
     static int control(int key) { return key + 256; }
 
     void init();
-    void handleKey(int key);
-    void handleInsertMode(int key);
-    void handleCommandMode(int key);
-    void handleRegisterMode(int key);
-    void handleExMode(int key);
+    void handleKey(int key, const QString &text);
+    void handleInsertMode(int key, const QString &text);
+    void handleCommandMode(int key, const QString &text);
+    void handleRegisterMode(int key, const QString &text);
+    void handleExMode(int key, const QString &text);
     void finishMovement();
     void updateCommandBuffer();
     void search(const QString &needle, bool backwards);
@@ -153,7 +153,7 @@ bool FakeVimHandler::Private::eventFilter(QObject *ob, QEvent *ev)
         key += 32;
     if ((keyEvent->modifiers() & Qt::ControlModifier) != 0)
         key += 256;
-    handleKey(key);
+    handleKey(key, keyEvent->text());
 
     // We fake vi-style end-of-line behaviour
     m_fakeEnd = atEol() && m_mode == CommandMode;
@@ -176,14 +176,14 @@ bool FakeVimHandler::Private::eventFilter(QObject *ob, QEvent *ev)
     return true;
 }
 
-void FakeVimHandler::Private::handleKey(int key)
+void FakeVimHandler::Private::handleKey(int key, const QString &text)
 {
     if (m_mode == InsertMode)
-        handleInsertMode(key);
+        handleInsertMode(key, text);
     else if (m_mode == CommandMode)
-        handleCommandMode(key);
+        handleCommandMode(key, text);
     else if (m_mode == ExMode)
-        handleExMode(key);
+        handleExMode(key, text);
 }
 
 void FakeVimHandler::Private::finishMovement()
@@ -218,8 +218,10 @@ void FakeVimHandler::Private::showMessage(const QString &msg)
     emit q->commandBufferChanged(msg);
 }
 
-void FakeVimHandler::Private::handleCommandMode(int key)
+void FakeVimHandler::Private::handleCommandMode(int key, const QString &text)
 {
+    Q_UNUSED(text)
+
     //qDebug() << "-> MODE: " << m_mode << " KEY: " << key;
     if (m_submode == RegisterSubMode) {
         m_register = key;
@@ -334,7 +336,7 @@ void FakeVimHandler::Private::handleCommandMode(int key)
     }    
 }
 
-void FakeVimHandler::Private::handleInsertMode(int key)
+void FakeVimHandler::Private::handleInsertMode(int key, const QString &text)
 {
     if (key == Key_Escape) {
         m_mode = CommandMode;
@@ -351,15 +353,15 @@ void FakeVimHandler::Private::handleInsertMode(int key)
         m_tc.insertBlock();
     } else if (key == Key_Backspace) {
         m_tc.deletePreviousChar();
-    } else if (key == Key_Tab) {
-        m_tc.insertText(QChar(9));
     } else {
-        m_tc.insertText(QChar(key));
+        m_tc.insertText(text);
     }    
 }
 
-void FakeVimHandler::Private::handleExMode(int key)
+void FakeVimHandler::Private::handleExMode(int key, const QString &text)
 {
+    Q_UNUSED(text)
+
     if (key == Key_Escape) {
         m_commandBuffer.clear();
         m_commandCode = 0;
-- 
GitLab