Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:aualin:kde
kdebase3
ksmserver-shutdown-upower.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File ksmserver-shutdown-upower.patch of Package kdebase3
diff -wruN kdebase-3.5.10.orig/ksmserver/shutdowndlg.cpp kdebase-3.5.10/ksmserver/shutdowndlg.cpp --- kdebase-3.5.10.orig/ksmserver/shutdowndlg.cpp 2012-02-22 08:17:40.342199124 +0400 +++ kdebase-3.5.10/ksmserver/shutdowndlg.cpp 2012-02-26 05:57:11.235726994 +0400 @@ -47,15 +47,15 @@ #include <unistd.h> #include <stdlib.h> #include <dmctl.h> -#include <liblazy.h> #include <X11/Xlib.h> #include "shutdowndlg.moc" -#define DBUS_HAL_INTERFACE "org.freedesktop.Hal" -#define DBUS_HAL_SYSTEM_POWER_INTERFACE "org.freedesktop.Hal.Device.SystemPowerManagement" -#define HAL_UDI_COMPUTER "/org/freedesktop/Hal/devices/computer" +#include <dbus/qdbusdata.h> +#include <dbus/qdbusmessage.h> +#include <dbus/qdbusproxy.h> +#include <dbus/qdbusvariant.h> static const int max_faded = 2300; static const int slice = 20; @@ -265,43 +265,29 @@ } else QToolTip::add( btnReboot, i18n( "<qt><h3>Restart Computer</h3><p>Log out of the current session and restart the computer</p></qt>" ) ); - DCOPRef kpowersave( "kpowersave", "KPowersaveIface" ); - DCOPReply reply = kpowersave.call( "allowed_sleepingStates" ); - if( reply.isValid()) { - QStringList supported = reply; - suspend_ram = supported.contains( "suspendToRAM" ); - suspend_disk = supported.contains( "suspendToDisk" ); - standby = supported.contains( "standBy" ); - } else { - int supported = -1; - liblazy_hal_get_property_bool(HAL_UDI_COMPUTER, "power_management.can_suspend", &supported); - if (supported == 1) - suspend_ram = true; - else - suspend_ram = false; - liblazy_hal_get_property_bool(HAL_UDI_COMPUTER, "power_management.can_standby", &supported); - if (supported == 1) - standby = true; - else - standby = false; - liblazy_hal_get_property_bool(HAL_UDI_COMPUTER, "power_management.can_hibernate", &supported); - if (supported == 1) - suspend_disk = true; - else - suspend_disk = false; + m_dbusConn = QDBusConnection::addConnection(QDBusConnection::SystemBus); + + QDBusProxy upowerProperties("org.freedesktop.UPower", "/org/freedesktop/UPower", "org.freedesktop.DBus.Properties", m_dbusConn); - if (liblazy_hal_is_caller_privileged("org.freedesktop.hal.power-management.hibernate") != 1) - suspend_disk = false; - if (liblazy_hal_is_caller_privileged("org.freedesktop.hal.power-management.suspend") != 1) - suspend_ram = false; - if (liblazy_hal_is_caller_privileged("org.freedesktop.hal.power-management.standby") != 1) + // can suspend? + QValueList<QDBusData> params; + params << QDBusData::fromString(upowerProperties.interface()) << QDBusData::fromString("CanSuspend"); + QDBusMessage reply = upowerProperties.sendWithReply("Get", params); + if(reply.type() == QDBusMessage::ReplyMessage && reply.count() == 1) + suspend_ram = reply[0].toVariant().value.toBool(); + + // can hibernate? + params.clear(); + params << QDBusData::fromString(upowerProperties.interface()) << QDBusData::fromString("CanHibernate"); + reply = upowerProperties.sendWithReply("Get", params); + if(reply.type() == QDBusMessage::ReplyMessage && reply.count() == 1) + suspend_disk = reply[0].toVariant().value.toBool(); standby = false; - } int sum = standby + suspend_ram + suspend_disk; if ( sum ) { QButton *btnSuspend; - if (sum > 1) { + if (sum >= 1) { btnSuspend = new KSMDelayedPushButton( KGuiItem( i18n("&Suspend Computer"), "player_pause"), frame ); QPopupMenu *suspends = new QPopupMenu(frame); if (suspend_disk) @@ -312,8 +298,6 @@ suspends->insertItem(i18n("Standby"), 3); connect(suspends, SIGNAL(activated(int)), SLOT(slotSuspend(int))); static_cast<KSMDelayedPushButton*>(btnSuspend)->setPopup(suspends); - } else { - btnSuspend = new KPushButton( KGuiItem( i18n("&Suspend Computer"), "player_pause"), frame ); } btnSuspend->setFont( btnFont ); buttonlay->addWidget( btnSuspend ); @@ -334,55 +318,25 @@ void KSMShutdownDlg::slotSuspend() { - int error = 0; - DCOPRef kpowersave( "kpowersave", "KPowersaveIface" ); - DCOPReply reply = kpowersave.call( "allowed_sleepingStates" ); - if( reply.isValid()) { - bool ok; - // so that screen locking can take place - extern Time qt_x_time; - XUngrabKeyboard( qt_xdisplay(), qt_x_time ); - XUngrabPointer( qt_xdisplay(), qt_x_time ); - XSync( qt_xdisplay(), False ); - if( suspend_disk ) - ok = kpowersave.call( "do_suspendToDisk" ); - else if( suspend_ram ) - ok = kpowersave.call( "do_suspendToRAM" ); - else - ok = kpowersave.call( "do_standBy" ); - error = ok ? 0 : 1; - } else { - - int wake = 0; - DBusMessage *reply; - if (suspend_disk) - error = liblazy_dbus_system_send_method_call(DBUS_HAL_INTERFACE, - HAL_UDI_COMPUTER, - DBUS_HAL_SYSTEM_POWER_INTERFACE, - "Hibernate", - &reply, - DBUS_TYPE_INVALID); - else if (suspend_ram) - error = liblazy_dbus_system_send_method_call(DBUS_HAL_INTERFACE, - HAL_UDI_COMPUTER, - DBUS_HAL_SYSTEM_POWER_INTERFACE, - "Suspend", - &reply, - DBUS_TYPE_INT32, - &wake, - DBUS_TYPE_INVALID); - else - error = liblazy_dbus_system_send_method_call(DBUS_HAL_INTERFACE, - HAL_UDI_COMPUTER, - DBUS_HAL_SYSTEM_POWER_INTERFACE, - "Standby", - &reply, - DBUS_TYPE_INVALID); + if (suspend_disk) { + if( m_dbusConn.isConnected() ) { + QDBusMessage msg = QDBusMessage::methodCall( + "org.freedesktop.UPower", + "/org/freedesktop/UPower", + "org.freedesktop.UPower", + "Hibernate"); + m_dbusConn.sendWithReply(msg); + } + } else + if( m_dbusConn.isConnected() ) { + QDBusMessage msg = QDBusMessage::methodCall( + "org.freedesktop.UPower", + "/org/freedesktop/UPower", + "org.freedesktop.UPower", + "Suspend"); + m_dbusConn.sendWithReply(msg); } - - if (error) - KMessageBox::error(this, i18n("Suspend failed")); // possibly after resume :) reject(); @@ -390,60 +344,27 @@ void KSMShutdownDlg::slotSuspend(int id) { - int error = 0; - - DCOPRef kpowersave( "kpowersave", "KPowersaveIface" ); - DCOPReply reply = kpowersave.call( "allowed_sleepingStates" ); - if( reply.isValid()) { - bool ok; - extern Time qt_x_time; - XUngrabKeyboard( qt_xdisplay(), qt_x_time ); - XUngrabPointer( qt_xdisplay(), qt_x_time ); - XSync( qt_xdisplay(), False ); - if( suspend_disk && id == 1 ) - ok = kpowersave.call( "do_suspendToDisk" ); - else if( suspend_ram && id == 2 ) - ok = kpowersave.call( "do_suspendToRAM" ); - else if( standby && id == 3 ) - ok = kpowersave.call( "do_standBy" ); - else - return; - error = ok ? 0 : 1; - } else { - - - int wake = 0; - DBusMessage *reply; if (suspend_disk && id == 1) { - error = liblazy_dbus_system_send_method_call(DBUS_HAL_INTERFACE, - HAL_UDI_COMPUTER, - DBUS_HAL_SYSTEM_POWER_INTERFACE, - "Hibernate", - &reply, - DBUS_TYPE_INVALID); + if( m_dbusConn.isConnected() ) { + QDBusMessage msg = QDBusMessage::methodCall( + "org.freedesktop.UPower", + "/org/freedesktop/UPower", + "org.freedesktop.UPower", + "Hibernate"); + m_dbusConn.sendWithReply(msg); + } } else if (suspend_ram && id == 2) - error = liblazy_dbus_system_send_method_call(DBUS_HAL_INTERFACE, - HAL_UDI_COMPUTER, - DBUS_HAL_SYSTEM_POWER_INTERFACE, - "Suspend", - &reply, - DBUS_TYPE_INT32, - &wake, - DBUS_TYPE_INVALID); - else if (standby && id == 3) - error = liblazy_dbus_system_send_method_call(DBUS_HAL_INTERFACE, - HAL_UDI_COMPUTER, - DBUS_HAL_SYSTEM_POWER_INTERFACE, - "Standby", - &reply, - DBUS_TYPE_INVALID); - else - return; + if( m_dbusConn.isConnected() ) { + QDBusMessage msg = QDBusMessage::methodCall( + "org.freedesktop.UPower", + "/org/freedesktop/UPower", + "org.freedesktop.UPower", + "Suspend"); + m_dbusConn.sendWithReply(msg); } - - if (error) - KMessageBox::error(this, i18n("Suspend failed")); + else + KSMShutdownDlg::slotSuspend(); return; // possibly after resume :) reject(); diff -wruN kdebase-3.5.10.orig/ksmserver/shutdowndlg.h kdebase-3.5.10/ksmserver/shutdowndlg.h --- kdebase-3.5.10.orig/ksmserver/shutdowndlg.h 2012-02-20 01:01:49.084200000 +0400 +++ kdebase-3.5.10/ksmserver/shutdowndlg.h 2012-02-25 16:45:19.519737644 +0400 @@ -12,6 +12,7 @@ #include <qdatetime.h> #include <kpushbutton.h> #include <qimage.h> +#include <dbus/qdbusconnection.h> class QPushButton; class QVButtonGroup; class QPopupMenu; @@ -74,6 +75,7 @@ QPopupMenu *targets; QStringList rebootOptions; bool suspend_disk, suspend_ram, standby; + QDBusConnection m_dbusConn; }; class KSMDelayedPushButton : public KPushButton
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor