From e5e969c00c35f43f00309fc03b96e296c935f176 Mon Sep 17 00:00:00 2001 From: Allan Sandfeld Jensen Date: Mon, 17 Feb 2020 16:27:11 +0100 Subject: Prepare QGuiAction::checked property for declarative use Make the order checkable and checked are set in insignificant, by storing ignored checked value for un-checkable actions. Also gives checkable its own changed signal. Change-Id: If03db7c92481a542b6220604860abddb322bb517 Reviewed-by: Friedemann Kleint Reviewed-by: Shawn Rutledge --- src/gui/kernel/qguiaction.cpp | 14 ++++++++++---- src/gui/kernel/qguiaction.h | 5 +++-- 2 files changed, 13 insertions(+), 6 deletions(-) (limited to 'src/gui/kernel') diff --git a/src/gui/kernel/qguiaction.cpp b/src/gui/kernel/qguiaction.cpp index dc5d3808b8..84750194b6 100644 --- a/src/gui/kernel/qguiaction.cpp +++ b/src/gui/kernel/qguiaction.cpp @@ -802,8 +802,12 @@ void QGuiAction::setCheckable(bool b) return; d->checkable = b; - d->checked = false; + QPointer guard(this); d->sendDataChanged(); + if (guard) + emit checkableChanged(b); + if (guard && d->checked) + emit toggled(b); } bool QGuiAction::isCheckable() const @@ -839,11 +843,13 @@ void QGuiAction::toggle() void QGuiAction::setChecked(bool b) { Q_D(QGuiAction); - if (!d->checkable || d->checked == b) + if (d->checked == b) return; - QPointer guard(this); d->checked = b; + if (!d->checkable) + return; + QPointer guard(this); d->sendDataChanged(); if (guard) emit toggled(b); @@ -852,7 +858,7 @@ void QGuiAction::setChecked(bool b) bool QGuiAction::isChecked() const { Q_D(const QGuiAction); - return d->checked; + return d->checked && d->checkable; } /*! diff --git a/src/gui/kernel/qguiaction.h b/src/gui/kernel/qguiaction.h index f717821120..1306c3cf94 100644 --- a/src/gui/kernel/qguiaction.h +++ b/src/gui/kernel/qguiaction.h @@ -61,7 +61,7 @@ class Q_GUI_EXPORT QGuiAction : public QObject Q_OBJECT Q_DECLARE_PRIVATE(QGuiAction) - Q_PROPERTY(bool checkable READ isCheckable WRITE setCheckable NOTIFY changed) + Q_PROPERTY(bool checkable READ isCheckable WRITE setCheckable NOTIFY checkableChanged FINAL) Q_PROPERTY(bool checked READ isChecked WRITE setChecked NOTIFY toggled) Q_PROPERTY(bool enabled READ isEnabled WRITE setEnabled NOTIFY enabledChanged RESET resetEnabled FINAL) Q_PROPERTY(QIcon icon READ icon WRITE setIcon NOTIFY changed) @@ -181,7 +181,8 @@ public Q_SLOTS: Q_SIGNALS: void changed(); - void enabledChanged(bool changed); + void enabledChanged(bool enabled); + void checkableChanged(bool checkable); void triggered(bool checked = false); void hovered(); void toggled(bool); -- cgit v1.2.3