summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMiikka Heikkinen <miikka.heikkinen@digia.com>2012-10-12 15:28:55 +0300
committerThe Qt Project <gerrit-noreply@qt-project.org>2012-10-15 21:11:57 +0200
commit698d5a2b9f3df52fb6c4e178d50d2743db000b3d (patch)
tree6934576561eaf684c135bbaf2238b2f344a2ec6e /src
parent21b5c1d4a9e00d01d69e5801f051ee8660b76d5c (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.cpp7
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()