From 9b78b2e124a32a7c3632b9745189205b94530a3c Mon Sep 17 00:00:00 2001 From: Ronan Abhamon Date: Fri, 16 Sep 2016 17:17:25 +0200 Subject: [PATCH] feat(app): use system tray --- tests/build_resources_file | 2 +- tests/imgs/linphone.png | Bin 0 -> 2733 bytes tests/resources.qrc | 1 + tests/src/app.cpp | 8 +++++--- tests/src/app.hpp | 6 ++++-- tests/src/main.cpp | 30 ++++++++++++++++++++++++++++++ 6 files changed, 41 insertions(+), 6 deletions(-) create mode 100644 tests/imgs/linphone.png diff --git a/tests/build_resources_file b/tests/build_resources_file index dd3989a20..d39f8a1e0 100755 --- a/tests/build_resources_file +++ b/tests/build_resources_file @@ -7,7 +7,7 @@ for filename in $(find languages/ ui/ imgs/ -type f) do extension="${filename##*.}" - if [[ "${extension}" == @(qml|svg|qm|js) ]]; then + if [[ "${extension}" == @(qml|svg|png|qm|js) ]]; then echo " $filename" fi done diff --git a/tests/imgs/linphone.png b/tests/imgs/linphone.png new file mode 100644 index 0000000000000000000000000000000000000000..4031d72056a20472c6b99b0b79c8dfd6b1c5ce95 GIT binary patch literal 2733 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 literal 0 HcmV?d00001 diff --git a/tests/resources.qrc b/tests/resources.qrc index a1c763d6e..941fd287a 100644 --- a/tests/resources.qrc +++ b/tests/resources.qrc @@ -39,6 +39,7 @@ imgs/led_disconnected.svg imgs/valid.svg imgs/incoming_call.svg + imgs/linphone.png imgs/led_do_not_disturb.svg imgs/lost_incoming_call.svg imgs/conference.svg diff --git a/tests/src/app.cpp b/tests/src/app.cpp index e05a0ab99..59f5621fe 100644 --- a/tests/src/app.cpp +++ b/tests/src/app.cpp @@ -1,19 +1,21 @@ #include +#include #include - #include "app.hpp" #define LANGUAGES_PATH ":/languages/" // =================================================================== -App::App(int &argc, char **argv) : QGuiApplication(argc, argv) { - // Try to enable system translation by default. (else english) +App::App (int &argc, char **argv) : QApplication(argc, argv) { + // Try to use default locale. if (m_translator.load(QString(LANGUAGES_PATH) + QLocale::system().name()) || m_translator.load(LANGUAGES_PATH "en")) { this->installTranslator(&m_translator); } else { qWarning() << "No translation found."; } + + this->setWindowIcon(QIcon(":/imgs/linphone.png")); } diff --git a/tests/src/app.hpp b/tests/src/app.hpp index 731520f22..29ea42bf4 100644 --- a/tests/src/app.hpp +++ b/tests/src/app.hpp @@ -1,15 +1,17 @@ #ifndef APP_H_ #define APP_H_ -#include +#include #include // TODO: Make it Singleton. -class App : public QGuiApplication { +class App : public QApplication { public: App (int &argc, char **argv); virtual ~App () {} +private slots: + private: QTranslator m_translator; }; diff --git a/tests/src/main.cpp b/tests/src/main.cpp index 02a01ceab..9335b8b42 100644 --- a/tests/src/main.cpp +++ b/tests/src/main.cpp @@ -1,11 +1,36 @@ #include +#include #include +#include +#include #include "app.hpp" // =================================================================== +void createSystemTrayIcon (QQmlApplicationEngine &engine) { + QObject *root = engine.rootObjects().at(0); + QMenu *menu = new QMenu(); + QSystemTrayIcon *tray_icon = new QSystemTrayIcon(root); + + QAction *quitAction = new QAction(QObject::tr("Quit"), root); + root->connect(quitAction, &QAction::triggered, qApp, &QCoreApplication::quit); + + QAction *restoreAction = new QAction(QObject::tr("Restore")), root); + root->connect(restoreAction, SIGNAL(triggered()), root, SLOT(showNormal())); + + menu->addAction(restoreAction); + menu->addSeparator(); + menu->addAction(quitAction); + + tray_icon->setContextMenu(menu); + tray_icon->setIcon(QIcon(":/imgs/linphone.png")); + tray_icon->show(); + + return; +} + int main (int argc, char *argv[]) { App app(argc, argv); QQmlApplicationEngine engine(QUrl("qrc:/ui/views/mainWindow/mainWindow.qml")); @@ -13,5 +38,10 @@ int main (int argc, char *argv[]) { if (engine.rootObjects().isEmpty()) return EXIT_FAILURE; + if (!QSystemTrayIcon::isSystemTrayAvailable()) + qWarning() << "System tray not found on this system."; + else + createSystemTrayIcon(engine); + return app.exec(); }