File gnome-power-manager-powersave-dbus.patch of Package gnome-power-manager

diff -upr gnome-power-manager-2.14.0-orig/data/gpm-prefs.glade gnome-power-manager-2.14.0/data/gpm-prefs.glade
--- gnome-power-manager-2.14.0-orig/data/gpm-prefs.glade	2006-03-13 18:19:58.000000000 +0100
+++ gnome-power-manager-2.14.0/data/gpm-prefs.glade	2006-04-03 15:04:22.000000000 +0200
@@ -19,6 +19,7 @@
   <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
   <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
   <property name="focus_on_map">True</property>
+  <property name="urgency_hint">False</property>
 
   <child>
     <widget class="GtkVBox" id="vbox1">
@@ -1162,6 +1163,84 @@
 			      <property name="fill">False</property>
 			    </packing>
 			  </child>
+
+			  <child>
+			    <widget class="GtkButton" id="button_system_settings">
+			      <property name="visible">True</property>
+			      <property name="can_focus">True</property>
+			      <property name="relief">GTK_RELIEF_NORMAL</property>
+			      <property name="focus_on_click">True</property>
+
+			      <child>
+				<widget class="GtkAlignment" id="alignment21">
+				  <property name="visible">True</property>
+				  <property name="xalign">0.5</property>
+				  <property name="yalign">0.5</property>
+				  <property name="xscale">0</property>
+				  <property name="yscale">0</property>
+				  <property name="top_padding">0</property>
+				  <property name="bottom_padding">0</property>
+				  <property name="left_padding">0</property>
+				  <property name="right_padding">0</property>
+
+				  <child>
+				    <widget class="GtkHBox" id="hbox1">
+				      <property name="visible">True</property>
+				      <property name="homogeneous">False</property>
+				      <property name="spacing">2</property>
+
+				      <child>
+					<widget class="GtkImage" id="image1">
+					  <property name="visible">True</property>
+					  <property name="stock">gtk-properties</property>
+					  <property name="icon_size">4</property>
+					  <property name="xalign">0.5</property>
+					  <property name="yalign">0.5</property>
+					  <property name="xpad">0</property>
+					  <property name="ypad">0</property>
+					</widget>
+					<packing>
+					  <property name="padding">0</property>
+					  <property name="expand">False</property>
+					  <property name="fill">False</property>
+					</packing>
+				      </child>
+
+				      <child>
+					<widget class="GtkLabel" id="label30">
+					  <property name="visible">True</property>
+					  <property name="label" translatable="yes">System settings</property>
+					  <property name="use_underline">True</property>
+					  <property name="use_markup">False</property>
+					  <property name="justify">GTK_JUSTIFY_LEFT</property>
+					  <property name="wrap">False</property>
+					  <property name="selectable">False</property>
+					  <property name="xalign">0.5</property>
+					  <property name="yalign">0.5</property>
+					  <property name="xpad">0</property>
+					  <property name="ypad">0</property>
+					  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+					  <property name="width_chars">-1</property>
+					  <property name="single_line_mode">False</property>
+					  <property name="angle">0</property>
+					</widget>
+					<packing>
+					  <property name="padding">0</property>
+					  <property name="expand">False</property>
+					  <property name="fill">False</property>
+					</packing>
+				      </child>
+				    </widget>
+				  </child>
+				</widget>
+			      </child>
+			    </widget>
+			    <packing>
+			      <property name="padding">0</property>
+			      <property name="expand">False</property>
+			      <property name="fill">False</property>
+			    </packing>
+			  </child>
 			</widget>
 		      </child>
 		    </widget>
diff -upr gnome-power-manager-2.14.0-orig/src/gpm-main.c gnome-power-manager-2.14.0/src/gpm-main.c
--- gnome-power-manager-2.14.0-orig/src/gpm-main.c	2006-03-02 00:28:24.000000000 +0100
+++ gnome-power-manager-2.14.0/src/gpm-main.c	2006-04-03 16:09:39.000000000 +0200
@@ -28,6 +28,7 @@
 #include <string.h>
 #include <unistd.h>
 #include <popt.h>
+#include <powersave_dbus.h>
 
 #include <glib.h>
 #include <glib/gi18n.h>
@@ -44,6 +45,7 @@
 
 #include "gpm-manager.h"
 #include "gpm-manager-glue.h"
+#include "gpm-screensaver.h"
 
 static void gpm_exit (GpmManager *manager);
 
@@ -137,6 +139,33 @@ gpm_critical_error (const char *content)
 	gtk_main();
 }
 
+GpmManager *manager = NULL;
+
+static DBusHandlerResult
+powersave_filter_function (DBusConnection *connection, DBusMessage *message, void *data)
+{
+	const gchar *signal;
+	gchar *value;
+
+	if (dbus_message_get_type (message) != DBUS_MESSAGE_TYPE_SIGNAL)
+		return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
+
+	signal = dbus_message_get_member (message);
+	if (dbusGetMessageString(message, &value, 0) < 0) {
+		gpm_warning ("Warning: Received signal from powersave daemon with no arguments.");
+		return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
+	}
+
+	if (!strcmp (signal, "Notification")) {
+		gpm_manager_notify (manager, _("System power"), value);
+	} else if (!strcmp (signal, "Screenlock")) {
+		gpm_screensaver_lock ();
+	} else
+		return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
+
+	return DBUS_HANDLER_RESULT_HANDLED;
+}
+
 /** Main entry point
  *
  *  @param	argc		Number of arguments given to program
@@ -154,8 +183,8 @@ main (int argc, char *argv[])
 	DBusGConnection *session_connection;
 	gboolean         verbose = FALSE;
 	gboolean         no_daemon;
-	GpmManager      *manager = NULL;
 	GError          *error = NULL;
+	dbus_int32_t     powersave_error_code;
 
 	struct poptOption options[] = {
 		{ "no-daemon", '\0', POPT_ARG_NONE, NULL, 0,
@@ -248,6 +277,20 @@ main (int argc, char *argv[])
 
 	loop = g_main_loop_new (NULL, FALSE);
 
+	/* Tell powersave we take care of the following capabilities */
+	if ((powersave_error_code = establishConnection (CAPABILITY_NOTIFICATIONS | CAPABILITY_SCREENLOCK | CAPABILITY_BRIGHTNESS,
+							 dbus_g_connection_get_connection (system_connection))) == REPLY_SUCCESS) {
+		if (dbus_connection_add_filter (dbus_g_connection_get_connection (system_connection),
+						powersave_filter_function, NULL, NULL)) {
+			dbus_bus_add_match (dbus_g_connection_get_connection (system_connection),
+					    "type='signal',"
+					    "interface='com.novell.powersave.manager'," "path='/com/novell/powersave',",
+					    NULL);
+		} else
+			gpm_warning ("Not enough memory to add filter to dbus connection.");
+	} else
+		gpm_warning ("Could not establish connection to powersave daemon: %s.", DBus_Error_Array[powersave_error_code]);
+
 	g_main_loop_run (loop);
 
 	gpm_exit (manager);
Only in gnome-power-manager-2.14.0/src: gpm-main.c~
diff -upr gnome-power-manager-2.14.0-orig/src/gpm-manager.c gnome-power-manager-2.14.0/src/gpm-manager.c
--- gnome-power-manager-2.14.0-orig/src/gpm-manager.c	2006-03-13 20:00:04.000000000 +0100
+++ gnome-power-manager-2.14.0/src/gpm-manager.c	2006-04-03 15:04:22.000000000 +0200
@@ -39,6 +39,7 @@
 #include <gconf/gconf-client.h>
 
 #include <libgnomeui/gnome-client.h> /* for gnome_client_request_save */
+#include <powersave_dbus.h>
 
 #include "gpm-common.h"
 #include "gpm-prefs.h"
@@ -188,6 +189,12 @@ gpm_manager_is_policy_timout_valid (GpmM
 	return TRUE;
 }
 
+static gboolean
+powersave_can_suspend (void)
+{
+	return (dbusSendSimpleMessage (REQUEST_MESSAGE, "AllowedSuspendToRam") == REPLY_SUCCESS);
+}
+
 gboolean
 gpm_manager_can_suspend (GpmManager *manager,
 			 gboolean   *can,
@@ -205,13 +212,19 @@ gpm_manager_can_suspend (GpmManager *man
 
 	gconf_policy = gconf_client_get_bool (manager->priv->gconf_client,
 					      GPM_PREF_CAN_SUSPEND, NULL);
-	if ( gconf_policy && gpm_hal_can_suspend () ) {
+	if ( gconf_policy && gpm_hal_can_suspend () && powersave_can_suspend ()) {
 		*can = TRUE;
 	}
 
 	return TRUE;
 }
 
+static gboolean
+powersave_can_hibernate (void)
+{
+	return (dbusSendSimpleMessage (REQUEST_MESSAGE, "AllowedSuspendToDisk") == REPLY_SUCCESS);
+}
+
 gboolean
 gpm_manager_can_hibernate (GpmManager *manager,
 			   gboolean   *can,
@@ -229,7 +242,7 @@ gpm_manager_can_hibernate (GpmManager *m
 
 	gconf_policy = gconf_client_get_bool (manager->priv->gconf_client,
 					      GPM_PREF_CAN_HIBERNATE, NULL);
-	if ( gconf_policy && gpm_hal_can_hibernate () ) {
+	if ( gconf_policy && gpm_hal_can_hibernate () && powersave_can_hibernate ()) {
 		*can = TRUE;
 	}
 
@@ -1967,3 +1980,15 @@ gpm_manager_new (void)
 
 	return GPM_MANAGER (manager);
 }
+
+void
+gpm_manager_notify (GpmManager *manager, const gchar *title, const gchar *message)
+{
+	g_return_if_fail (GPM_IS_MANAGER (manager));
+
+	gpm_tray_icon_notify (GPM_TRAY_ICON (manager->priv->tray_icon),
+					      GPM_NOTIFY_TIMEOUT_LONG,
+					      title,
+					      NULL,
+					      message);
+}
diff -upr gnome-power-manager-2.14.0-orig/src/gpm-manager.h gnome-power-manager-2.14.0/src/gpm-manager.h
--- gnome-power-manager-2.14.0-orig/src/gpm-manager.h	2006-03-01 00:14:54.000000000 +0100
+++ gnome-power-manager-2.14.0/src/gpm-manager.h	2006-04-03 15:04:22.000000000 +0200
@@ -96,6 +96,8 @@ gboolean       gpm_manager_hibernate_dbu
 gboolean       gpm_manager_shutdown_dbus_method (GpmManager *manager,
                                              GError       **error);
 
+void           gpm_manager_notify (GpmManager *manager, const gchar *title, const gchar *message);
+
 G_END_DECLS
 
 #endif /* __GPM_MANAGER_H */
diff -upr gnome-power-manager-2.14.0-orig/src/gpm-prefs.c gnome-power-manager-2.14.0/src/gpm-prefs.c
--- gnome-power-manager-2.14.0-orig/src/gpm-prefs.c	2006-03-13 20:10:01.000000000 +0100
+++ gnome-power-manager-2.14.0/src/gpm-prefs.c	2006-04-03 15:04:22.000000000 +0200
@@ -425,6 +425,28 @@ gpm_prefs_checkbox_lock_cb (GtkWidget  *
 }
 
 static void
+gpm_system_settings_cb (GtkButton *button, gpointer user_data)
+{
+	GError *error = NULL;
+
+	if (!g_spawn_command_line_async ("gnomesu /sbin/yast2 power-management", &error)) {
+		GtkWidget *dialog;
+
+		dialog = gtk_message_dialog_new_with_markup (NULL,
+							     GTK_DIALOG_MODAL,
+							     GTK_MESSAGE_ERROR,
+							     GTK_BUTTONS_CLOSE,
+							     "<span size='larger'><b>%s</b></span>",
+							     GPM_NAME);
+		gtk_message_dialog_format_secondary_markup (GTK_MESSAGE_DIALOG (dialog), error->message);
+		gtk_dialog_run (GTK_DIALOG (dialog));
+
+		gtk_widget_destroy (dialog);
+		g_error_free (error);
+	}
+}
+
+static void
 gpm_prefs_setup_checkbox (GtkWidget *widget,
 			  char	    *gpm_pref_key)
 {
@@ -731,6 +753,12 @@ gpm_prefs_create (void)
 		widget = glade_xml_get_widget (glade_xml, "gpm_notebook");
 		gtk_notebook_remove_page (GTK_NOTEBOOK(widget), 1);
 	}
+
+	/* setup system settings button */
+	widget = glade_xml_get_widget (glade_xml, "button_system_settings");
+	g_signal_connect (G_OBJECT (widget), "clicked",
+			  G_CALLBACK (gpm_system_settings_cb), NULL);
+
 	return main_window;
 }
 
diff -upr gnome-power-manager-2.14.0-orig/src/Makefile.am gnome-power-manager-2.14.0/src/Makefile.am
--- gnome-power-manager-2.14.0-orig/src/Makefile.am	2006-03-07 00:37:27.000000000 +0100
+++ gnome-power-manager-2.14.0/src/Makefile.am	2006-04-03 15:04:22.000000000 +0200
@@ -86,6 +86,7 @@ gnome_power_manager_SOURCES =				\
 	$(NULL)
 
 gnome_power_manager_LDADD =				\
+	-lpowersave_dbus				\
 	$(GLIB_LIBS)					\
 	$(GNOME_LIBS)					\
 	$(HAL_LIBS)					\
openSUSE Build Service is sponsored by