From 5e86c8a14df864a033d37b23ce950265fb7ef123 Mon Sep 17 00:00:00 2001 From: Christophe Dumez Date: Fri, 4 Jan 2008 20:09:37 +0000 Subject: [PATCH] - Fixed systray integration when qbittorrent is launched on system startup --- src/GUI.cpp | 35 ++++++++++++++++++++++++++++++++++- src/GUI.h | 2 ++ 2 files changed, 36 insertions(+), 1 deletion(-) diff --git a/src/GUI.cpp b/src/GUI.cpp index 10d83ce02..7ff5da992 100644 --- a/src/GUI.cpp +++ b/src/GUI.cpp @@ -61,14 +61,21 @@ GUI::GUI(QWidget *parent, QStringList torrentCmdLine) : QMainWindow(parent), dis setWindowTitle(tr("qBittorrent %1", "e.g: qBittorrent v0.x").arg(QString::fromUtf8(VERSION))); QSettings settings(QString::fromUtf8("qBittorrent"), QString::fromUtf8("qBittorrent")); systrayIntegration = settings.value(QString::fromUtf8("Preferences/General/SystrayEnabled"), true).toBool(); + systrayCreator = 0; // Create tray icon if (QSystemTrayIcon::isSystemTrayAvailable()) { if(systrayIntegration) { createTrayIcon(); } }else{ + if(systrayIntegration) { + // May be system startup, check again later + systrayCreator = new QTimer(this); + connect(systrayCreator, SIGNAL(timeout()), this, SLOT(createSystrayDelayed())); + systrayCreator->start(1000); + } systrayIntegration = false; - qDebug("Info: System tray unavailable\n"); + qDebug("Info: System tray unavailable"); } // Setting icons this->setWindowIcon(QIcon(QString::fromUtf8(":/Icons/qbittorrent32.png"))); @@ -179,6 +186,9 @@ GUI::~GUI() { delete downloadingTorrentTab; delete finishedTorrentTab; delete checkConnect; + if(systrayCreator) { + delete systrayCreator; + } if(systrayIntegration) { delete myTrayIcon; delete myTrayIconMenu; @@ -1262,6 +1272,29 @@ void GUI::downloadFromURLList(const QStringList& urls) { * * *****************************************************/ +void GUI::createSystrayDelayed() { + static int timeout = 10; + if(QSystemTrayIcon::isSystemTrayAvailable()) { + // Ok, systray integration is now supported + // Create systray icon + createTrayIcon(); + systrayIntegration = true; + delete systrayCreator; + systrayCreator = 0; + } else { + if(timeout) { + // Retry a bit later + systrayCreator->start(1000); + --timeout; + } else { + // Timed out, apparently system really does not + // support systray icon + delete systrayCreator; + systrayCreator = 0; + } + } +} + void GUI::createTrayIcon() { // Tray icon #ifdef Q_WS_WIN diff --git a/src/GUI.h b/src/GUI.h index 935a44154..4ea8d78da 100644 --- a/src/GUI.h +++ b/src/GUI.h @@ -59,6 +59,7 @@ class GUI : public QMainWindow, private Ui::MainWindow{ QTabWidget *tabs; options_imp *options; QSystemTrayIcon *myTrayIcon; + QTimer *systrayCreator; QMenu *myTrayIconMenu; DownloadingTorrents *downloadingTorrentTab; FinishedTorrents *finishedTorrentTab; @@ -106,6 +107,7 @@ class GUI : public QMainWindow, private Ui::MainWindow{ void updateFinishedTorrentNumber(unsigned int nb); void fullDiskError(QTorrentHandle& h) const; void handleDownloadFromUrlFailure(QString, QString) const; + void createSystrayDelayed(); // Keyboard shortcuts void createKeyboardShortcuts(); void displayDownTab() const;