aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/quicktemplates2/qquickaction.cpp36
-rw-r--r--src/quicktemplates2/qquickaction_p.h3
-rw-r--r--src/quicktemplates2/qquickaction_p_p.h3
-rw-r--r--tests/auto/controls/data/tst_action.qml9
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 {