diff --git a/applets/icon/CMakeLists.txt b/applets/icon/CMakeLists.txt --- a/applets/icon/CMakeLists.txt +++ b/applets/icon/CMakeLists.txt @@ -13,6 +13,7 @@ KF5::KIOCore # for OpenFileManagerWindowJob KF5::KIOGui # for FavIconRequestJob KF5::KIOWidgets # for KRun + KF5::WindowSystem # for KStartupInfo KF5::Plasma) install(TARGETS plasma_applet_icon DESTINATION ${KDE_INSTALL_PLUGINDIR}/plasma/applets) diff --git a/applets/icon/iconapplet.h b/applets/icon/iconapplet.h --- a/applets/icon/iconapplet.h +++ b/applets/icon/iconapplet.h @@ -28,6 +28,8 @@ #include class KFileItemActions; +class KStartupInfo; + class QMenu; class IconApplet : public Plasma::Applet @@ -100,4 +102,6 @@ QPointer m_configDialog; + KStartupInfo *m_startupInfo = nullptr; + }; diff --git a/applets/icon/iconapplet.cpp b/applets/icon/iconapplet.cpp --- a/applets/icon/iconapplet.cpp +++ b/applets/icon/iconapplet.cpp @@ -42,6 +42,7 @@ #include #include #include +#include #include #include @@ -393,6 +394,22 @@ void IconApplet::run() { + if (!m_startupInfo) { + m_startupInfo = new KStartupInfo(KStartupInfo::CleanOnCantDetect, this); + connect(m_startupInfo, &KStartupInfo::gotNewStartup, this, [this](const KStartupInfoId &id, const KStartupInfoData &data) { + Q_UNUSED(id); + if (data.applicationId() == m_localPath) { + setBusy(true); + } + }); + connect(m_startupInfo, &KStartupInfo::gotRemoveStartup, this, [this](const KStartupInfoId &id, const KStartupInfoData &data) { + Q_UNUSED(id); + if (data.applicationId() == m_localPath) { + setBusy(false); + } + }); + } + new KRun(QUrl::fromLocalFile(m_localPath), QApplication::desktop()); }