From 8b893557140791c0d7ca1c20ea915b235967d681 Mon Sep 17 00:00:00 2001 From: lappelhans Date: Tue, 11 Dec 2007 21:56:32 +0000 Subject: [PATCH] Fix system-tray... git-svn-id: svn://anonsvn.kde.org/home/kde/trunk/KDE/kdenetwork@747398 283d02a7-25f6-0310-bc7c-ecb5cbfe19da --- kget/core/kget.cpp | 57 ++++++++++++++++++++++++++++++++++++--- kget/core/kget.h | 8 ++++++ kget/mainwindow.cpp | 34 ++++++++++++++++++++--- kget/mainwindow.h | 1 + kget/ui/transfersviewdelegate.cpp | 11 +++++++- kget/ui/tray.h | 2 +- 6 files changed, 104 insertions(+), 9 deletions(-) diff --git a/kget/core/kget.cpp b/kget/core/kget.cpp index ff0455cef..acad703e7 100644 --- a/kget/core/kget.cpp +++ b/kget/core/kget.cpp @@ -492,6 +492,23 @@ void KGet::setPluginsSettingsWidget(KTabWidget * widget) } } +QList KGet::allTransfers() +{ + QList transfers; + + foreach (TransferGroup *group, KGet::m_transferTreeModel->transferGroups()) + { + transfers << group->handler()->transfers(); + + } + return transfers; +} + +void KGet::setTrayDownloading(bool running) +{ + m_mainWindow->setTrayDownloading(running); +} + // ------ STATIC MEMBERS INITIALIZATION ------ QList KGet::m_observers; TransferTreeModel * KGet::m_transferTreeModel; @@ -888,8 +905,16 @@ TransferFinishedObserver::TransferFinishedObserver() void TransferFinishedObserver::transferChangedEvent(TransferHandler * transfer) { - if(transfer->status() == Job::Finished && Settings::quitAfterCompletedTransfer()) { - checkAndFinish(); + kDebug(5001); + if (transfer->status() == Job::Stopped) + checkAndUpdateSystemTray(); + + if(transfer->status() == Job::Finished) + { + if (Settings::quitAfterCompletedTransfer()) + checkAndFinish(); + else + checkAndUpdateSystemTray(); } } @@ -911,12 +936,14 @@ void TransferFinishedObserver::checkAndFinish() // one with parent as QWidget for the mainWindow // and another with parent as QSystemTrayIcon if the parent is a systemTray // so passing the QSystemTrayIcon as QWidget don't work - if(Settings::enableSystemTray()) { + if(Settings::enableSystemTray()) + { message = KPassivePopup::message(5000, KGET_QUIT_MESSAGE_TITLE, KGET_QUIT_MESSAGE, KGet::m_mainWindow->systemTray()); } - else { + else + { message = KPassivePopup::message(5000, KGET_QUIT_MESSAGE_TITLE, KGET_QUIT_MESSAGE, KGet::m_mainWindow); @@ -925,3 +952,25 @@ void TransferFinishedObserver::checkAndFinish() QObject::connect(message, SIGNAL(destroyed()), KGet::m_mainWindow, SLOT(slotQuit())); } } + +void TransferFinishedObserver::checkAndUpdateSystemTray() +{ + kDebug(5001); + bool running = false; + + foreach (TransferHandler *handler, KGet::allTransfers()) + { + if (handler->status() == Job::Running) + running = true; + + if (running) + { + kDebug(5001) << "Set downloading"; + KGet::m_mainWindow->setTrayDownloading(true); + continue; + } + } + + if (!running) + KGet::m_mainWindow->setTrayDownloading(false); +} diff --git a/kget/core/kget.h b/kget/core/kget.h index c40cb01e0..46dfea0a6 100644 --- a/kget/core/kget.h +++ b/kget/core/kget.h @@ -221,6 +221,13 @@ class KGET_EXPORT KGet */ static void setPluginsSettingsWidget(KTabWidget * widget); + /** + * Gets all transfers which are running + */ + static QList allTransfers(); + + static void setTrayDownloading(bool running); + private: KGet(); ~KGet(); @@ -317,6 +324,7 @@ class TransferFinishedObserver : public TransferObserver private: void checkAndFinish(); + void checkAndUpdateSystemTray(); }; #endif diff --git a/kget/mainwindow.cpp b/kget/mainwindow.cpp index 80e1d2db2..76f3007e7 100644 --- a/kget/mainwindow.cpp +++ b/kget/mainwindow.cpp @@ -392,17 +392,40 @@ void MainWindow::slotStartDownload() void MainWindow::slotStartAllDownload() { - m_dock->setDownloading(true); + bool running; + foreach (TransferHandler *handler, KGet::allTransfers()) + { + if (handler->statusText() == "Running") + running = true; + + if (running) + { + kDebug(5001); + setTrayDownloading(true); + continue; + } + } KGet::setSchedulerRunning(true); } void MainWindow::slotStartSelectedDownload() { - m_dock->setDownloading(true); + if (KGet::selectedTransfers().isEmpty()) + return; + bool downloading = false; foreach(TransferHandler * it, KGet::selectedTransfers()) - it->start(); + { + if (it->status() != Job::Finished) + { + it->start(); + downloading = true; + } + } + + if (downloading) + m_dock->setDownloading(true); } void MainWindow::slotStopDownload() @@ -582,6 +605,11 @@ void MainWindow::slotShowMenubar() menuBar()->hide(); } +void MainWindow::setTrayDownloading(bool running) +{ + m_dock->setDownloading(running); +} + /** widget events */ void MainWindow::closeEvent( QCloseEvent * e ) diff --git a/kget/mainwindow.h b/kget/mainwindow.h index c3763bf93..eebeeb338 100644 --- a/kget/mainwindow.h +++ b/kget/mainwindow.h @@ -44,6 +44,7 @@ public: virtual bool offlineMode() const; virtual QVariantMap transfers() const; virtual int transfersSpeed() const; + virtual void setTrayDownloading(bool running); KSystemTrayIcon *systemTray() const { return m_dock;}; diff --git a/kget/ui/transfersviewdelegate.cpp b/kget/ui/transfersviewdelegate.cpp index 015c50b91..d21438ac2 100644 --- a/kget/ui/transfersviewdelegate.cpp +++ b/kget/ui/transfersviewdelegate.cpp @@ -431,10 +431,19 @@ void TransfersViewDelegate::setModelData(QWidget * editor, QAbstractItemModel * TransferGroupHandler * groupHandler = static_cast(index.internalPointer()); - if(groupEditor->isRunning()) + if (groupEditor->isRunning()) groupHandler->start(); else groupHandler->stop(); + + bool downloading = false; + foreach (TransferHandler *transfer, groupHandler->transfers()) + { + if (transfer->status() == Job::Running) + downloading = true; + } + if (downloading) + KGet::setTrayDownloading(true); } void TransfersViewDelegate::closeExpandableDetails(const QModelIndex &transferIndex) diff --git a/kget/ui/tray.h b/kget/ui/tray.h index 24c46bffc..bd8f9aec6 100644 --- a/kget/ui/tray.h +++ b/kget/ui/tray.h @@ -36,7 +36,7 @@ public: Tray( MainWindow * parent ); ~Tray(); - void setDownloading( bool ); + void setDownloading(bool running); private: /** -- 2.11.4.GIT