From ac503776496e2ba21654c916e4984bba76d9a01e Mon Sep 17 00:00:00 2001 From: Andreas Traczyk <andreas.traczyk@savoirfairelinux.com> Date: Mon, 31 Aug 2020 15:57:10 -0400 Subject: [PATCH] mainview: implement systray icon and runguard - adds a systray icon with and exit option when the app starts - removes the systray icon when the app exits - restores the app when a second instance is run Change-Id: I81e4552bdf0ce76a520cbae90e519efff0b13495 --- src/MainApplicationWindow.qml | 10 ++++++++++ src/lrcinstance.h | 1 + src/mainapplication.cpp | 25 +++++++++++++++++++++++++ src/runguard.cpp | 7 ++++--- 4 files changed, 40 insertions(+), 3 deletions(-) diff --git a/src/MainApplicationWindow.qml b/src/MainApplicationWindow.qml index 784b13ef8..8f5901317 100644 --- a/src/MainApplicationWindow.qml +++ b/src/MainApplicationWindow.qml @@ -123,4 +123,14 @@ ApplicationWindow { duration: 500 } } + + Connections { + target: ClientWrapper.lrcInstance + onRestoreAppRequested: { + if (mainViewLoader.item) + mainViewLoader.item.show() + else + wizardView.show() + } + } } diff --git a/src/lrcinstance.h b/src/lrcinstance.h index 19d15e5f7..776c3a1f5 100644 --- a/src/lrcinstance.h +++ b/src/lrcinstance.h @@ -444,6 +444,7 @@ public: signals: void accountListChanged(); void currentAccountChanged(); + void restoreAppRequested(); private: LRCInstance(migrateCallback willMigrateCb = {}, migrateCallback didMigrateCb = {}) diff --git a/src/mainapplication.cpp b/src/mainapplication.cpp index c6087be04..d3d6a68b5 100644 --- a/src/mainapplication.cpp +++ b/src/mainapplication.cpp @@ -58,7 +58,9 @@ #include "videoformatresolutionmodel.h" #include "videoinputdevicemodel.h" +#include <QAction> #include <QFontDatabase> +#include <QMenu> #include <QQmlContext> #include <QtWebEngine> @@ -455,5 +457,28 @@ MainApplication::applicationSetup() */ qmlInitialization(); + /* + * Systray menu. + */ + GlobalSystemTray& sysIcon = GlobalSystemTray::instance(); + sysIcon.setIcon(QIcon(":images/jami.png")); + + QMenu* systrayMenu = new QMenu(); + + QAction* exitAction = new QAction(tr("Exit"), this); + connect(exitAction, &QAction::triggered, + [this] { + QCoreApplication::exit(); + }); + + connect(&sysIcon, &QSystemTrayIcon::activated, + [this](QSystemTrayIcon::ActivationReason reason) { + emit LRCInstance::instance().restoreAppRequested(); + }); + + systrayMenu->addAction(exitAction); + sysIcon.setContextMenu(systrayMenu); + sysIcon.show(); + return true; } diff --git a/src/runguard.cpp b/src/runguard.cpp index 4d22959d2..b3c126edc 100644 --- a/src/runguard.cpp +++ b/src/runguard.cpp @@ -18,6 +18,9 @@ // Based on: https://stackoverflow.com/a/28172162 #include "runguard.h" + +#include "lrcinstance.h" + #include <QCryptographicHash> namespace { @@ -52,9 +55,7 @@ RunGuard::~RunGuard() void RunGuard::tryRestorePrimaryInstance() { - /* - * TODO: relaunch application - */ + emit LRCInstance::instance().restoreAppRequested(); } bool -- GitLab