Группа :: Сети/Мгновенные сообщения
Пакет: 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_;
};