File indexing completed on 2024-05-26 05:38:27
0001 /* 0002 SPDX-FileCopyrightText: 2019 Marco Martin <mart@kde.org> 0003 0004 SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 #include "systemmonitor.h" 0008 0009 #include <QDebug> 0010 #include <QQuickItem> 0011 #include <QQuickWindow> 0012 #include <QStandardPaths> 0013 #include <QWindow> 0014 0015 #include <sensors/SensorQuery.h> 0016 0017 #include <KConfigLoader> 0018 #include <KIO/ApplicationLauncherJob> 0019 #include <KLocalizedString> 0020 #include <KNotificationJobUiDelegate> 0021 #include <KService> 0022 #include <PlasmaQuick/SharedQmlEngine> 0023 0024 SystemMonitor::SystemMonitor(QObject *parent, const KPluginMetaData &data, const QVariantList &args) 0025 : Plasma::Applet(parent, data, args) 0026 { 0027 setHasConfigurationInterface(true); 0028 } 0029 0030 SystemMonitor::~SystemMonitor() = default; 0031 0032 void SystemMonitor::init() 0033 { 0034 configChanged(); 0035 0036 // FIXME HACK: better way to get the engine At least AppletQuickItem should have an engine() getter 0037 auto qmlObject = new PlasmaQuick::SharedQmlEngine(); 0038 KConfigGroup cg = config(); 0039 m_sensorFaceController = new KSysGuard::SensorFaceController(cg, qmlObject->engine().get()); 0040 qmlObject->deleteLater(); 0041 0042 // NOTE: taking the pluginId from the child applet (cpu monitor, memory, whatever) is done implicitly by not embedding metadata in this applet 0043 const QString preset = config().readEntry("CurrentPreset", pluginMetaData().pluginId()); 0044 // We have initialized our preset, subsequent calls should use the root-plugin id 0045 config().writeEntry("CurrentPreset", "org.kde.plasma.systemmonitor"); 0046 m_sensorFaceController->loadPreset(preset); 0047 } 0048 0049 KSysGuard::SensorFaceController *SystemMonitor::faceController() const 0050 { 0051 return m_sensorFaceController; 0052 } 0053 0054 KSysGuard::SensorFaceController *SystemMonitor::workaroundController(QQuickItem *context) const 0055 { 0056 KConfigGroup cg = config(); 0057 return new KSysGuard::SensorFaceController(cg, qmlEngine(context)); 0058 } 0059 0060 void SystemMonitor::configChanged() 0061 { 0062 if (m_sensorFaceController) { 0063 m_sensorFaceController->reloadConfig(); 0064 } 0065 } 0066 0067 void SystemMonitor::openSystemMonitor() 0068 { 0069 auto job = new KIO::ApplicationLauncherJob(KService::serviceByDesktopName("org.kde.plasma-systemmonitor")); 0070 job->setUiDelegate(new KNotificationJobUiDelegate(KJobUiDelegate::AutoHandlingEnabled)); 0071 job->start(); 0072 } 0073 0074 K_PLUGIN_CLASS(SystemMonitor) 0075 0076 #include "systemmonitor.moc"