diff --git a/src/plasmaquick/appletquickitem.cpp b/src/plasmaquick/appletquickitem.cpp index ce2b82adc..e2fd40ece 100644 --- a/src/plasmaquick/appletquickitem.cpp +++ b/src/plasmaquick/appletquickitem.cpp @@ -48,7 +48,8 @@ AppletQuickItemPrivate::AppletQuickItemPrivate(Plasma::Applet *a, AppletQuickIte switchWidth(-1), switchHeight(-1), applet(a), - expanded(false) + expanded(false), + activationTogglesExpanded(false) { } @@ -727,6 +728,20 @@ void AppletQuickItem::setExpanded(bool expanded) emit expandedChanged(expanded); } +bool AppletQuickItem::isActivationTogglesExpanded() const +{ + return d->activationTogglesExpanded; +} + +void AppletQuickItem::setActivationTogglesExpanded(bool activationTogglesExpanded) +{ + if (d->activationTogglesExpanded == activationTogglesExpanded) { + return; + } + d->activationTogglesExpanded = activationTogglesExpanded; + emit activationTogglesExpandedChanged(activationTogglesExpanded); +} + ////////////Internals KDeclarative::QmlObject *AppletQuickItem::qmlObject() diff --git a/src/plasmaquick/appletquickitem.h b/src/plasmaquick/appletquickitem.h index 943e227c0..7df364daf 100644 --- a/src/plasmaquick/appletquickitem.h +++ b/src/plasmaquick/appletquickitem.h @@ -80,6 +80,12 @@ class PLASMAQUICK_EXPORT AppletQuickItem : public QQuickItem */ Q_PROPERTY(bool expanded WRITE setExpanded READ isExpanded NOTIFY expandedChanged) + /** + * True when the applet wants the activation signal act in toggle mode, i.e. while being expanded + * the signal shrinks the applet to its not exanded state instead of reexpanding it. + */ + Q_PROPERTY(bool activationTogglesExpanded WRITE setActivationTogglesExpanded READ isActivationTogglesExpanded NOTIFY activationTogglesExpandedChanged) + /** * the applet root QML item: sometimes is the same as fullRepresentationItem * if a fullrepresentation was not declared explicitly @@ -126,6 +132,9 @@ public: bool isExpanded() const; void setExpanded(bool expanded); + bool isActivationTogglesExpanded() const; + void setActivationTogglesExpanded(bool activationTogglesExpanded); + ////NEEDED BY QML TO CREATE ATTACHED PROPERTIES static AppletQuickItem *qmlAttachedProperties(QObject *object); @@ -135,6 +144,7 @@ Q_SIGNALS: void switchHeightChanged(int height); void expandedChanged(bool expanded); + void activationTogglesExpandedChanged(bool activationTogglesExpanded); void compactRepresentationChanged(QQmlComponent *compactRepresentation); void fullRepresentationChanged(QQmlComponent *fullRepresentation); diff --git a/src/plasmaquick/private/appletquickitem_p.h b/src/plasmaquick/private/appletquickitem_p.h index 143693576..ffd2bf269 100644 --- a/src/plasmaquick/private/appletquickitem_p.h +++ b/src/plasmaquick/private/appletquickitem_p.h @@ -104,6 +104,7 @@ public: Plasma::Package containmentPackage; bool expanded : 1; + bool activationTogglesExpanded : 1; static QHash s_rootObjects; }; diff --git a/src/scriptengines/qml/plasmoid/appletinterface.cpp b/src/scriptengines/qml/plasmoid/appletinterface.cpp index 1cd693441..f24bc5152 100644 --- a/src/scriptengines/qml/plasmoid/appletinterface.cpp +++ b/src/scriptengines/qml/plasmoid/appletinterface.cpp @@ -142,11 +142,16 @@ void AppletInterface::init() emit busyChanged(); applet()->updateConstraints(Plasma::Types::UiReadyConstraint); + connect(applet(), &Plasma::Applet::activated, [ = ]() { - setExpanded(true); + // in case the applet doesn't want to get shrinked on reactivation, + // we always expand it again (only in order to conform with legacy behaviour) + bool activate = !( isExpanded() && isActivationTogglesExpanded() ); + + setExpanded(activate); if (QQuickItem *i = qobject_cast(fullRepresentationItem())) { - i->setFocus(true, Qt::ShortcutFocusReason); + i->setFocus(activate, Qt::ShortcutFocusReason); } });