From bb0480a03bba6b23dd1e35ea1a8cc62e4f4a0219 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20R=C3=B8dal?= Date: Wed, 9 Feb 2011 12:05:54 +0100 Subject: Added workaround to make XCB key event handling detect upper case. --- src/plugins/platforms/xcb/qxcbkeyboard.cpp | 29 ++++++++++++++--------------- src/plugins/platforms/xcb/qxcbkeyboard.h | 3 +++ 2 files changed, 17 insertions(+), 15 deletions(-) diff --git a/src/plugins/platforms/xcb/qxcbkeyboard.cpp b/src/plugins/platforms/xcb/qxcbkeyboard.cpp index b226e3e..83f053a 100644 --- a/src/plugins/platforms/xcb/qxcbkeyboard.cpp +++ b/src/plugins/platforms/xcb/qxcbkeyboard.cpp @@ -911,10 +911,8 @@ QXcbKeyboard::~QXcbKeyboard() xcb_key_symbols_free(m_key_symbols); } -void QXcbKeyboard::handleKeyPressEvent(QWidget *widget, const xcb_key_press_event_t *event) +void QXcbKeyboard::handleKeyEvent(QWidget *widget, QEvent::Type type, xcb_keysym_t sym, quint16 state, xcb_timestamp_t time) { - xcb_keysym_t sym = xcb_key_press_lookup_keysym(m_key_symbols, const_cast(event), 0); - QByteArray chars; chars.resize(513); @@ -922,25 +920,26 @@ void QXcbKeyboard::handleKeyPressEvent(QWidget *widget, const xcb_key_press_even int qtcode = 0; int count = 0; - QString string = translateKeySym(sym, event->state, qtcode, modifiers, chars, count); + if (state & XCB_MOD_MASK_SHIFT && sym <= 0x7f && isalpha(sym)) + sym = toupper(sym); - QWindowSystemInterface::handleKeyEvent(widget, event->time, QEvent::KeyPress, qtcode, modifiers, string.left(count)); + QString string = translateKeySym(sym, state, qtcode, modifiers, chars, count); + + QWindowSystemInterface::handleKeyEvent(widget, time, type, qtcode, modifiers, string.left(count)); } -void QXcbKeyboard::handleKeyReleaseEvent(QWidget *widget, const xcb_key_release_event_t *event) +void QXcbKeyboard::handleKeyPressEvent(QWidget *widget, const xcb_key_press_event_t *event) { - xcb_keysym_t sym = xcb_key_release_lookup_keysym(m_key_symbols, const_cast(event), 0); - - QByteArray chars; - chars.resize(513); + xcb_keysym_t sym = xcb_key_press_lookup_keysym(m_key_symbols, const_cast(event), 0); - Qt::KeyboardModifiers modifiers; - int qtcode = 0; - int count = 0; + handleKeyEvent(widget, QEvent::KeyPress, sym, event->state, event->time); +} - QString string = translateKeySym(sym, event->state, qtcode, modifiers, chars, count); +void QXcbKeyboard::handleKeyReleaseEvent(QWidget *widget, const xcb_key_release_event_t *event) +{ + xcb_keysym_t sym = xcb_key_release_lookup_keysym(m_key_symbols, const_cast(event), 0); - QWindowSystemInterface::handleKeyEvent(widget, event->time, QEvent::KeyRelease, qtcode, modifiers, string.left(count)); + handleKeyEvent(widget, QEvent::KeyRelease, sym, event->state, event->time); } void QXcbKeyboard::handleMappingNotifyEvent(const xcb_mapping_notify_event_t *event) diff --git a/src/plugins/platforms/xcb/qxcbkeyboard.h b/src/plugins/platforms/xcb/qxcbkeyboard.h index dc4175a..89c7418 100644 --- a/src/plugins/platforms/xcb/qxcbkeyboard.h +++ b/src/plugins/platforms/xcb/qxcbkeyboard.h @@ -46,6 +46,8 @@ #include "xcb/xcb_keysyms.h" +#include + class QXcbKeyboard : public QXcbObject { public: @@ -60,6 +62,7 @@ public: Qt::KeyboardModifiers translateModifiers(int s); private: + void handleKeyEvent(QWidget *widget, QEvent::Type type, xcb_keysym_t sym, quint16 state, xcb_timestamp_t time); int translateKeySym(uint key) const; QString translateKeySym(xcb_keysym_t keysym, uint xmodifiers, -- cgit v0.12