diff --git a/src/GUI.cpp b/src/GUI.cpp index b6cab41dc..6408a206c 100644 --- a/src/GUI.cpp +++ b/src/GUI.cpp @@ -580,6 +580,20 @@ void GUI::on_actionCreate_torrent_triggered() { } } +bool GUI::checkForModals() const { + //Returns true if there are any modal windows visible + QList dialog_list = findChildren(); + QList::const_iterator i; + + for(i = dialog_list.begin(); i != dialog_list.constEnd(); i++) { + if((*i)->isModal() && (*i)->isVisible()) { + return true; + } + } + + return false; +} + bool GUI::event(QEvent * e) { if(e->type() == QEvent::WindowStateChange) { qDebug("Window change event"); @@ -588,10 +602,17 @@ bool GUI::event(QEvent * e) { qDebug("minimisation"); QSettings settings(QString::fromUtf8("qBittorrent"), QString::fromUtf8("qBittorrent")); if(systrayIcon && settings.value(QString::fromUtf8("Preferences/General/MinimizeToTray"), false).toBool()) { - qDebug("Minimize to Tray enabled, hiding!"); - e->accept(); - QTimer::singleShot(0, this, SLOT(hide())); - return true; + if(checkForModals()) + { + qDebug("Minimize to Tray enabled, but not hiding because of a modal dialog"); + } + else + { + qDebug("Minimize to Tray enabled, hiding!"); + e->accept(); + QTimer::singleShot(0, this, SLOT(hide())); + return true; + } } } } diff --git a/src/GUI.h b/src/GUI.h index df67e23f8..b2e7b96fa 100644 --- a/src/GUI.h +++ b/src/GUI.h @@ -68,6 +68,7 @@ public: ~GUI(); // Methods int getCurrentTabIndex() const; + bool checkForModals() const; TransferListWidget* getTransferList() const { return transferList; } QMenu* getTrayIconMenu();