diff options
author | Miikka Heikkinen <miikka.heikkinen@digia.com> | 2012-10-26 11:30:22 +0300 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2012-10-26 11:18:12 +0200 |
commit | 8ac2ea94d37126ef68d394e056bcaf7769a99956 (patch) | |
tree | 606dba42ebf490ff42cd252fe43cdd1513203609 /src/widgets/kernel | |
parent | 0f14ea3f3a05ef785b44fa610bf90ff3b5ba7beb (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/widgets/kernel')
-rw-r--r-- | src/widgets/kernel/qwidgetwindow.cpp | 11 |
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; |