summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMiikka Heikkinen <miikka.heikkinen@digia.com>2012-10-26 11:30:22 +0300
committerThe Qt Project <gerrit-noreply@qt-project.org>2012-10-26 11:18:12 +0200
commit8ac2ea94d37126ef68d394e056bcaf7769a99956 (patch)
tree606dba42ebf490ff42cd252fe43cdd1513203609 /src
parent0f14ea3f3a05ef785b44fa610bf90ff3b5ba7beb (diff)
Fix enter/leave event generation between native widgets when grabbing.
Removed enter/leave event generation when moving between between related windows in QWidgetWindow (i.e. native widgets) while some widget was explicitly grabbing the mouse input. This makes enter/leave event generation identical to non-native widgets. Task-number: QTBUG-27551 Change-Id: I4996007bd7922e073a2957ad267a6373e8f3fecc Reviewed-by: Friedemann Kleint <Friedemann.Kleint@digia.com>
Diffstat (limited to 'src')
-rw-r--r--src/widgets/kernel/qwidgetwindow.cpp11
1 files changed, 8 insertions, 3 deletions
diff --git a/src/widgets/kernel/qwidgetwindow.cpp b/src/widgets/kernel/qwidgetwindow.cpp
index 900818d5c6..b3d46d5c28 100644
--- a/src/widgets/kernel/qwidgetwindow.cpp
+++ b/src/widgets/kernel/qwidgetwindow.cpp
@@ -239,9 +239,14 @@ void QWidgetWindow::handleEnterLeaveEvent(QEvent *event)
}
}
}
- QWidget *leave = qt_last_mouse_receiver ? qt_last_mouse_receiver.data() : m_widget;
- QApplicationPrivate::dispatchEnterLeave(enter, leave);
- qt_last_mouse_receiver = enter;
+ // Enter-leave between sibling widgets is ignored when there is a mousegrabber - this makes
+ // both native and non-native widgets work similarly.
+ // When mousegrabbing, leaves are only generated if leaving the parent window.
+ if (!enter || !QWidget::mouseGrabber()) {
+ QWidget *leave = qt_last_mouse_receiver ? qt_last_mouse_receiver.data() : m_widget;
+ QApplicationPrivate::dispatchEnterLeave(enter, leave);
+ qt_last_mouse_receiver = enter;
+ }
} else {
QApplicationPrivate::dispatchEnterLeave(m_widget, 0);
qt_last_mouse_receiver = m_widget;