Sfoglia il codice sorgente

Made Fancontrol-GUI a unique app.

Malte Veerman 6 anni fa
parent
commit
1f83c50bbb

+ 2 - 2
README.md

@@ -15,10 +15,10 @@ The KCM is only build, if the -DNO_SYSTEMD option is unset or set to false.
 
 # Requirements
 * Qt5: Base/Core, Widgets, GUI, QML, Quick
-* KF5: I18n, Auth, Config, Package, Declarative, CoreAddons, KCMUtils, Extra-Cmake-Modules, Kirigami2, Notifications
+* KF5: I18n, Auth, Config, Package, Declarative, CoreAddons, DBusAddons, KCMUtils, Extra-Cmake-Modules, Kirigami2, Notifications
 
 ## Debian/Ubuntu command to install the build requirements:
-`sudo apt-get install libkf5config-dev libkf5auth-dev libkf5package-dev libkf5declarative-dev libkf5coreaddons-dev libkf5kcmutils-dev libkf5i18n-dev libqt5core5a libqt5widgets5 libqt5gui5 libqt5qml5 extra-cmake-modules qtbase5-dev kirigami2-dev libkf5kirigami2-5 libkf5notifications-dev qml-module-org-kde-kirigami2 qml-module-qtquick-dialogs qml-module-qtquick-controls cmake build-essential`
+`sudo apt-get install libkf5config-dev libkf5auth-dev libkf5package-dev libkf5declarative-dev libkf5coreaddons-dev libkf5dbusaddons-dev libkf5kcmutils-dev libkf5i18n-dev libqt5core5a libqt5widgets5 libqt5gui5 libqt5qml5 extra-cmake-modules qtbase5-dev kirigami2-dev libkf5kirigami2-5 libkf5notifications-dev qml-module-org-kde-kirigami2 qml-module-qtquick-dialogs qml-module-qtquick-controls cmake build-essential`
 
 **Note:** This was tested on KDE Neon User Edition 5.13, which is based on Ubuntu 18.04 LTS (Debian 9 Stretch/Sid).
 

+ 2 - 1
fancontrol-gui/CMakeLists.txt

@@ -5,6 +5,7 @@ set(Fancontrol_GUI_SRCS src/main.cpp
 set(LIBRARIES Qt5::Gui
               Qt5::Widgets
               KF5::CoreAddons
+              KF5::DBusAddons
               KF5::Declarative
               KF5::I18n
               KF5::ConfigGui
@@ -12,7 +13,7 @@ set(LIBRARIES Qt5::Gui
               KF5::Notifications)
 
 find_package(Qt5 COMPONENTS Gui Widgets REQUIRED)
-find_package(KF5 COMPONENTS CoreAddons Package Declarative Config Notifications REQUIRED)
+find_package(KF5 COMPONENTS CoreAddons DBusAddons Package Declarative Config Notifications REQUIRED)
 
 include_directories(${Qt5Widgets_INCLUDE_DIRS})
 add_definitions(${Qt5Widgets_DEFINITIONS})

+ 7 - 5
fancontrol-gui/package/contents/ui/Application.qml

@@ -29,6 +29,12 @@ import Fancontrol.Qml 1.0 as Fancontrol
 ApplicationWindow {
     id: window
 
+    function showWindow() {
+        window.show()
+        window.raise()
+        window.requestActivate()
+    }
+
     title: i18n("Fancontrol-GUI")
     width: 1024
     height: 768
@@ -115,11 +121,7 @@ ApplicationWindow {
                 iconName: "org.kde.fancontrol.gui"
                 profileModel: Fancontrol.Base.profileModel
 
-                onActivateRequested: {
-                    window.show()
-                    window.raise()
-                    window.requestActivate()
-                }
+                onActivateRequested: window.showWindow()
                 onActivateProfile: {
                     Fancontrol.Base.applyProfile(profile);
                     Fancontrol.Base.apply();

+ 32 - 5
fancontrol-gui/src/main.cpp

@@ -26,6 +26,7 @@
 #include <KDeclarative/QmlObject>
 #include <KI18n/KLocalizedString>
 #include <KCoreAddons/KAboutData>
+#include <KDBusAddons/KDBusService>
 
 #include "systemtrayicon.h"
 #include "windowconfig.h"
@@ -34,6 +35,32 @@
 Q_DECLARE_LOGGING_CATEGORY(FANCONTROL)
 Q_LOGGING_CATEGORY(FANCONTROL, "fancontrol-gui")
 
+void handleArguments(QStringList args)
+{
+    if (args.isEmpty())
+        args << qApp->applicationName();
+
+    const auto parser = new QCommandLineParser;
+    KAboutData::applicationData().setupCommandLine(parser);
+    parser->process(args);
+    KAboutData::applicationData().processCommandLine(parser);
+    delete parser;
+}
+
+void activate(const QStringList &args, const QString &workingDir)
+{
+    Q_UNUSED(workingDir);
+
+    handleArguments(args);
+
+    if (auto mainWindow = qApp->topLevelWindows().at(0))
+    {
+        mainWindow->show();
+        mainWindow->raise();
+        mainWindow->requestActivate();
+    }
+}
+
 int main(int argc, char *argv[])
 {
     QApplication app(argc, argv);
@@ -53,11 +80,11 @@ int main(int argc, char *argv[])
     about.addAuthor(i18n("Malte Veerman"), i18n("Main Developer"), QStringLiteral("malte.veerman@gmail.com"));
     KAboutData::setApplicationData(about);
 
-    const auto parser = new QCommandLineParser;
-    about.setupCommandLine(parser);
-    parser->process(app);
-    about.processCommandLine(parser);
-    delete parser;
+    handleArguments(app.arguments());
+
+    // register  the app  to dbus
+    KDBusService dbusService(KDBusService::Unique);
+    QObject::connect(&dbusService, &KDBusService::activateRequested, qApp, activate);
 
     qmlRegisterType<SystemTrayIcon>("Fancontrol.Gui", 1, 0, "SystemTrayIcon");