diff options
author | Alexander Volkov <a.volkov@rusbitech.ru> | 2015-03-19 14:51:53 +0300 |
---|---|---|
committer | Alexander Volkov <a.volkov@rusbitech.ru> | 2015-03-25 11:33:45 +0000 |
commit | 738c07542a0bbf867661520559fed9feda985935 (patch) | |
tree | c4dcbbc900e013e1b27b89ec88aaa6948c8ba860 /src | |
parent | 722f9f947734805919aa955153b3c838f91120e8 (diff) |
Don't replay mouse press event which closes a popup on X11
Add a new style hint to QPlatformIntegration: ReplayMousePressOutsidePopup.
Return false for it in the xcb plugin.
This commit restores the behavior which was in Qt 4.
Task-number: QTBUG-34814
Change-Id: I19fee762395a51475cc67b52b368c70679ca736b
Reviewed-by: Shawn Rutledge <shawn.rutledge@digia.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/gui/kernel/qplatformintegration.cpp | 2 | ||||
-rw-r--r-- | src/gui/kernel/qplatformintegration.h | 3 | ||||
-rw-r--r-- | src/plugins/platforms/xcb/qxcbintegration.cpp | 2 | ||||
-rw-r--r-- | src/widgets/kernel/qwidgetwindow.cpp | 3 |
4 files changed, 8 insertions, 2 deletions
diff --git a/src/gui/kernel/qplatformintegration.cpp b/src/gui/kernel/qplatformintegration.cpp index 6147a2a53a..f2a92e10df 100644 --- a/src/gui/kernel/qplatformintegration.cpp +++ b/src/gui/kernel/qplatformintegration.cpp @@ -392,6 +392,8 @@ QVariant QPlatformIntegration::styleHint(StyleHint hint) const return QPlatformTheme::defaultThemeHint(QPlatformTheme::MousePressAndHoldInterval); case TabFocusBehavior: return QPlatformTheme::defaultThemeHint(QPlatformTheme::TabFocusBehavior); + case ReplayMousePressOutsidePopup: + return true; } return 0; diff --git a/src/gui/kernel/qplatformintegration.h b/src/gui/kernel/qplatformintegration.h index 24e19f68e6..34639e6929 100644 --- a/src/gui/kernel/qplatformintegration.h +++ b/src/gui/kernel/qplatformintegration.h @@ -145,7 +145,8 @@ public: SetFocusOnTouchRelease, ShowIsMaximized, MousePressAndHoldInterval, - TabFocusBehavior + TabFocusBehavior, + ReplayMousePressOutsidePopup }; virtual QVariant styleHint(StyleHint hint) const; diff --git a/src/plugins/platforms/xcb/qxcbintegration.cpp b/src/plugins/platforms/xcb/qxcbintegration.cpp index 258359d20f..04c527c687 100644 --- a/src/plugins/platforms/xcb/qxcbintegration.cpp +++ b/src/plugins/platforms/xcb/qxcbintegration.cpp @@ -374,6 +374,8 @@ QVariant QXcbIntegration::styleHint(QPlatformIntegration::StyleHint hint) const // X11 always has support for windows, but the // window manager could prevent it (e.g. matchbox) return false; + case QPlatformIntegration::ReplayMousePressOutsidePopup: + return false; default: break; } diff --git a/src/widgets/kernel/qwidgetwindow.cpp b/src/widgets/kernel/qwidgetwindow.cpp index 12f5d4b8b0..ba8c16e838 100644 --- a/src/widgets/kernel/qwidgetwindow.cpp +++ b/src/widgets/kernel/qwidgetwindow.cpp @@ -465,7 +465,8 @@ void QWidgetWindow::handleMouseEvent(QMouseEvent *event) } if (qApp->activePopupWidget() != activePopupWidget - && qt_replay_popup_mouse_event) { + && qt_replay_popup_mouse_event + && QGuiApplicationPrivate::platformIntegration()->styleHint(QPlatformIntegration::ReplayMousePressOutsidePopup).toBool()) { if (m_widget->windowType() != Qt::Popup) qt_button_down = 0; if (event->type() == QEvent::MouseButtonPress) { |