aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJ-P Nurmi <jpnurmi@theqtcompany.com>2016-02-19 16:58:47 +0100
committerJ-P Nurmi <jpnurmi@theqtcompany.com>2016-02-22 16:51:58 +0000
commit1de9e13594b9c4839eff0205312db133cef08676 (patch)
tree1710c42eddc0a9de8b149d89814f9154adbc1617 /src
parent581a160a5679ec9fc433a0ff40a294ffe8f86da0 (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.cpp53
-rw-r--r--src/templates/qquickcontrol_p.h7
-rw-r--r--src/templates/qquickcontrol_p_p.h1
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;