diff options
author | Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@nokia.com> | 2014-02-27 16:48:16 +0100 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2014-03-10 09:56:13 +0100 |
commit | ca280bfe3bc551f814d59d25079e098798fbdad7 (patch) | |
tree | 3e7a9b357a1218343d456834ae2c17e612532e02 /src/plugins/platforms | |
parent | d87ddcf56ff3bc46f468d8da276f1afc28b6ac26 (diff) |
Android: Support double click event
It's impossible to get the distance between two touch events
down to 5 pixels on e.g. my Nexus 5.
This patch makes it possible to tweak the distance through
the platform theme, and sets the distance to 15% of an inch
on Android. Also provides a way to override the default minimum
of 5 pixels by using an environment variable.
[ChangeLog][Android] Fixed double click events
Task-number: QTBUG-36974
Change-Id: I23d94020c531747d6638b645133611614a2a0703
Reviewed-by: BogDan Vatra <bogdan@kde.org>
Diffstat (limited to 'src/plugins/platforms')
-rw-r--r-- | src/plugins/platforms/android/qandroidplatformtheme.cpp | 26 |
1 files changed, 25 insertions, 1 deletions
diff --git a/src/plugins/platforms/android/qandroidplatformtheme.cpp b/src/plugins/platforms/android/qandroidplatformtheme.cpp index 039b19f861..94e58eaeb6 100644 --- a/src/plugins/platforms/android/qandroidplatformtheme.cpp +++ b/src/plugins/platforms/android/qandroidplatformtheme.cpp @@ -47,6 +47,7 @@ #include <QVariant> #include <QFileInfo> #include <QCoreApplication> +#include <private/qguiapplication_p.h> #include <qandroidplatformintegration.h> QAndroidPlatformTheme::QAndroidPlatformTheme(QAndroidPlatformNativeInterface *androidPlatformNativeInterface) @@ -179,7 +180,30 @@ QVariant QAndroidPlatformTheme::themeHint(ThemeHint hint) const return QStringList("android"); } return QStringList("fusion"); - break; + + case MouseDoubleClickDistance: + { + int minimumDistance = qgetenv("QT_ANDROID_MINIMUM_MOUSE_DOUBLE_CLICK_DISTANCE").toInt(); + int ret = minimumDistance; + + QAndroidPlatformIntegration *platformIntegration + = static_cast<QAndroidPlatformIntegration *>(QGuiApplicationPrivate::platformIntegration()); + QAndroidPlatformScreen *platformScreen = platformIntegration->screen(); + if (platformScreen != 0) { + QScreen *screen = platformScreen->screen(); + qreal dotsPerInch = screen->physicalDotsPerInch(); + + // Allow 15% of an inch between clicks when double clicking + int distance = qRound(dotsPerInch * 0.15); + if (distance > minimumDistance) + ret = distance; + } + + if (ret > 0) + return ret; + + // fall through + } default: return QPlatformTheme::themeHint(hint); } |