diff --git a/applets/icon/CMakeLists.txt b/applets/icon/CMakeLists.txt --- a/applets/icon/CMakeLists.txt +++ b/applets/icon/CMakeLists.txt @@ -13,8 +13,8 @@ KF5::KIOCore # for OpenFileManagerWindowJob KF5::KIOGui # for FavIconRequestJob KF5::KIOWidgets # for KRun - KF5::WindowSystem # for KStartupInfo - KF5::Plasma) + KF5::Plasma + PW::LibTaskManager) 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 @@ -32,6 +32,11 @@ class QMenu; +namespace TaskManager +{ +class StartupTasksModel; +} + class IconApplet : public Plasma::Applet { Q_OBJECT @@ -102,6 +107,6 @@ QPointer m_configDialog; - KStartupInfo *m_startupInfo = nullptr; + TaskManager::StartupTasksModel *m_startupTasksModel = nullptr; }; diff --git a/applets/icon/iconapplet.cpp b/applets/icon/iconapplet.cpp --- a/applets/icon/iconapplet.cpp +++ b/applets/icon/iconapplet.cpp @@ -42,13 +42,14 @@ #include #include #include -#include #include #include #include #include +#include + IconApplet::IconApplet(QObject *parent, const QVariantList &data) : Plasma::Applet(parent, data) { @@ -394,25 +395,23 @@ void IconApplet::run() { - if (!m_startupInfo) { - m_startupInfo = new KStartupInfo(KStartupInfo::CleanOnCantDetect, this); - - const KConfig klaunchrc("klaunchrc"); - KConfigGroup c = KConfigGroup(&klaunchrc, "TaskbarButtonSettings"); - m_startupInfo->setTimeout(c.readEntry("Timeout", 5)); - - 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); + if (!m_startupTasksModel) { + m_startupTasksModel = new TaskManager::StartupTasksModel(this); + + auto handleRow = [this](bool busy, const QModelIndex &parent, int first, int last) { + Q_UNUSED(parent); + for (int i = first; i <= last; ++i) { + const QModelIndex idx = m_startupTasksModel->index(i, 0); + if (idx.data(TaskManager::AbstractTasksModel::LauncherUrlWithoutIcon).toUrl() == QUrl::fromLocalFile(m_localPath)) { + setBusy(busy); + break; + } } - }); + }; + + using namespace std::placeholders; + connect(m_startupTasksModel, &QAbstractItemModel::rowsInserted, this, std::bind(handleRow, true /*busy*/, _1, _2, _3)); + connect(m_startupTasksModel, &QAbstractItemModel::rowsAboutToBeRemoved, this, std::bind(handleRow, false /*busy*/, _1, _2, _3)); } new KRun(QUrl::fromLocalFile(m_localPath), QApplication::desktop());