diff options
author | Alexander Volkov <a.volkov@rusbitech.ru> | 2019-03-28 17:32:23 +0300 |
---|---|---|
committer | Alexander Volkov <a.volkov@rusbitech.ru> | 2019-05-01 20:29:16 +0000 |
commit | ef3daddae1720956e746142ac7ee54a27b9299d7 (patch) | |
tree | a2dfe70653fc6d4a0b55be135e57a1c42af7a948 /src/gui/kernel | |
parent | 5f4b03659b1e2318acb87fd9bf7325f707dfa0ad (diff) |
Use QPlatformTheme::TouchDoubleTapDistance for touch events
... and update the cached values on theme change.
Modify tst_QWidget::touchEventSynthesizedMouseEvent()
to avoid unexpected double click detection.
Change-Id: I151c47e851ebba7550b1b09caca2781c28d7d3d9
Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
Diffstat (limited to 'src/gui/kernel')
-rw-r--r-- | src/gui/kernel/qguiapplication.cpp | 20 | ||||
-rw-r--r-- | src/gui/kernel/qguiapplication_p.h | 1 |
2 files changed, 15 insertions, 6 deletions
diff --git a/src/gui/kernel/qguiapplication.cpp b/src/gui/kernel/qguiapplication.cpp index 424af20f26..a67214bd9a 100644 --- a/src/gui/kernel/qguiapplication.cpp +++ b/src/gui/kernel/qguiapplication.cpp @@ -181,7 +181,9 @@ ulong QGuiApplicationPrivate::mousePressTime = 0; Qt::MouseButton QGuiApplicationPrivate::mousePressButton = Qt::NoButton; int QGuiApplicationPrivate::mousePressX = 0; int QGuiApplicationPrivate::mousePressY = 0; -int QGuiApplicationPrivate::mouse_double_click_distance = -1; + +static int mouseDoubleClickDistance = -1; +static int touchDoubleTapDistance = -1; QWindow *QGuiApplicationPrivate::currentMousePressWindow = 0; @@ -257,6 +259,12 @@ static inline void clearFontUnlocked() QGuiApplicationPrivate::app_font = 0; } +static void initThemeHints() +{ + mouseDoubleClickDistance = QGuiApplicationPrivate::platformTheme()->themeHint(QPlatformTheme::MouseDoubleClickDistance).toInt(); + touchDoubleTapDistance = QGuiApplicationPrivate::platformTheme()->themeHint(QPlatformTheme::TouchDoubleTapDistance).toInt(); +} + static bool checkNeedPortalSupport() { #if QT_CONFIG(dbus) @@ -1519,8 +1527,7 @@ void QGuiApplicationPrivate::init() initPalette(); QFont::initialize(); - - mouse_double_click_distance = platformTheme()->themeHint(QPlatformTheme::MouseDoubleClickDistance).toInt(); + initThemeHints(); #ifndef QT_NO_CURSOR QCursorData::initialize(); @@ -2030,8 +2037,10 @@ void QGuiApplicationPrivate::processMouseEvent(QWindowSystemInterfacePrivate::Mo if (mouseMove) { QGuiApplicationPrivate::lastCursorPosition = globalPoint; - if (qAbs(globalPoint.x() - mousePressX) > mouse_double_click_distance|| - qAbs(globalPoint.y() - mousePressY) > mouse_double_click_distance) + const auto doubleClickDistance = e->source == Qt::MouseEventNotSynthesized ? + mouseDoubleClickDistance : touchDoubleTapDistance; + if (qAbs(globalPoint.x() - mousePressX) > doubleClickDistance || + qAbs(globalPoint.y() - mousePressY) > doubleClickDistance) mousePressButton = Qt::NoButton; } else { mouse_buttons = e->buttons; @@ -3988,6 +3997,7 @@ void QGuiApplicationPrivate::notifyThemeChanged() clearFontUnlocked(); initFontUnlocked(); } + initThemeHints(); } void QGuiApplicationPrivate::sendApplicationPaletteChange(bool toAllWidgets, const char *className) diff --git a/src/gui/kernel/qguiapplication_p.h b/src/gui/kernel/qguiapplication_p.h index 042a36c31f..482d45e5c3 100644 --- a/src/gui/kernel/qguiapplication_p.h +++ b/src/gui/kernel/qguiapplication_p.h @@ -211,7 +211,6 @@ public: static Qt::MouseButton mousePressButton; static int mousePressX; static int mousePressY; - static int mouse_double_click_distance; static QPointF lastCursorPosition; static QWindow *currentMouseWindow; static QWindow *currentMousePressWindow; |