diff options
author | J-P Nurmi <jpnurmi@theqtcompany.com> | 2016-02-19 16:58:47 +0100 |
---|---|---|
committer | J-P Nurmi <jpnurmi@theqtcompany.com> | 2016-02-22 16:51:58 +0000 |
commit | 1de9e13594b9c4839eff0205312db133cef08676 (patch) | |
tree | 1710c42eddc0a9de8b149d89814f9154adbc1617 /src | |
parent | 581a160a5679ec9fc433a0ff40a294ffe8f86da0 (diff) |
Add Control::focusPolicy
Change-Id: I136aa08d5c1b96f168c4456a2a30b163b2004779
Reviewed-by: Mitch Curtis <mitch.curtis@theqtcompany.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/templates/qquickcontrol.cpp | 53 | ||||
-rw-r--r-- | src/templates/qquickcontrol_p.h | 7 | ||||
-rw-r--r-- | src/templates/qquickcontrol_p_p.h | 1 |
3 files changed, 60 insertions, 1 deletions
diff --git a/src/templates/qquickcontrol.cpp b/src/templates/qquickcontrol.cpp index 6ec9b4a4..6d8485eb 100644 --- a/src/templates/qquickcontrol.cpp +++ b/src/templates/qquickcontrol.cpp @@ -37,6 +37,7 @@ #include "qquickcontrol_p.h" #include "qquickcontrol_p_p.h" +#include <QtGui/qstylehints.h> #include <QtGui/qguiapplication.h> #include "qquicklabel_p.h" #include "qquicklabel_p_p.h" @@ -71,7 +72,8 @@ QT_BEGIN_NAMESPACE QQuickControlPrivate::QQuickControlPrivate() : hasTopPadding(false), hasLeftPadding(false), hasRightPadding(false), hasBottomPadding(false), hasLocale(false), - padding(0), topPadding(0), leftPadding(0), rightPadding(0), bottomPadding(0), spacing(0), focusReason(Qt::OtherFocusReason), + padding(0), topPadding(0), leftPadding(0), rightPadding(0), bottomPadding(0), spacing(0), + focusPolicy(Qt::NoFocus), focusReason(Qt::OtherFocusReason), background(nullptr), contentItem(nullptr), accessibleAttached(nullptr) { #ifndef QT_NO_ACCESSIBILITY @@ -740,6 +742,38 @@ bool QQuickControl::isMirrored() const } /*! + \qmlproperty enumeration Qt.labs.controls::Control::focusPolicy + \readonly + + This property determines the way the control accepts focus. + + \value Qt.TabFocus The control accepts focus by tabbing. + \value Qt.ClickFocus The control accepts focus by clicking. + \value Qt.StrongFocus The control accepts focus by both tabbing and clicking. + \value Qt.WheelFocus The control accepts focus by tabbing, clicking, and using the mouse wheel. + \value Qt.NoFocus The control does not accept focus. +*/ +Qt::FocusPolicy QQuickControl::focusPolicy() const +{ + Q_D(const QQuickControl); + uint policy = d->focusPolicy; + if (activeFocusOnTab()) + policy |= Qt::TabFocus; + return static_cast<Qt::FocusPolicy>(policy); +} + +void QQuickControl::setFocusPolicy(Qt::FocusPolicy policy) +{ + Q_D(QQuickControl); + if (d->focusPolicy == policy) + return; + + d->focusPolicy = policy; + setActiveFocusOnTab(policy & Qt::TabFocus); + emit focusPolicyChanged(); +} + +/*! \qmlproperty enumeration Qt.labs.controls::Control::focusReason \readonly @@ -871,6 +905,10 @@ void QQuickControl::focusOutEvent(QFocusEvent *event) void QQuickControl::mousePressEvent(QMouseEvent *event) { + Q_D(QQuickControl); + if ((d->focusPolicy & Qt::ClickFocus) == Qt::ClickFocus && !QGuiApplication::styleHints()->setFocusOnTouchRelease()) + forceActiveFocus(Qt::MouseFocusReason); + event->accept(); } @@ -881,9 +919,22 @@ void QQuickControl::mouseMoveEvent(QMouseEvent *event) void QQuickControl::mouseReleaseEvent(QMouseEvent *event) { + Q_D(QQuickControl); + if ((d->focusPolicy & Qt::ClickFocus) == Qt::ClickFocus && QGuiApplication::styleHints()->setFocusOnTouchRelease()) + forceActiveFocus(Qt::MouseFocusReason); + event->accept(); } +void QQuickControl::wheelEvent(QWheelEvent *event) +{ + Q_D(QQuickControl); + if ((d->focusPolicy & Qt::WheelFocus) == Qt::WheelFocus) + forceActiveFocus(Qt::MouseFocusReason); + + QQuickItem::wheelEvent(event); +} + void QQuickControl::geometryChanged(const QRectF &newGeometry, const QRectF &oldGeometry) { Q_D(QQuickControl); diff --git a/src/templates/qquickcontrol_p.h b/src/templates/qquickcontrol_p.h index c658ff74..9f5559af 100644 --- a/src/templates/qquickcontrol_p.h +++ b/src/templates/qquickcontrol_p.h @@ -70,6 +70,7 @@ class Q_LABSTEMPLATES_EXPORT QQuickControl : public QQuickItem Q_PROPERTY(qreal spacing READ spacing WRITE setSpacing RESET resetSpacing NOTIFY spacingChanged FINAL) Q_PROPERTY(QLocale locale READ locale WRITE setLocale RESET resetLocale NOTIFY localeChanged FINAL) Q_PROPERTY(bool mirrored READ isMirrored NOTIFY mirroredChanged FINAL) + Q_PROPERTY(Qt::FocusPolicy focusPolicy READ focusPolicy WRITE setFocusPolicy NOTIFY focusPolicyChanged FINAL) Q_PROPERTY(Qt::FocusReason focusReason READ focusReason WRITE setFocusReason NOTIFY focusReasonChanged FINAL) Q_PROPERTY(QQuickItem *background READ background WRITE setBackground NOTIFY backgroundChanged FINAL) Q_PROPERTY(QQuickItem *contentItem READ contentItem WRITE setContentItem NOTIFY contentItemChanged FINAL) @@ -114,6 +115,9 @@ public: bool isMirrored() const; + Qt::FocusPolicy focusPolicy() const; + void setFocusPolicy(Qt::FocusPolicy policy); + Qt::FocusReason focusReason() const; void setFocusReason(Qt::FocusReason reason); @@ -135,6 +139,7 @@ Q_SIGNALS: void spacingChanged(); void localeChanged(); void mirroredChanged(); + void focusPolicyChanged(); void focusReasonChanged(); void backgroundChanged(); void contentItemChanged(); @@ -154,6 +159,8 @@ protected: void mousePressEvent(QMouseEvent *event) override; void mouseMoveEvent(QMouseEvent *event) override; void mouseReleaseEvent(QMouseEvent *event) override; + void wheelEvent(QWheelEvent *event) override; + void geometryChanged(const QRectF &newGeometry, const QRectF &oldGeometry) override; virtual void mirrorChange(); diff --git a/src/templates/qquickcontrol_p_p.h b/src/templates/qquickcontrol_p_p.h index e32af257..1b1c969a 100644 --- a/src/templates/qquickcontrol_p_p.h +++ b/src/templates/qquickcontrol_p_p.h @@ -119,6 +119,7 @@ public: qreal bottomPadding; qreal spacing; QLocale locale; + Qt::FocusPolicy focusPolicy; Qt::FocusReason focusReason; QQuickItem *background; QQuickItem *contentItem; |