File indexing completed on 2024-05-05 05:37:14
0001 /* 0002 * SPDX-FileCopyrightText: 2019 Arjen Hiemstra <ahiemstra@heimr.nl> 0003 * 0004 * SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL 0005 */ 0006 0007 #include <QApplication> 0008 #include <QCommandLineParser> 0009 #include <QDBusConnection> 0010 #include <QDBusConnectionInterface> 0011 #include <QQmlApplicationEngine> 0012 #include <QQmlContext> 0013 #include <QSessionManager> 0014 #include <QSurfaceFormat> 0015 #include <QWindow> 0016 0017 #include <KAboutData> 0018 #include <KDBusService> 0019 #include <KLocalizedString> 0020 #include <KWindowSystem> 0021 0022 #include "CommandLineArguments.h" 0023 #include "Configuration.h" 0024 #include "ToolsModel.h" 0025 0026 class SessionManager : public QObject 0027 { 0028 Q_OBJECT 0029 public: 0030 explicit SessionManager(QObject *parent); 0031 0032 private: 0033 QString m_pageId; 0034 }; 0035 0036 SessionManager::SessionManager(QObject *parent) 0037 : QObject(parent) 0038 { 0039 connect(qApp, &QGuiApplication::saveStateRequest, this, [this](QSessionManager &manager) { 0040 QString lastPageId = Configuration::globalConfig()->lastPage(); 0041 if (lastPageId.isEmpty()) { 0042 return; 0043 } 0044 QStringList args; 0045 args << qApp->applicationName(); 0046 args << QStringLiteral("--page-id") << lastPageId; 0047 args << QStringLiteral("-session") << manager.sessionId(); 0048 manager.setRestartCommand(args); 0049 }); 0050 } 0051 0052 int main(int argc, char **argv) 0053 { 0054 auto format = QSurfaceFormat::defaultFormat(); 0055 format.setOption(QSurfaceFormat::ResetNotification); 0056 QSurfaceFormat::setDefaultFormat(format); 0057 0058 QApplication app(argc, argv); 0059 app.setWindowIcon(QIcon::fromTheme(QStringLiteral("utilities-system-monitor"))); 0060 0061 KLocalizedString::setApplicationDomain(QByteArrayLiteral("plasma-systemmonitor")); 0062 0063 KAboutData aboutData{/* componentName */ QStringLiteral("plasma-systemmonitor"), 0064 /* displayName */ i18n("System Monitor"), 0065 /* version */ PROJECT_VERSION, 0066 /* shortDescription */ i18n("An application for monitoring system resources"), 0067 /* licenseType */ KAboutLicense::GPL, 0068 /* copyrightStatement */ i18n("© 2020 Plasma Development Team"), 0069 /* otherText */ QString{}, 0070 /* homePageAddress */ QString{}}; 0071 aboutData.setDesktopFileName(QStringLiteral("org.kde.plasma-systemmonitor")); 0072 aboutData.setProgramLogo(app.windowIcon()); 0073 0074 aboutData.addAuthor(i18n("Arjen Hiemstra"), i18n("Development"), QStringLiteral("ahiemstra@heimr.nl")); 0075 aboutData.addAuthor(i18n("Uri Herrera"), i18n("Design"), QStringLiteral("uri_herrera@nxos.org")); 0076 aboutData.addAuthor(i18n("Nate Graham"), i18n("Design and Quality Assurance"), QStringLiteral("nate@kde.org")); 0077 aboutData.addAuthor(i18n("David Redondo"), i18n("Development"), QStringLiteral("kde@david-redondo.de")); 0078 aboutData.addAuthor(i18n("Noah Davis"), i18n("Design and Quality Assurance"), QStringLiteral("noahadvs@gmail.com")); 0079 aboutData.addAuthor(i18n("Marco Martin"), i18n("Development"), QStringLiteral("notmart@gmail.com")); 0080 aboutData.addAuthor(i18n("David Edmundson"), i18n("Development"), QStringLiteral("david@davidedmundson.co.uk")); 0081 0082 aboutData.setTranslator(i18ndc(nullptr, "NAME OF TRANSLATORS", "Your names"), i18ndc(nullptr, "EMAIL OF TRANSLATORS", "Your emails")); 0083 0084 aboutData.setBugAddress("https://bugs.kde.org/enter_bug.cgi?product=plasma-systemmonitor"); 0085 KAboutData::setApplicationData(aboutData); 0086 0087 KDBusService service(KDBusService::Unique); 0088 0089 auto parser = std::make_shared<QCommandLineParser>(); 0090 aboutData.setupCommandLine(parser.get()); 0091 parser->addOption({QStringLiteral("page-id"), QStringLiteral("Start with the specified page ID shown"), QStringLiteral("page-id")}); 0092 parser->addOption({QStringLiteral("page-name"), QStringLiteral("Start with the specified page name shown"), QStringLiteral("page-name")}); 0093 parser->process(app); 0094 aboutData.processCommandLine(parser.get()); 0095 CommandLineArguments::setCommandLineParser(parser); 0096 0097 auto sessionManager = new SessionManager(&app); 0098 0099 QQmlApplicationEngine engine; 0100 engine.rootContext()->setContextObject(new KLocalizedContext(&engine)); 0101 if (Configuration::globalConfig()->maximized()) { 0102 engine.setInitialProperties({{"visibility", QWindow::Maximized}}); 0103 } 0104 engine.loadFromModule("org.kde.systemmonitor", "Main"); 0105 0106 QObject::connect(&service, &KDBusService::activateRequested, &engine, []() { 0107 if (!qApp->topLevelWindows().isEmpty()) { 0108 QWindow *win = qApp->topLevelWindows().first(); 0109 KWindowSystem::updateStartupId(win); 0110 KWindowSystem::activateWindow(win); 0111 } 0112 }); 0113 // QDBusConnectionInterface::StartService is blocking so we do it manually 0114 const auto busInterface = QDBusConnection::sessionBus().interface(); 0115 busInterface->asyncCall(QStringLiteral("StartServiceByName"), QStringLiteral("org.kde.ksystemstats"), 0u); 0116 return app.exec(); 0117 } 0118 0119 #include "main.moc"