diff --git a/plasma-windowed/plasmawindowedcorona.cpp b/plasma-windowed/plasmawindowedcorona.cpp --- a/plasma-windowed/plasmawindowedcorona.cpp +++ b/plasma-windowed/plasmawindowedcorona.cpp @@ -23,7 +23,10 @@ #include "plasmawindowedview.h" #include #include +#include + #include +#include #include #include @@ -58,7 +61,7 @@ PlasmaWindowedView *v = new PlasmaWindowedView(); v->setHasStatusNotifier(m_hasStatusNotifier); v->show(); - +qWarning()<<"AAAAAA"< #include #include +#include #include @@ -66,6 +67,7 @@ } m_appletInterface = applet->property("_plasma_graphicObject").value(); + if (!m_appletInterface) { return; } @@ -109,17 +111,47 @@ Q_ASSERT(!m_statusNotifier); if (m_withStatusNotifier) { - m_statusNotifier = new KStatusNotifierItem(this); + m_statusNotifier = new KStatusNotifierItem(applet->pluginMetaData().pluginId(), this); m_statusNotifier->setIconByName(applet->icon()); m_statusNotifier->setTitle(applet->title()); m_statusNotifier->setToolTipTitle(applet->title()); + m_statusNotifier->setStandardActionsEnabled(false); + + //set up actions + for (auto a : applet->contextualActions()) { + m_statusNotifier->contextMenu()->addAction(a); + } + QAction *closeAction = new QAction(QIcon::fromTheme(QStringLiteral("window-close")), i18n("Close %1", applet->title()), this); + connect(closeAction, &QAction::triggered, this, [this]() { + m_statusNotifier->deleteLater(); + close(); + }); + m_statusNotifier->contextMenu()->addAction(closeAction); connect(m_statusNotifier, &KStatusNotifierItem::activateRequested, this, [this](bool active, const QPoint& /*pos*/){ - setVisible(active); - if (active) { + if (isVisible() && isActive()) { + hide(); + } else { + show(); raise(); } }); + auto syncStatus = [this]() { + switch(m_applet->status()) { + case Plasma::Types::AcceptingInputStatus: + case Plasma::Types::RequiresAttentionStatus: + case Plasma::Types::NeedsAttentionStatus: + m_statusNotifier->setStatus(KStatusNotifierItem::NeedsAttention); + break; + case Plasma::Types::ActiveStatus: + m_statusNotifier->setStatus(KStatusNotifierItem::Active); + break; + default: + m_statusNotifier->setStatus(KStatusNotifierItem::Passive); + } + }; + connect(applet, &Plasma::Applet::statusChanged, this, syncStatus); + syncStatus(); } } @@ -180,6 +212,7 @@ void PlasmaWindowedView::keyPressEvent(QKeyEvent *ev) { if (ev->matches(QKeySequence::Quit)) { + m_statusNotifier->deleteLater(); close(); } QQuickView::keyReleaseEvent(ev);