diff options
-rw-r--r-- | src/quicktemplates2/qquickaction.cpp | 36 | ||||
-rw-r--r-- | src/quicktemplates2/qquickaction_p.h | 3 | ||||
-rw-r--r-- | src/quicktemplates2/qquickaction_p_p.h | 3 | ||||
-rw-r--r-- | tests/auto/controls/data/tst_action.qml | 9 |
4 files changed, 38 insertions, 13 deletions
diff --git a/src/quicktemplates2/qquickaction.cpp b/src/quicktemplates2/qquickaction.cpp index cdc7336e..06035455 100644 --- a/src/quicktemplates2/qquickaction.cpp +++ b/src/quicktemplates2/qquickaction.cpp @@ -171,7 +171,8 @@ void QQuickActionPrivate::ShortcutEntry::setEnabled(bool enabled) } QQuickActionPrivate::QQuickActionPrivate() - : enabled(true), + : explicitEnabled(false), + enabled(true), checked(false), checkable(false), icon(nullptr), @@ -204,6 +205,21 @@ void QQuickActionPrivate::setShortcut(const QVariant &var) emit q->shortcutChanged(keySequence); } +void QQuickActionPrivate::setEnabled(bool enable) +{ + Q_Q(QQuickAction); + if (enabled == enable) + return; + + enabled = enable; + + defaultShortcutEntry->setEnabled(enable); + for (QQuickActionPrivate::ShortcutEntry *entry : qAsConst(shortcutEntries)) + entry->setEnabled(enable); + + emit q->enabledChanged(enable); +} + bool QQuickActionPrivate::watchItem(QQuickItem *item) { Q_Q(QQuickAction); @@ -381,16 +397,18 @@ bool QQuickAction::isEnabled() const void QQuickAction::setEnabled(bool enabled) { Q_D(QQuickAction); - if (d->enabled == enabled) - return; - - d->enabled = enabled; + d->explicitEnabled = true; + d->setEnabled(enabled); +} - d->defaultShortcutEntry->setEnabled(enabled); - for (QQuickActionPrivate::ShortcutEntry *entry : qAsConst(d->shortcutEntries)) - entry->setEnabled(enabled); +void QQuickAction::resetEnabled() +{ + Q_D(QQuickAction); + if (!d->explicitEnabled) + return; - emit enabledChanged(enabled); + d->explicitEnabled = false; + d->setEnabled(true); } /*! diff --git a/src/quicktemplates2/qquickaction_p.h b/src/quicktemplates2/qquickaction_p.h index 3f16b4e7..d47b847e 100644 --- a/src/quicktemplates2/qquickaction_p.h +++ b/src/quicktemplates2/qquickaction_p.h @@ -63,7 +63,7 @@ class Q_QUICKTEMPLATES2_PRIVATE_EXPORT QQuickAction : public QObject Q_OBJECT Q_PROPERTY(QString text READ text WRITE setText NOTIFY textChanged FINAL) Q_PROPERTY(QQuickIcon *icon READ icon CONSTANT FINAL) - Q_PROPERTY(bool enabled READ isEnabled WRITE setEnabled NOTIFY enabledChanged FINAL) + Q_PROPERTY(bool enabled READ isEnabled WRITE setEnabled NOTIFY enabledChanged RESET resetEnabled FINAL) Q_PROPERTY(bool checked READ isChecked WRITE setChecked NOTIFY checkedChanged FINAL) Q_PROPERTY(bool checkable READ isCheckable WRITE setCheckable NOTIFY checkableChanged FINAL) Q_PRIVATE_PROPERTY(QQuickAction::d_func(), QVariant shortcut READ shortcut WRITE setShortcut NOTIFY shortcutChanged FINAL) @@ -79,6 +79,7 @@ public: bool isEnabled() const; void setEnabled(bool enabled); + void resetEnabled(); bool isChecked() const; void setChecked(bool checked); diff --git a/src/quicktemplates2/qquickaction_p_p.h b/src/quicktemplates2/qquickaction_p_p.h index 4e1c89c2..754de3d5 100644 --- a/src/quicktemplates2/qquickaction_p_p.h +++ b/src/quicktemplates2/qquickaction_p_p.h @@ -74,6 +74,8 @@ public: QVariant shortcut() const; void setShortcut(const QVariant &shortcut); + void setEnabled(bool enable); + bool watchItem(QQuickItem *item); bool unwatchItem(QQuickItem *item); @@ -107,6 +109,7 @@ public: ShortcutEntry *findShortcutEntry(QObject *target) const; void updateDefaultShortcutEntry(); + bool explicitEnabled; bool enabled; bool checked; bool checkable; diff --git a/tests/auto/controls/data/tst_action.qml b/tests/auto/controls/data/tst_action.qml index 192d89b1..7d057c26 100644 --- a/tests/auto/controls/data/tst_action.qml +++ b/tests/auto/controls/data/tst_action.qml @@ -78,13 +78,16 @@ TestCase { var spy = createTemporaryObject(signalSpy, testCase, {target: action, signalName: "triggered"}) verify(spy.valid) - action.enabled = false action.trigger() - compare(spy.count, 0) + compare(spy.count, 1) - action.enabled = true + action.enabled = false action.trigger() compare(spy.count, 1) + + action.enabled = undefined // reset + action.trigger() + compare(spy.count, 2) } Component { |