Send QContexMenuEvent when Context Menu key is pressed.
authorFriedemann Kleint <Friedemann.Kleint@digia.com>
Fri, 2 Nov 2012 10:59:14 +0000 (11:59 +0100)
committerThe Qt Project <gerrit-noreply@qt-project.org>
Tue, 6 Nov 2012 15:35:21 +0000 (16:35 +0100)
Bring back code from keymapper_x11.cpp.

Task-number: QTBUG-27648
Change-Id: I2a189a0537bcd2ae0eb093576c84814b2f09933b
Reviewed-by: Samuel Rødal <samuel.rodal@digia.com>
src/plugins/platforms/xcb/qxcbkeyboard.cpp

index a8542af..d35ce18 100644 (file)
@@ -53,6 +53,7 @@
 
 #include <qpa/qplatforminputcontext.h>
 #include <qpa/qplatformintegration.h>
+#include <qpa/qplatformcursor.h>
 
 #ifndef XK_ISO_Left_Tab
 #define XK_ISO_Left_Tab         0xFE20
@@ -1106,9 +1107,15 @@ void QXcbKeyboard::handleKeyEvent(QWindow *window, QEvent::Type type, xcb_keycod
         filtered = inputContext->filterEvent(&event);
     }
 
-    if (!filtered)
+    if (!filtered) {
+        if (type == QEvent::KeyPress && qtcode == Qt::Key_Menu) {
+            const QPoint globalPos = window->screen()->handle()->cursor()->pos();
+            const QPoint pos = window->mapFromGlobal(globalPos);
+            QWindowSystemInterface::handleContextMenuEvent(window, false, pos, globalPos, modifiers);
+        }
         QWindowSystemInterface::handleExtendedKeyEvent(window, time, type, qtcode, modifiers,
                                                        code, sym, state, string.left(count), isAutoRepeat);
+    }
 
     if (isAutoRepeat && type == QEvent::KeyRelease) {
         // since we removed it from the event queue using checkEvent we need to send the key press here