Warning, file /plasma/discover/notifier/NotifierItem.cpp was not indexed or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).
0001 /* 0002 * SPDX-FileCopyrightText: 2014 Aleix Pol Gonzalez <aleixpol@blue-systems.com> 0003 * 0004 * SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL 0005 */ 0006 0007 #include "NotifierItem.h" 0008 #include <KLocalizedString> 0009 #include <QDebug> 0010 #include <QMenu> 0011 0012 KStatusNotifierItem::ItemStatus sniStatus(DiscoverNotifier::State state) 0013 { 0014 switch (state) { 0015 case DiscoverNotifier::Offline: 0016 case DiscoverNotifier::NoUpdates: 0017 return KStatusNotifierItem::Passive; 0018 case DiscoverNotifier::Busy: 0019 case DiscoverNotifier::NormalUpdates: 0020 case DiscoverNotifier::SecurityUpdates: 0021 case DiscoverNotifier::RebootRequired: 0022 return KStatusNotifierItem::Active; 0023 } 0024 return KStatusNotifierItem::Active; 0025 } 0026 0027 NotifierItem::NotifierItem() 0028 { 0029 } 0030 0031 void NotifierItem::setupNotifierItem() 0032 { 0033 Q_ASSERT(!m_item); 0034 m_item = new KStatusNotifierItem(QStringLiteral("org.kde.DiscoverNotifier"), this); 0035 m_item->setTitle(i18n("Updates")); 0036 m_item->setToolTipTitle(i18n("Updates")); 0037 0038 connect(&m_notifier, &DiscoverNotifier::stateChanged, this, &NotifierItem::refresh); 0039 0040 connect(m_item, &KStatusNotifierItem::activateRequested, &m_notifier, [this]() { 0041 if (m_notifier.needsReboot()) { 0042 m_notifier.reboot(); 0043 } else { 0044 m_notifier.showDiscoverUpdates(m_item->providedToken()); 0045 } 0046 }); 0047 0048 QMenu *menu = new QMenu; 0049 connect(m_item, &QObject::destroyed, menu, &QObject::deleteLater); 0050 auto discoverAction = menu->addAction(QIcon::fromTheme(QStringLiteral("plasmadiscover")), i18n("Open Discover…")); 0051 connect(discoverAction, &QAction::triggered, &m_notifier, [this] { 0052 m_notifier.showDiscover(m_item->providedToken()); 0053 }); 0054 0055 auto updatesAction = menu->addAction(QIcon::fromTheme(QStringLiteral("system-software-update")), i18n("See Updates…")); 0056 connect(updatesAction, &QAction::triggered, &m_notifier, [this] { 0057 m_notifier.showDiscoverUpdates(m_item->providedToken()); 0058 }); 0059 0060 auto refreshAction = menu->addAction(QIcon::fromTheme(QStringLiteral("view-refresh")), i18n("Refresh…")); 0061 connect(refreshAction, &QAction::triggered, &m_notifier, &DiscoverNotifier::recheckSystemUpdateNeeded); 0062 0063 auto f = [this]() { 0064 m_item->setTitle(i18n("Restart to apply installed updates")); 0065 m_item->setToolTipTitle(i18n("Click to restart the device")); 0066 m_item->setIconByName(QStringLiteral("view-refresh")); 0067 }; 0068 if (m_notifier.needsReboot()) 0069 f(); 0070 else 0071 connect(&m_notifier, &DiscoverNotifier::needsRebootChanged, menu, f); 0072 0073 connect(&m_notifier, &DiscoverNotifier::newUpgradeAction, menu, [menu](UpgradeAction *a) { 0074 QAction *action = new QAction(a->description(), menu); 0075 connect(action, &QAction::triggered, a, &UpgradeAction::trigger); 0076 menu->addAction(action); 0077 }); 0078 m_item->setContextMenu(menu); 0079 refresh(); 0080 } 0081 0082 void NotifierItem::refresh() 0083 { 0084 Q_ASSERT(m_item); 0085 m_item->setStatus(sniStatus(m_notifier.state())); 0086 m_item->setIconByName(m_notifier.iconName()); 0087 m_item->setToolTipSubTitle(m_notifier.message()); 0088 } 0089 0090 void NotifierItem::setVisible(bool visible) 0091 { 0092 if (visible == m_visible) 0093 return; 0094 m_visible = visible; 0095 0096 if (m_visible) 0097 setupNotifierItem(); 0098 else 0099 delete m_item; 0100 }