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) \