LogoopenSUSE Build Service > Projects
Sign Up | Log In

View File kickoff-shutdown-upower.patch of Package kdebase3 (Project openSUSE:Factory)

diff -wruN kdebase-3.5.10.orig/kicker/kicker/ui/k_new_mnu.cpp kdebase-3.5.10/kicker/kicker/ui/k_new_mnu.cpp
--- kdebase-3.5.10.orig/kicker/kicker/ui/k_new_mnu.cpp	2012-02-24 14:00:03.000000000 +0400
+++ kdebase-3.5.10/kicker/kicker/ui/k_new_mnu.cpp	2012-02-26 09:16:18.726727042 +0400
@@ -3685,54 +3685,41 @@
     return 5;
 }
 
-#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"
-
 #ifdef KDELIBS_SUSE
-#include <liblazy.h>
 
 #include <X11/Xlib.h>
 #include <fixx11h.h>
+
+#include <dbus/qdbusdata.h>
+#include <dbus/qdbusmessage.h>
+#include <dbus/qdbusproxy.h>
+#include <dbus/qdbusvariant.h>
 #endif
 
 void KMenu::insertSuspendOption( int &nId, int &index )
 {
 #ifdef KDELIBS_SUSE
-    int supported = -1;
+
     bool suspend_ram, suspend_disk, standby;
 
-    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 {
-    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);
+		// 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();
 
-	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)
 	    standby = false;
-    }
 
 	if ( ! ( standby + suspend_ram + suspend_disk ) )
             return;
@@ -3756,59 +3743,29 @@
 void KMenu::slotSuspend(int id)
 {
 #ifdef KDELIBS_SUSE
-    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( id == 1 )
-	    ok = kpowersave.call( "do_suspendToDisk" );
-	else if( id == 2 )
-	    ok = kpowersave.call( "do_suspendToRAM" );
-	else if( id == 3 )
-	    ok = kpowersave.call( "do_standBy" );
-	else
-	    return;
-	error = ok ? 0 : 1;
-    } else {
-    int wake = 0;
-    DBusMessage *reply = 0;
 
     if (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 (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 (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);
+	if( m_dbusConn.isConnected() ) {
+		QDBusMessage msg = QDBusMessage::methodCall(
+					"org.freedesktop.UPower",
+					"/org/freedesktop/UPower",
+					"org.freedesktop.UPower",
+					"Suspend");
+		m_dbusConn.sendWithReply(msg);
+	}
     else
         return;
-    }
 
-    if (error)
 #endif
-        KMessageBox::error(this, i18n("Suspend failed"));
 
 }
 
diff -wruN kdebase-3.5.10.orig/kicker/kicker/ui/k_new_mnu.h kdebase-3.5.10/kicker/kicker/ui/k_new_mnu.h
--- kdebase-3.5.10.orig/kicker/kicker/ui/k_new_mnu.h	2012-02-24 14:28:32.000000000 +0400
+++ kdebase-3.5.10/kicker/kicker/ui/k_new_mnu.h	2012-02-26 09:14:15.733728378 +0400
@@ -41,6 +41,7 @@
 #include "kmenubase.h"
 #include "service_mnu.h"
 #include "query.h"
+#include <dbus/qdbusconnection.h>
 
 class KickerClientMenu;
 class KickoffTabBar;
@@ -228,6 +229,7 @@
     FlipScrollView             * m_exitView;
     QVBox                      * m_searchWidget;
     QLabel                     * m_resizeHandle;
+    QDBusConnection              m_dbusConn;
 
     bool                       m_isresizing;
     // timer for search without pressing enter feature