diff --git a/src/psitrayicon.cpp b/src/psitrayicon.cpp index e97f1e74..7c5127ee 100644 --- a/src/psitrayicon.cpp +++ b/src/psitrayicon.cpp @@ -1,3 +1,4 @@ +#include "psioptions.h" #include "psitrayicon.h" #include "alerticon.h" @@ -10,6 +11,8 @@ #include #include #include +#include +#include // TODO: remove the QPoint parameter from the signals when we finally move // to the new system. @@ -17,12 +20,14 @@ PsiTrayIcon::PsiTrayIcon(const QString &tip, QMenu *popup, QObject *parent) // to the new system. PsiTrayIcon::PsiTrayIcon(const QString &tip, QMenu *popup, QObject *parent) : - QObject(parent), icon_(nullptr), trayicon_(new QSystemTrayIcon()), realIcon_(0) + QObject(parent), icon_(nullptr), trayicon_(new QSystemTrayIcon()), realIcon_(0), timer_(new QTimer()) { trayicon_->setContextMenu(popup); setToolTip(tip); connect(trayicon_, &QSystemTrayIcon::activated, this, &PsiTrayIcon::trayicon_activated); trayicon_->installEventFilter(this); + timer_->setSingleShot(true); + timer_->setInterval(qApp->doubleClickInterval()); } PsiTrayIcon::~PsiTrayIcon() @@ -32,6 +38,7 @@ PsiTrayIcon::~PsiTrayIcon() icon_->stop(); delete icon_; } + delete timer_; } void PsiTrayIcon::setContextMenu(QMenu* menu) @@ -176,8 +183,20 @@ void PsiTrayIcon::trayicon_activated(QSystemTrayIcon::ActivationReason reason) #ifdef Q_OS_MAC Q_UNUSED(reason) #else - if (reason == QSystemTrayIcon::Trigger) - emit clicked(QPoint(), Qt::LeftButton); + if (reason == QSystemTrayIcon::Trigger) { + if(PsiOptions::instance()->getOption("options.ui.systemtray.use-double-click").toBool()) { + if (timer_->remainingTime() <= 0) + { //timer is not active or finished (first click) + timer_->start(); + } else + { //timer is active (second click) + timer_->stop(); + emit doubleClicked(QPoint()); + } + } else { + emit clicked(QPoint(), Qt::LeftButton); + } + } else if (reason == QSystemTrayIcon::MiddleClick || (isKde() && reason == QSystemTrayIcon::Context)) emit clicked(QPoint(), Qt::MidButton); else if (reason == QSystemTrayIcon::DoubleClick) diff --git a/src/psitrayicon.h b/src/psitrayicon.h index 66d1c863..6af8f51c 100644 --- a/src/psitrayicon.h +++ b/src/psitrayicon.h @@ -48,6 +48,7 @@ private: PsiIcon* icon_; QSystemTrayIcon* trayicon_; quintptr realIcon_; + QTimer* timer_; };