changeset 17248:0b2a0acd0315

Use keyPressEvent instead of winEvent for keyboard input * QWinTerminalImpl.cpp, QWinTerminalImpl.h (QWinTerminalImpl::winEvent): Delete. (QWinTerminalImpl::keyPressEvent): Decode keypress to bytearray and call to sendText to pass to console. (translateKey): New function.
author John Donoghue <john.donoghue@ieee.org>
date Tue, 13 Aug 2013 19:31:59 -0400
parents e993fa124b46
children 923ce8b42db2
files libgui/qterminal/libqterminal/win32/QWinTerminalImpl.cpp libgui/qterminal/libqterminal/win32/QWinTerminalImpl.h
diffstat 2 files changed, 64 insertions(+), 24 deletions(-) [+]
line wrap: on
line diff
--- a/libgui/qterminal/libqterminal/win32/QWinTerminalImpl.cpp	Wed Aug 14 12:33:15 2013 -0400
+++ b/libgui/qterminal/libqterminal/win32/QWinTerminalImpl.cpp	Tue Aug 13 19:31:59 2013 -0400
@@ -94,6 +94,66 @@
 
 //////////////////////////////////////////////////////////////////////////////
 
+static QString translateKey (QKeyEvent *ev)
+{
+  QString s;
+
+  if (!ev->text ().isEmpty ())
+    s = ev->text ();
+  else
+    {
+      QString esc = "\x1b";
+
+      switch (ev->key ())
+        {
+        case Qt::Key_Up:
+          s = esc + "[A";
+          break;
+
+        case Qt::Key_Down:
+          s = esc + "[B";
+          break;
+
+        case Qt::Key_Right:
+          s = esc + "[C";
+          break;
+
+        case Qt::Key_Left:
+          s = esc + "[D";
+          break;
+
+        case Qt::Key_Home:
+          s = esc + "[1~";
+          break;
+
+        case Qt::Key_End:
+          s = esc + "[4~";
+          break;
+
+        case Qt::Key_Insert:
+          s = esc + "[2~";
+          break;
+
+        case Qt::Key_Delete:
+          s = esc + "[3~";
+          break;
+
+        case Qt::Key_PageUp:
+          s = esc + "[5~";
+          break;
+
+        case Qt::Key_PageDown:
+          s = esc + "[6~";
+          break;
+
+        default:
+          break;
+        }
+    }
+
+  return s;
+}
+
 class QConsolePrivate
 {
   friend class QWinTerminalImpl;
@@ -1294,29 +1354,6 @@
 
 //////////////////////////////////////////////////////////////////////////////
 
-bool QWinTerminalImpl::winEvent (MSG* msg, long* result)
-{
-  switch (msg->message)
-    {
-    case WM_KEYDOWN:
-    case WM_KEYUP:
-    //case WM_CHAR:
-      if ( GetKeyState ('C') == 0 || GetKeyState (VK_CONTROL) == 0)
-        {
-          PostMessage (d->m_consoleWindow,
-                   msg->message,
-                   msg->wParam,
-                   msg->lParam);
-        }
-      // allow Qt to process messages as well, in case of shortcuts etc
-      return false;
-    default:
-      return false;
-    }
-}
-
-//////////////////////////////////////////////////////////////////////////////
-
 void QWinTerminalImpl::scrollValueChanged (int value)
 {
   d->setScrollValue (value);
@@ -1359,6 +1396,10 @@
 
 void QWinTerminalImpl::keyPressEvent (QKeyEvent* event)
 {
+  QString s = translateKey (event);
+  if (!s.isEmpty ())
+    sendText (s);
+
   if (d->m_hasBlinkingCursor)
     {
       d->m_blinkCursorTimer->start (d->BLINK_DELAY);
--- a/libgui/qterminal/libqterminal/win32/QWinTerminalImpl.h	Wed Aug 14 12:33:15 2013 -0400
+++ b/libgui/qterminal/libqterminal/win32/QWinTerminalImpl.h	Tue Aug 13 19:31:59 2013 -0400
@@ -81,7 +81,6 @@
   void focusInEvent (QFocusEvent*);
   void focusOutEvent (QFocusEvent*);
   void keyPressEvent (QKeyEvent*);
-  bool winEvent (MSG*, long*);
   virtual void start (void);
   void mouseMoveEvent (QMouseEvent *event);
   void mousePressEvent (QMouseEvent *event);