Mercurial > hg > octave-lyh
changeset 17256: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 +++ b/libgui/qterminal/libqterminal/win32/QWinTerminalImpl.cpp @@ -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 +++ b/libgui/qterminal/libqterminal/win32/QWinTerminalImpl.h @@ -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);