diff --git a/src/misc.cpp b/src/misc.cpp index a998bc86b..1213e4ec4 100644 --- a/src/misc.cpp +++ b/src/misc.cpp @@ -209,13 +209,16 @@ long long misc::freeDiskSpaceOnPath(QString path) { #ifndef DISABLE_GUI void misc::shutdownComputer(bool sleep) { #if defined(Q_WS_X11) && defined(QT_DBUS_LIB) - // Use dbus to power off the system - // dbus-send --print-reply --system --dest=org.freedesktop.Hal /org/freedesktop/Hal/devices/computer org.freedesktop.Hal.Device.SystemPowerManagement.Shutdown - QDBusInterface computer("org.freedesktop.Hal", "/org/freedesktop/Hal/devices/computer", "org.freedesktop.Hal.Device.SystemPowerManagement", QDBusConnection::systemBus()); - if(sleep) - computer.call("Suspend", 5); - else - computer.call("Shutdown"); + // Use dbus to power off / suspend the system + if(sleep) { + QDBusInterface upowerIface("org.freedesktop.UPower", "/org/freedesktop/UPower", + "org.freedesktop.UPower", QDBusConnection::systemBus()); + upowerIface.call("Suspend"); + } else { + QDBusInterface consolekitIface("org.freedesktop.ConsoleKit", "/org/freedesktop/ConsoleKit/Manager", + "org.freedesktop.ConsoleKit.Manager", QDBusConnection::systemBus()); + consolekitIface.call("Stop"); + } #endif #ifdef Q_WS_MAC AEEventID EventToSend; diff --git a/src/qtlibtorrent/qbtsession.cpp b/src/qtlibtorrent/qbtsession.cpp index 4c2f781ac..d8d99cdec 100644 --- a/src/qtlibtorrent/qbtsession.cpp +++ b/src/qtlibtorrent/qbtsession.cpp @@ -95,7 +95,7 @@ QBtSession::QBtSession() #ifndef DISABLE_GUI , geoipDBLoaded(false), resolve_countries(false) #endif - , m_tracker(0) + , m_tracker(0), m_shutdownAct(NO_SHUTDOWN) { BigRatioTimer = new QTimer(this); BigRatioTimer->setInterval(10000); @@ -182,6 +182,10 @@ QBtSession::~QBtSession() { qDebug("Deleting the session"); delete s; qDebug("BTSession destructor OUT"); + if(m_shutdownAct != NO_SHUTDOWN) { + qDebug() << "Sending computer shutdown/suspend signal..."; + misc::shutdownComputer(m_shutdownAct == SUSPEND_COMPUTER); + } } void QBtSession::preAllocateAllFiles(bool b) { @@ -2112,9 +2116,10 @@ void QBtSession::readAlerts() { qDebug("Saving fast resume data"); saveFastResumeData(); // Make sure preferences are synced before exiting - pref.sync(); - qDebug("Sending computer shutdown/suspend signal"); - misc::shutdownComputer(suspend); + if(suspend) + m_shutdownAct = SUSPEND_COMPUTER; + else + m_shutdownAct = SHUTDOWN_COMPUTER; } qDebug("Exiting the application"); qApp->exit(); diff --git a/src/qtlibtorrent/qbtsession.h b/src/qtlibtorrent/qbtsession.h index 9f0ab9294..a96137de1 100644 --- a/src/qtlibtorrent/qbtsession.h +++ b/src/qtlibtorrent/qbtsession.h @@ -69,6 +69,7 @@ public: private: explicit QBtSession(); static QBtSession* m_instance; + enum shutDownAction { NO_SHUTDOWN, SHUTDOWN_COMPUTER, SUSPEND_COMPUTER }; public: static QBtSession* instance(); @@ -267,6 +268,7 @@ private: // Tracker QPointer m_tracker; TorrentSpeedMonitor *m_speedMonitor; + shutDownAction m_shutdownAct; };