diff --git a/src/MainApplicationWindow.qml b/src/MainApplicationWindow.qml index 784b13ef..8f590131 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 19d15e5f..776c3a1f 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 c6087be0..d3d6a68b 100644 --- a/src/mainapplication.cpp +++ b/src/mainapplication.cpp @@ -58,7 +58,9 @@ #include "videoformatresolutionmodel.h" #include "videoinputdevicemodel.h" +#include #include +#include #include #include @@ -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 4d22959d..b3c126ed 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 namespace { @@ -52,9 +55,7 @@ RunGuard::~RunGuard() void RunGuard::tryRestorePrimaryInstance() { - /* - * TODO: relaunch application - */ + emit LRCInstance::instance().restoreAppRequested(); } bool