Send key events to pop-up widget in case there is one.
authorFriedemann Kleint <Friedemann.Kleint@nokia.com>
Mon, 11 Jun 2012 14:13:24 +0000 (16:13 +0200)
committerQt by Nokia <qt-info@nokia.com>
Wed, 13 Jun 2012 00:29:46 +0000 (02:29 +0200)
Make QApplicationPrivate::inPopupMode() static for
convenience.

Task-number: QTBUG-26095

Change-Id: I98dc1e40d357592b790cd51d7aca60c2be9f380f
Reviewed-by: Girish Ramakrishnan <girish.1.ramakrishnan@nokia.com>
src/widgets/kernel/qapplication.cpp
src/widgets/kernel/qapplication_p.h
src/widgets/kernel/qwidgetwindow_qpa.cpp

index 0553dab..7999eeb 100644 (file)
@@ -3972,7 +3972,7 @@ bool QApplicationPrivate::notify_helper(QObject *receiver, QEvent * e)
     \snippet code/src_gui_kernel_qapplication.cpp 13
 */
 
-bool QApplicationPrivate::inPopupMode() const
+bool QApplicationPrivate::inPopupMode()
 {
     return QApplicationPrivate::popupWidgets != 0;
 }
index f700851..1e57055 100644 (file)
@@ -170,7 +170,7 @@ public:
     static void x11_initialize_style();
 #endif
 
-    bool inPopupMode() const;
+    static bool inPopupMode();
     void closePopup(QWidget *popup);
     void openPopup(QWidget *popup);
     static void setFocusWidget(QWidget *focus, Qt::FocusReason reason);
index 21a0ada..7ae0a5b 100644 (file)
@@ -342,8 +342,14 @@ void QWidgetWindow::handleKeyEvent(QKeyEvent *event)
     if (QApplicationPrivate::instance()->modalState() && !qt_try_modal(m_widget, event->type()))
         return;
 
-    QObject *receiver = focusObject();
-
+    QObject *receiver = 0;
+    if (QApplicationPrivate::inPopupMode()) {
+        QWidget *popup = QApplication::activePopupWidget();
+        QWidget *popupFocusWidget = popup->focusWidget();
+        receiver = popupFocusWidget ? popupFocusWidget : popup;
+    }
+    if (!receiver)
+        receiver = focusObject();
     QGuiApplication::sendSpontaneousEvent(receiver, event);
 }