Allow the platform to specify a press and hold delay.

Press and hold is an interaction available on many platforms,
particularly when touch is involved. In Qt Quick this is exposed to the
user via MouseArea::onPressAndHold. This value should not be hard-coded,
but rather use a platform-specified default. This commit adds the
low-level hooks necessary for that to happen.

Task-number: QTBUG-24793
Change-Id: I621a8ac9de66b881e34336228056bffbb6306a70
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@digia.com>
Reviewed-by: Paul Olav Tvete <paul.tvete@digia.com>
This commit is contained in:
Michael Brasser 2013-11-26 14:47:56 -06:00 committed by The Qt Project
parent 438a52e1a0
commit 16a26931d4
7 changed files with 27 additions and 3 deletions

View File

@ -359,6 +359,8 @@ QVariant QPlatformIntegration::styleHint(StyleHint hint) const
return true;
case SetFocusOnTouchRelease:
return QVariant(false);
case MousePressAndHoldInterval:
return QPlatformTheme::defaultThemeHint(QPlatformTheme::MousePressAndHoldInterval);
}
return 0;

View File

@ -148,7 +148,8 @@ public:
SynthesizeMouseFromTouchEvents,
PasswordMaskCharacter,
SetFocusOnTouchRelease,
ShowIsMaximized
ShowIsMaximized,
MousePressAndHoldInterval
};
virtual QVariant styleHint(StyleHint hint) const;

View File

@ -79,6 +79,9 @@ QT_BEGIN_NAMESPACE
\value MouseDoubleClickInterval (int) Mouse double click interval in ms,
overriding QPlatformIntegration::styleHint.
\value MousePressAndHoldInterval (int) Mouse press and hold interval in ms,
overriding QPlatformIntegration::styleHint.
\value StartDragDistance (int) Start drag distance,
overriding QPlatformIntegration::styleHint.
@ -423,6 +426,8 @@ QVariant QPlatformTheme::themeHint(ThemeHint hint) const
return QGuiApplicationPrivate::platformIntegration()->styleHint(QPlatformIntegration::PasswordMaskDelay);
case QPlatformTheme::PasswordMaskCharacter:
return QGuiApplicationPrivate::platformIntegration()->styleHint(QPlatformIntegration::PasswordMaskCharacter);
case QPlatformTheme::MousePressAndHoldInterval:
return QGuiApplicationPrivate::platformIntegration()->styleHint(QPlatformIntegration::MousePressAndHoldInterval);
default:
return QPlatformTheme::defaultThemeHint(hint);
}
@ -488,6 +493,8 @@ QVariant QPlatformTheme::defaultThemeHint(ThemeHint hint)
return QVariant::fromValue(QList<int>());
case DialogSnapToDefaultButton:
return QVariant(false);
case MousePressAndHoldInterval:
return QVariant(800);
}
return QVariant();
}

View File

@ -106,7 +106,8 @@ public:
TabAllWidgets,
IconPixmapSizes,
PasswordMaskCharacter,
DialogSnapToDefaultButton
DialogSnapToDefaultButton,
MousePressAndHoldInterval
};
enum DialogType {

View File

@ -127,6 +127,17 @@ int QStyleHints::mouseDoubleClickInterval() const
themeableHint(QPlatformTheme::MouseDoubleClickInterval, QPlatformIntegration::MouseDoubleClickInterval).toInt();
}
/*!
Returns the time limit in milliseconds that activates
a press and hold.
\since 5.3
*/
int QStyleHints::mousePressAndHoldInterval() const
{
return themeableHint(QPlatformTheme::MousePressAndHoldInterval, QPlatformIntegration::MousePressAndHoldInterval).toInt();
}
/*!
Sets the \a startDragDistance.
\internal

View File

@ -57,6 +57,7 @@ class Q_GUI_EXPORT QStyleHints : public QObject
public:
void setMouseDoubleClickInterval(int mouseDoubleClickInterval);
int mouseDoubleClickInterval() const;
int mousePressAndHoldInterval() const;
void setStartDragDistance(int startDragDistance);
int startDragDistance() const;
void setStartDragTime(int startDragTime);

View File

@ -180,7 +180,8 @@ int main(int argc, char **argv)
<< " startDragVelocity=" << styleHints->startDragVelocity() << " keyboardInputInterval=" << styleHints->keyboardInputInterval()
<< " keyboardAutoRepeatRate=" << styleHints->keyboardAutoRepeatRate() << " cursorFlashTime=" << styleHints->cursorFlashTime()
<< " showIsFullScreen=" << styleHints->showIsFullScreen() << " passwordMaskDelay=" << styleHints->passwordMaskDelay()
<< " fontSmoothingGamma=" << styleHints->fontSmoothingGamma() << " useRtlExtensions=" << styleHints->useRtlExtensions() << '\n';
<< " fontSmoothingGamma=" << styleHints->fontSmoothingGamma() << " useRtlExtensions=" << styleHints->useRtlExtensions()
<< " mousePressAndHoldInterval=" << styleHints->mousePressAndHoldInterval() << '\n';
const QPlatformTheme *platformTheme = QGuiApplicationPrivate::platformTheme();
std::cout << "\nTheme:\n Styles: " << platformTheme->themeHint(QPlatformTheme::StyleNames).toStringList();