Репозиторий Sisyphus
Последнее обновление: 1 октября 2023 | Пакетов: 18631 | Посещений: 37401859
en ru br
Репозитории ALT
S:1.5.1627-alt1
5.1: 0.15-alt0.r2747.M51.1
www.altlinux.org/Changes

Группа :: Сети/Мгновенные сообщения
Пакет: psi-plus

 Главная   Изменения   Спек   Патчи   Sources   Загрузить   Gear   Bugs and FR  Repocop 

Патч: psi-plus-doubleclick-alt.patch
Скачать


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 <QPixmap>
 #include <QPixmapCache>
 #include <QSystemTrayIcon>
+#include <QTimer>
+#include <QApplication>
 // 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_;
 };
 
 
 
дизайн и разработка: Vladimir Lettiev aka crux © 2004-2005, Andrew Avramenko aka liks © 2007-2008
текущий майнтейнер: Michael Shigorin