LCOV - code coverage report
Current view: top level - src - trayicon.cpp (source / functions) Coverage Total Hit
Test: .lcov.total Lines: 0.0 % 67 0
Test Date: 2026-03-23 21:55:57 Functions: 0.0 % 8 0

            Line data    Source code
       1              : // SPDX-FileCopyrightText: 2016 Anne Jan Brouwer
       2              : // SPDX-License-Identifier: GPL-3.0-or-later
       3              : #include "trayicon.h"
       4              : #include <QAction>
       5              : #include <QApplication>
       6              : #include <QMainWindow>
       7              : #include <QMenu>
       8              : 
       9              : #ifdef QT_DEBUG
      10              : #include "debughelper.h"
      11              : #endif
      12              : 
      13              : /**
      14              :  * @brief TrayIcon::TrayIcon use a (system) tray icon with a nice QtPass logo on
      15              :  * it (currently) only Quits.
      16              :  * @param parent
      17              :  */
      18            0 : TrayIcon::TrayIcon(QMainWindow *parent)
      19            0 :     : showAction(nullptr), hideAction(nullptr), minimizeAction(nullptr),
      20            0 :       maximizeAction(nullptr), restoreAction(nullptr), quitAction(nullptr),
      21            0 :       sysTrayIcon(nullptr), trayIconMenu(nullptr), isAllocated(false) {
      22            0 :   parentwin = parent;
      23              : 
      24            0 :   if (QSystemTrayIcon::isSystemTrayAvailable()) {
      25            0 :     createActions();
      26            0 :     createTrayIcon();
      27              : 
      28            0 :     sysTrayIcon->setIcon(
      29            0 :         QIcon::fromTheme("qtpass-tray", QIcon(":/artwork/icon.png")));
      30              : 
      31            0 :     sysTrayIcon->show();
      32              : 
      33            0 :     QObject::connect(sysTrayIcon, &QSystemTrayIcon::activated, this,
      34            0 :                      &TrayIcon::iconActivated);
      35              : 
      36            0 :     isAllocated = true;
      37              :   }
      38              : #ifdef QT_DEBUG
      39              :   // NOLINTNEXTLINE(readability/braces)
      40              :   else {
      41              :     dbg() << "No tray icon for this OS possibly also not show options?";
      42              :   }
      43              : #endif
      44            0 : }
      45              : 
      46              : /**
      47              :  * @brief TrayIcon::setVisible show or hide the icon.
      48              :  * @param visible
      49              :  */
      50            0 : void TrayIcon::setVisible(bool visible) {
      51            0 :   if (visible) {
      52            0 :     parentwin->show();
      53              :   } else {
      54            0 :     parentwin->hide();
      55              :   }
      56            0 : }
      57              : 
      58              : /**
      59              :  * @brief TrayIcon::getIsAllocated return if TrayIcon is allocated
      60              :  */
      61            0 : auto TrayIcon::getIsAllocated() -> bool { return isAllocated; }
      62              : 
      63              : /**
      64              :  * @brief TrayIcon::createActions setup the signals.
      65              :  */
      66            0 : void TrayIcon::createActions() {
      67            0 :   showAction = new QAction(tr("&Show"), this);
      68            0 :   connect(showAction, &QAction::triggered, parentwin, &QWidget::show);
      69            0 :   hideAction = new QAction(tr("&Hide"), this);
      70            0 :   connect(hideAction, &QAction::triggered, parentwin, &QWidget::hide);
      71              : 
      72            0 :   minimizeAction = new QAction(tr("Mi&nimize"), this);
      73            0 :   connect(minimizeAction, &QAction::triggered, parentwin,
      74            0 :           &QWidget::showMinimized);
      75            0 :   maximizeAction = new QAction(tr("Ma&ximize"), this);
      76            0 :   connect(maximizeAction, &QAction::triggered, parentwin,
      77            0 :           &QWidget::showMaximized);
      78            0 :   restoreAction = new QAction(tr("&Restore"), this);
      79            0 :   connect(restoreAction, &QAction::triggered, parentwin, &QWidget::showNormal);
      80              : 
      81            0 :   quitAction = new QAction(tr("&Quit"), this);
      82              : #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
      83              : #pragma GCC diagnostic push
      84              : #pragma GCC diagnostic ignored "-Wdeprecated-declarations"
      85              : #endif
      86            0 :   connect(quitAction, &QAction::triggered, qApp, &QApplication::quit);
      87              : #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
      88              : #pragma GCC diagnostic pop
      89              : #endif
      90            0 : }
      91              : 
      92              : /**
      93              :  * @brief TrayIcon::createTrayIcon set up menu.
      94              :  */
      95            0 : void TrayIcon::createTrayIcon() {
      96            0 :   trayIconMenu = new QMenu(this);
      97            0 :   trayIconMenu->addAction(showAction);
      98            0 :   trayIconMenu->addAction(hideAction);
      99            0 :   trayIconMenu->addAction(minimizeAction);
     100            0 :   trayIconMenu->addAction(maximizeAction);
     101            0 :   trayIconMenu->addAction(restoreAction);
     102            0 :   trayIconMenu->addSeparator();
     103            0 :   trayIconMenu->addAction(quitAction);
     104              : 
     105            0 :   sysTrayIcon = new QSystemTrayIcon(this);
     106            0 :   sysTrayIcon->setContextMenu(trayIconMenu);
     107            0 : }
     108              : 
     109              : /**
     110              :  * @brief TrayIcon::showHideParent toggle app visibility.
     111              :  */
     112            0 : void TrayIcon::showHideParent() {
     113            0 :   if (parentwin->isVisible()) {
     114            0 :     parentwin->hide();
     115              :   } else {
     116            0 :     parentwin->show();
     117              :   }
     118            0 : }
     119              : 
     120              : /**
     121              :  * @brief TrayIcon::iconActivated you clicked on the trayicon.
     122              :  * @param reason
     123              :  */
     124            0 : void TrayIcon::iconActivated(QSystemTrayIcon::ActivationReason reason) {
     125            0 :   switch (reason) {
     126            0 :   case QSystemTrayIcon::Trigger:
     127              :   case QSystemTrayIcon::DoubleClick:
     128            0 :     showHideParent();
     129            0 :     break;
     130            0 :   case QSystemTrayIcon::MiddleClick:
     131            0 :     showMessage("test", "test msg", 1000);
     132            0 :     break;
     133            0 :   default: {
     134              :   }
     135              :   }
     136            0 : }
     137              : 
     138              : /**
     139              :  * @brief TrayIcon::showMessage show a systray message for notification.
     140              :  * @param title
     141              :  * @param msg
     142              :  * @param time
     143              :  */
     144            0 : void TrayIcon::showMessage(const QString &title, const QString &msg, int time) {
     145            0 :   sysTrayIcon->showMessage(title, msg, QSystemTrayIcon::Information, time);
     146            0 : }
        

Generated by: LCOV version 2.4-beta