diff options
author | J-P Nurmi <jpnurmi@qt.io> | 2017-12-15 11:44:26 +0100 |
---|---|---|
committer | J-P Nurmi <jpnurmi@qt.io> | 2017-12-15 11:44:26 +0100 |
commit | 1fcec5bf1e208a4f32ef4f3afa54684358a11a1d (patch) | |
tree | febc62851b20cfc485f875e3a6303ac2791b1119 /src/quicktemplates2/qquickspinbox.cpp | |
parent | 6767d789b3544c6ff7717250e1c0dee02ad91fd4 (diff) | |
parent | 6b89293b99e763589181fd1f75470712f52cee3c (diff) |
Merge remote-tracking branch 'origin/5.9' into 5.10
Conflicts:
.qmake.conf
examples/quickcontrols2/quickcontrols2.pro
src/imports/controls/ComboBox.qml
src/quicktemplates2/qquickabstractbutton.cpp
src/quicktemplates2/qquickabstractbutton_p.h
src/quicktemplates2/qquickapplicationwindow_p.h
src/quicktemplates2/qquickcombobox.cpp
src/quicktemplates2/qquickcontainer.cpp
src/quicktemplates2/qquickcontrol.cpp
src/quicktemplates2/qquickcontrol_p.h
src/quicktemplates2/qquickcontrol_p_p.h
src/quicktemplates2/qquicklabel_p.h
src/quicktemplates2/qquicklabel_p_p.h
src/quicktemplates2/qquickslider_p.h
src/quicktemplates2/qquickspinbox.cpp
src/quicktemplates2/qquicktextarea_p.h
src/quicktemplates2/qquicktextarea_p_p.h
src/quicktemplates2/qquicktextfield_p.h
src/quicktemplates2/qquicktextfield_p_p.h
tests/auto/auto.pro
tests/auto/controls/data/tst_combobox.qml
Change-Id: I34cdd5a9794e34e0f38f70353f2a2d04dfc11074
Diffstat (limited to 'src/quicktemplates2/qquickspinbox.cpp')
-rw-r--r-- | src/quicktemplates2/qquickspinbox.cpp | 74 |
1 files changed, 59 insertions, 15 deletions
diff --git a/src/quicktemplates2/qquickspinbox.cpp b/src/quicktemplates2/qquickspinbox.cpp index ef1c9d97..27dd0d5e 100644 --- a/src/quicktemplates2/qquickspinbox.cpp +++ b/src/quicktemplates2/qquickspinbox.cpp @@ -36,6 +36,7 @@ #include "qquickspinbox_p.h" #include "qquickcontrol_p_p.h" +#include "qquickdeferredexecute_p_p.h" #include <QtGui/qguiapplication.h> #include <QtGui/qstylehints.h> @@ -162,6 +163,30 @@ public: Qt::InputMethodHints inputMethodHints; }; +class QQuickSpinButtonPrivate : public QObjectPrivate +{ + Q_DECLARE_PUBLIC(QQuickSpinButton) + +public: + QQuickSpinButtonPrivate() + : pressed(false), + hovered(false), + indicator(nullptr) + { + } + + static QQuickSpinButtonPrivate *get(QQuickSpinButton *button) + { + return button->d_func(); + } + + void executeIndicator(bool complete = false); + + bool pressed; + bool hovered; + QQuickDeferredPointer<QQuickItem> indicator; +}; + int QQuickSpinBoxPrivate::boundValue(int value, bool wrap) const { bool inverted = from > to; @@ -880,9 +905,24 @@ void QQuickSpinBox::wheelEvent(QWheelEvent *event) } #endif +void QQuickSpinBox::classBegin() +{ + Q_D(QQuickSpinBox); + QQuickControl::classBegin(); + + QQmlContext *context = qmlContext(this); + if (context) { + QQmlEngine::setContextForObject(d->up, context); + QQmlEngine::setContextForObject(d->down, context); + } +} + void QQuickSpinBox::componentComplete() { Q_D(QQuickSpinBox); + QQuickSpinButtonPrivate::get(d->up)->executeIndicator(true); + QQuickSpinButtonPrivate::get(d->down)->executeIndicator(true); + QQuickControl::componentComplete(); if (!d->setValue(d->value, /* allowWrap = */ false, /* modified = */ false)) { d->updateUpEnabled(); @@ -906,6 +946,8 @@ void QQuickSpinBox::contentItemChange(QQuickItem *newItem, QQuickItem *oldItem) if (newItem) { newItem->setActiveFocusOnTab(true); + if (d->activeFocus) + newItem->forceActiveFocus(d->focusReason); #if QT_CONFIG(cursor) if (d->editable) newItem->setCursor(Qt::IBeamCursor); @@ -942,20 +984,19 @@ void QQuickSpinBox::accessibilityActiveChanged(bool active) } #endif -class QQuickSpinButtonPrivate : public QObjectPrivate +static inline QString indicatorName() { return QStringLiteral("indicator"); } + +void QQuickSpinButtonPrivate::executeIndicator(bool complete) { -public: - QQuickSpinButtonPrivate() - : pressed(false), - hovered(false), - indicator(nullptr) - { - } + Q_Q(QQuickSpinButton); + if (indicator.wasExecuted()) + return; - bool pressed; - bool hovered; - QQuickItem *indicator; -}; + if (!indicator) + quickBeginDeferred(q, indicatorName(), indicator); + if (complete) + quickCompleteDeferred(q, indicatorName(), indicator); +} QQuickSpinButton::QQuickSpinButton(QQuickSpinBox *parent) : QObject(*(new QQuickSpinButtonPrivate), parent) @@ -980,7 +1021,9 @@ void QQuickSpinButton::setPressed(bool pressed) QQuickItem *QQuickSpinButton::indicator() const { - Q_D(const QQuickSpinButton); + QQuickSpinButtonPrivate *d = const_cast<QQuickSpinButtonPrivate *>(d_func()); + if (!d->indicator) + d->executeIndicator(); return d->indicator; } @@ -990,14 +1033,15 @@ void QQuickSpinButton::setIndicator(QQuickItem *indicator) if (d->indicator == indicator) return; - QQuickControlPrivate::destroyDelegate(d->indicator, d->parent); + delete d->indicator; d->indicator = indicator; if (indicator) { if (!indicator->parentItem()) indicator->setParentItem(static_cast<QQuickItem *>(parent())); } - emit indicatorChanged(); + if (!d->indicator.isExecuting()) + emit indicatorChanged(); } bool QQuickSpinButton::isHovered() const |