diff options
author | Miikka Heikkinen <miikka.heikkinen@digia.com> | 2012-10-12 15:28:55 +0300 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2012-10-15 21:11:57 +0200 |
commit | 698d5a2b9f3df52fb6c4e178d50d2743db000b3d (patch) | |
tree | 6934576561eaf684c135bbaf2238b2f344a2ec6e /src | |
parent | 21b5c1d4a9e00d01d69e5801f051ee8660b76d5c (diff) |
Improve Qt::WA_UnderMouse accuracy
Qt::WA_UnderMouse is set/cleared when widgets get enter/leave events.
When there is a popup active, Qt::WA_UnderMouse should always report
false, but this was not happening, because existing state was not
cleared when popup was opened.
Dispatch a leave event for last mouse receiver when a popup is
opened to update the Qt::WA_UnderMouse state. This is roughly
equivalent to what happens on Qt4.
Task-number: QTBUG-27478
Change-Id: I7739e75727213e748ab2f42f1027d32325d89fb0
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@digia.com>
Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/widgets/kernel/qapplication_qpa.cpp | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/src/widgets/kernel/qapplication_qpa.cpp b/src/widgets/kernel/qapplication_qpa.cpp index 6b04c18b9d..5dc68e47e0 100644 --- a/src/widgets/kernel/qapplication_qpa.cpp +++ b/src/widgets/kernel/qapplication_qpa.cpp @@ -77,6 +77,7 @@ extern QWidget *qt_button_down; extern QWidget *qt_popup_down; extern bool qt_replay_popup_mouse_event; int openPopupCount = 0; +extern QPointer<QWidget> qt_last_mouse_receiver; void QApplicationPrivate::createEventDispatcher() { @@ -249,6 +250,12 @@ void QApplicationPrivate::openPopup(QWidget *popup) QApplication::sendEvent(fw, &e); } } + + // Dispatch leave for last mouse receiver to update undermouse states + if (qt_last_mouse_receiver && !QWidget::mouseGrabber()) { + QApplicationPrivate::dispatchEnterLeave(0, qt_last_mouse_receiver.data()); + qt_last_mouse_receiver = 0; + } } void QApplicationPrivate::initializeMultitouch_sys() |