diff --git a/popupapplet.cpp b/popupapplet.cpp index fdd54a7fd..3cb8f9949 100644 --- a/popupapplet.cpp +++ b/popupapplet.cpp @@ -803,10 +803,26 @@ void PopupAppletPrivate::dialogSizeChanged() } } -void PopupAppletPrivate::dialogStatusChanged(bool status) +void PopupAppletPrivate::dialogStatusChanged(bool shown) { - q->setStatus(status ? NeedsAttentionStatus : PassiveStatus); - q->popupEvent(status); + if (shown) { + preShowStatus = q->status(); + q->setStatus(NeedsAttentionStatus); + QObject::connect(q, SIGNAL(newStatus(Plasma::ItemStatus)), + q, SLOT(statusChangeWhileShown(Plasma::ItemStatus)), + Qt::UniqueConnection); + } else { + QObject::disconnect(q, SIGNAL(newStatus(Plasma::ItemStatus)), + q, SLOT(statusChangeWhileShown(Plasma::ItemStatus))); + q->setStatus(preShowStatus); + } + + q->popupEvent(shown); +} + +void PopupAppletPrivate::statusChangeWhileShown(Plasma::ItemStatus status) +{ + preShowStatus = status; } void PopupAppletPrivate::restoreDialogSize() diff --git a/popupapplet.h b/popupapplet.h index 9dbba38ec..cc806251b 100644 --- a/popupapplet.h +++ b/popupapplet.h @@ -230,6 +230,7 @@ private: Q_PRIVATE_SLOT(d, void updateDialogPosition()) Q_PRIVATE_SLOT(d, void appletActivated()) Q_PRIVATE_SLOT(d, void iconSizeChanged(int)) + Q_PRIVATE_SLOT(d, void statusChangeWhileShown(Plasma::ItemStatus status)) friend class Applet; friend class AppletPrivate; diff --git a/private/popupapplet_p.h b/private/popupapplet_p.h index 023b90b9a..63253d61d 100644 --- a/private/popupapplet_p.h +++ b/private/popupapplet_p.h @@ -46,6 +46,8 @@ public: void checkExtenderAppearance(Plasma::FormFactor f); KConfigGroup popupConfigGroup(); void appletActivated(); + void statusChangeWhileShown(Plasma::ItemStatus status); + PopupApplet *q; Plasma::IconWidget *icon; @@ -59,6 +61,7 @@ public: QTimer *autohideTimer; QBasicTimer delayedShowTimer; QPoint clicked; + ItemStatus preShowStatus; bool popupLostFocus : 1; bool passive : 1; };