SOURCES: xfce4-session-logout_dialog.patch (NEW), xfce4-session-ubuntu_icon...

blues blues at pld-linux.org
Wed Oct 29 23:03:05 CET 2008


Author: blues                        Date: Wed Oct 29 22:03:05 2008 GMT
Module: SOURCES                       Tag: HEAD
---- Log message:
- rel.2 - session-logout_dialog patch with additional logout options and
  fresh icons. Helper session-ubuntu_icons patch added

---- Files affected:
SOURCES:
   xfce4-session-logout_dialog.patch (NONE -> 1.1)  (NEW), xfce4-session-ubuntu_icons.patch (NONE -> 1.1)  (NEW)

---- Diffs:

================================================================
Index: SOURCES/xfce4-session-logout_dialog.patch
diff -u /dev/null SOURCES/xfce4-session-logout_dialog.patch:1.1
--- /dev/null	Wed Oct 29 23:03:05 2008
+++ SOURCES/xfce4-session-logout_dialog.patch	Wed Oct 29 23:02:59 2008
@@ -0,0 +1,604 @@
+diff -Nur xfce4-session-4.4.1/settings/session/session.c xfce4-session-4.4.1.new/settings/session/session.c
+--- xfce4-session-4.4.1/settings/session/session.c	2007-04-09 19:06:35.000000000 +0200
++++ xfce4-session-4.4.1.new/settings/session/session.c	2007-09-10 15:00:27.000000000 +0200
+@@ -51,6 +51,8 @@
+ static GtkWidget    *general_chooser;
+ static GtkWidget    *general_autosave;
+ static GtkWidget    *general_prompt;
++static GtkWidget    *general_hibernate_button;
++static GtkWidget    *general_suspend_button;
+ static GtkWidget    *advanced_kde;
+ static GtkWidget    *advanced_gnome;
+ static GtkWidget    *advanced_remote;
+@@ -88,6 +90,8 @@
+     {
+       xfce_rc_write_bool_entry (rc, "AutoSave", gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (general_autosave)));
+       xfce_rc_write_bool_entry (rc, "PromptOnLogout", gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (general_prompt)));
++      xfce_rc_write_bool_entry (rc, "HibernateButton", gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (general_hibernate_button)));
++      xfce_rc_write_bool_entry (rc, "SuspendButton", gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (general_suspend_button)));
+     }
+   if (G_LIKELY (kiosk_can_security))
+     {
+@@ -124,10 +128,14 @@
+   gboolean   autosave;
+   gboolean   prompt;
+   gboolean   chooser;
++  gboolean   hibernate;
++  gboolean   suspend;
+ 
+   xfce_rc_set_group (rc, "General");
+   autosave = xfce_rc_read_bool_entry (rc, "AutoSave", FALSE);
+   prompt = xfce_rc_read_bool_entry (rc, "PromptOnLogout", TRUE);
++  hibernate = xfce_rc_read_bool_entry (rc, "HibernateButton", TRUE);
++  suspend = xfce_rc_read_bool_entry (rc, "SuspendButton", TRUE);
+   xfce_rc_set_group (rc, "Chooser");
+   chooser = xfce_rc_read_bool_entry (rc, "AlwaysDisplay", FALSE);
+ 
+@@ -181,6 +189,29 @@
+                           "depends on whether you enabled the automatic "
+                           "saving of sessions on logout or not."),
+                         NULL);
++  
++  general_hibernate_button = gtk_check_button_new_with_label (_("Show hibernate button"));
++  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (general_hibernate_button), hibernate);
++  g_signal_connect (G_OBJECT (general_hibernate_button), "toggled",
++                    G_CALLBACK (config_store), NULL);
++  gtk_box_pack_start (GTK_BOX (vbox), general_hibernate_button, FALSE, TRUE, 0);
++  gtk_tooltips_set_tip (tooltips, general_hibernate_button,
++                        _("This option adds a hibernate button to the logout dialog. "
++                          "Only enable if you known your system suspends to"
++			  "disk and resumes correctly."),
++                        NULL);
++
++  general_suspend_button = gtk_check_button_new_with_label (_("Show suspend button"));
++  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (general_suspend_button), suspend);
++  g_signal_connect (G_OBJECT (general_suspend_button), "toggled",
++                    G_CALLBACK (config_store), NULL);
++  gtk_box_pack_start (GTK_BOX (vbox), general_suspend_button, FALSE, TRUE, 0);
++  gtk_tooltips_set_tip (tooltips, general_suspend_button,
++                        _("This option adds a suspend button to the logout dialog. "
++                          "Only enable if you known your system suspends to"
++			  "RAM and resumes correctly."),
++                        NULL);
++
+ 
+   return page;
+ }
+diff -Nur xfce4-session-4.4.1/xfce4-session/main.c xfce4-session-4.4.1.new/xfce4-session/main.c
+--- xfce4-session-4.4.1/xfce4-session/main.c	2007-04-09 19:06:35.000000000 +0200
++++ xfce4-session-4.4.1.new/xfce4-session/main.c	2007-09-10 15:00:27.000000000 +0200
+@@ -61,6 +61,11 @@
+ #include <xfce4-session/xfsm-manager.h>
+ #include <xfce4-session/xfsm-startup.h>
+ 
++#include <xfce4-session/xfsm-shutdown-helper.h>
++
++
++#include <dbus/dbus.h>
++#include <dbus/dbus-glib.h>
+ 
+ void
+ setup_environment (void)
+@@ -225,8 +230,6 @@
+ int
+ main (int argc, char **argv)
+ {
+-  /* imported from xfsm-manager.c */
+-  extern gint shutdown_type;
+ 
+   xfce_textdomain (GETTEXT_PACKAGE, PACKAGE_LOCALE_DIR, "UTF-8");
+   
+@@ -248,5 +251,5 @@
+   
+   ice_cleanup ();
+ 
+-  return xfsm_shutdown (shutdown_type);
++  return xfsm_shutdown ();
+ }
+diff -Nur xfce4-session-4.4.1/xfce4-session/shutdown.c xfce4-session-4.4.1.new/xfce4-session/shutdown.c
+--- xfce4-session-4.4.1/xfce4-session/shutdown.c	2007-04-09 19:06:35.000000000 +0200
++++ xfce4-session-4.4.1.new/xfce4-session/shutdown.c	2007-09-10 15:01:21.000000000 +0200
+@@ -110,34 +110,36 @@
+   gtk_dialog_response (GTK_DIALOG (dialog), GTK_RESPONSE_OK);
+ }
+ 
+-static void
+-logout_button_clicked (GtkWidget *b, gint *shutdownType)
+-{
+-    *shutdownType = SHUTDOWN_LOGOUT;
+-
+-    gtk_dialog_response (GTK_DIALOG (shutdown_dialog), GTK_RESPONSE_OK);
+-}
++static gint shutdownType = XFSM_LOGOUT;
+ 
+ static void
+-reboot_button_clicked (GtkWidget *b, gint *shutdownType)
++logout_dialog_button_clicked (GtkWidget *b, gint *cmd)
+ {
+-    *shutdownType = SHUTDOWN_REBOOT;
++    shutdownType = *cmd;
+ 
+     gtk_dialog_response (GTK_DIALOG (shutdown_dialog), GTK_RESPONSE_OK);
+ }
+ 
+-static void
+-halt_button_clicked (GtkWidget *b, gint *shutdownType)
++struct LogoutButton
+ {
+-    *shutdownType = SHUTDOWN_HALT;
+-
+-    gtk_dialog_response (GTK_DIALOG (shutdown_dialog), GTK_RESPONSE_OK);
+-}
++    gchar * label;
++    gchar * icon;
++    gint    cmd;
++    gboolean present;
++    GtkWidget * button;
++};
++
++struct LogoutButton logout_buttons [] = {
++ { N_("Switch user"), "xfsm-switch", XFSM_SWITCH, TRUE },
++ { N_("Log out"), "xfsm-logout", XFSM_LOGOUT, TRUE },
++ { N_("Restart"), "xfsm-reboot", XFSM_REBOOT, TRUE },
++ { N_("Shut down"), "xfsm-shutdown", XFSM_SHUTDOWN, TRUE },
++ { N_("Suspend"), "xfsm-suspend", XFSM_SUSPEND, FALSE},
++ { N_("Hibernate"), "xfsm-hibernate", XFSM_HIBERNATE, FALSE},
++};
+ 
+-/*
+- */
+ gboolean
+-shutdownDialog(gint *shutdownType, gboolean *saveSession)
++shutdownDialog(gboolean *saveSession)
+ {
+   gboolean accessibility;
+   XfsmFadeout *fadeout = NULL;
+@@ -145,7 +147,9 @@
+   GtkWidget *dialog;
+   GtkWidget *label;
+   GtkWidget *dbox;
++  GtkWidget *rbox;
+   GtkWidget *hbox;
++  GtkWidget *hbox2;
+   GtkWidget *vbox;
+   GtkWidget *vbox2;
+   GtkWidget *image;
+@@ -154,14 +158,14 @@
+   GtkWidget *entry;
+   GtkWidget *hidden;
+   GtkWidget *logout_button;
+-  GtkWidget *reboot_button;
+-  GtkWidget *halt_button;
+   GtkWidget *cancel_button;
+   GtkWidget *ok_button;
+   GdkPixbuf *icon;
+   gboolean saveonexit;
+   gboolean autosave;
+   gboolean prompt;
++  gboolean have_suspend;
++  gboolean have_hibernate;
+   gint monitor;
+   gint result;
+   XfceKiosk *kiosk;
+@@ -173,9 +177,8 @@
+   GdkPixmap *screenshot_pm = NULL;
+   GdkGC *screenshot_gc;
+ #endif
+-
++  gint i;
+   g_return_val_if_fail(saveSession != NULL, FALSE);
+-  g_return_val_if_fail(shutdownType != NULL, FALSE);
+ 
+   /* destroy any previously running shutdown helper first */
+   if (shutdown_helper != NULL)
+@@ -195,13 +198,15 @@
+   saveonexit = xfce_rc_read_bool_entry (rc, "SaveOnExit", TRUE);
+   autosave = xfce_rc_read_bool_entry (rc, "AutoSave", FALSE);
+   prompt = xfce_rc_read_bool_entry (rc, "PromptOnLogout", TRUE);
++  have_suspend = xfce_rc_read_bool_entry (rc, "SuspendButton", TRUE);
++  have_hibernate = xfce_rc_read_bool_entry (rc, "HibernateButton", TRUE);
+ 
+   /* if PromptOnLogout is off, saving depends on AutoSave */
+   if (!prompt)
+     {
+       xfce_rc_close (rc);
+ 
+-      *shutdownType = SHUTDOWN_LOGOUT;
++      shutdownType = XFSM_LOGOUT;
+       *saveSession = autosave;
+ 
+       return TRUE;
+@@ -311,76 +316,43 @@
+   hbox = gtk_hbox_new (TRUE, BORDER);
+   gtk_widget_show (hbox);
+   gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
++  hbox2 = gtk_hbox_new (TRUE, BORDER);
++  gtk_widget_show (hbox2);
++  gtk_box_pack_start (GTK_BOX (vbox), hbox2, FALSE, FALSE, 0);
++  logout_buttons[4].present = have_suspend;
++  logout_buttons[5].present = have_hibernate;
+   
+-  /* logout */
+-  logout_button = gtk_button_new ();
+-  gtk_widget_show (logout_button);
+-  gtk_box_pack_start (GTK_BOX (hbox), logout_button, TRUE, TRUE, 0);
+-
+-  g_signal_connect (logout_button, "clicked", 
+-                    G_CALLBACK (logout_button_clicked), shutdownType);
+-
+-  vbox2 = gtk_vbox_new (FALSE, BORDER);
+-  gtk_container_set_border_width (GTK_CONTAINER (vbox2), BORDER);
+-  gtk_widget_show (vbox2);
+-  gtk_container_add (GTK_CONTAINER (logout_button), vbox2);
+-
+-  icon = xfce_themed_icon_load ("xfsm-logout", 32);
+-  image = gtk_image_new_from_pixbuf (icon);
+-  gtk_widget_show (image);
+-  gtk_box_pack_start (GTK_BOX (vbox2), image, FALSE, FALSE, 0);
+-  g_object_unref (icon);
+-
+-  label = gtk_label_new (_("Log Out"));
+-  gtk_widget_show (label);
+-  gtk_box_pack_start (GTK_BOX (vbox2), label, FALSE, FALSE, 0);
+-  
+-  /* reboot */
+-  reboot_button = gtk_button_new ();
+-  gtk_widget_show (reboot_button);
+-  gtk_box_pack_start (GTK_BOX (hbox), reboot_button, TRUE, TRUE, 0);
+-
+-  g_signal_connect (reboot_button, "clicked", 
+-                    G_CALLBACK (reboot_button_clicked), shutdownType);
+-
+-  vbox2 = gtk_vbox_new (FALSE, BORDER);
+-  gtk_container_set_border_width (GTK_CONTAINER (vbox2), BORDER);
+-  gtk_widget_show (vbox2);
+-  gtk_container_add (GTK_CONTAINER (reboot_button), vbox2);
+-
+-  icon = xfce_themed_icon_load ("xfsm-reboot", 32);
+-  image = gtk_image_new_from_pixbuf (icon);
+-  gtk_widget_show (image);
+-  gtk_box_pack_start (GTK_BOX (vbox2), image, FALSE, FALSE, 0);
+-  g_object_unref (icon);
+-
+-  label = gtk_label_new (_("Restart"));
+-  gtk_widget_show (label);
+-  gtk_box_pack_start (GTK_BOX (vbox2), label, FALSE, FALSE, 0);
+-  
+-  /* halt */
+-  halt_button = gtk_button_new ();
+-  gtk_widget_show (halt_button);
+-  gtk_box_pack_start (GTK_BOX (hbox), halt_button, TRUE, TRUE, 0);
+-
+-  g_signal_connect (halt_button, "clicked", 
+-                    G_CALLBACK (halt_button_clicked), shutdownType);
+-
+-  vbox2 = gtk_vbox_new (FALSE, BORDER);
+-  gtk_container_set_border_width (GTK_CONTAINER (vbox2), BORDER);
+-  gtk_widget_show (vbox2);
+-  gtk_container_add (GTK_CONTAINER (halt_button), vbox2);
+-
+-  icon = xfce_themed_icon_load ("xfsm-shutdown", 32);
+-  image = gtk_image_new_from_pixbuf (icon);
+-  gtk_widget_show (image);
+-  gtk_box_pack_start (GTK_BOX (vbox2), image, FALSE, FALSE, 0);
+-  g_object_unref (icon);
+-  
+-  label = gtk_label_new (_("Shut Down"));
+-  gtk_widget_show (label);
+-  gtk_box_pack_start (GTK_BOX (vbox2), label, FALSE, FALSE, 0);
+-  
++  for (i = 0; i < G_N_ELEMENTS (logout_buttons); i++) { 
++	  
++    if (logout_buttons[i].present == FALSE)
++       continue;	    
++    
++    logout_button = gtk_button_new ();
++    gtk_widget_show (logout_button);
++    rbox = i > G_N_ELEMENTS (logout_buttons)/2 - 1 ? hbox2 : hbox;
++    gtk_box_pack_start (GTK_BOX (rbox), logout_button, TRUE, TRUE, 0);
++
++    g_signal_connect (logout_button, "clicked", 
++  		    G_CALLBACK (logout_dialog_button_clicked), &logout_buttons[i].cmd);
++
++    vbox2 = gtk_vbox_new (FALSE, BORDER);
++    gtk_container_set_border_width (GTK_CONTAINER (vbox2), BORDER);
++    gtk_widget_show (vbox2);
++    gtk_container_add (GTK_CONTAINER (logout_button), vbox2);
++
++    icon = xfce_themed_icon_load (logout_buttons[i].icon, 32);
++    image = gtk_image_new_from_pixbuf (icon);
++    gtk_widget_show (image);
++    gtk_box_pack_start (GTK_BOX (vbox2), image, FALSE, FALSE, 0);
++    g_object_unref (icon);
++
++    label = gtk_label_new (_(logout_buttons[i].label));
++    gtk_widget_show (label);
++    gtk_box_pack_start (GTK_BOX (vbox2), label, FALSE, FALSE, 0);
++
++    logout_buttons[i].button = logout_button;
++  }
++ 
+   /* save session */
+   if (!autosave)
+     {
+@@ -406,8 +378,9 @@
+   if (!kiosk_can_shutdown || 
+       (shutdown_helper = xfsm_shutdown_helper_spawn ()) == NULL)
+     {
+-      gtk_widget_set_sensitive (reboot_button, FALSE);
+-      gtk_widget_set_sensitive (halt_button, FALSE);
++      for (i = 2; i < G_N_ELEMENTS (logout_buttons); i++) { 
++          gtk_widget_set_sensitive (logout_buttons[i].button, FALSE);
++      }
+     }
+ 
+   /* save portion of the root window covered by the dialog */
+@@ -437,7 +410,9 @@
+   gtk_widget_hide (dialog);
+ 
+   /* ask password */
+-  if (result == GTK_RESPONSE_OK && *shutdownType != SHUTDOWN_LOGOUT
++  if (result == GTK_RESPONSE_OK
++      && shutdownType != XFSM_LOGOUT
++      && shutdownType != XFSM_SWITCH
+       && xfsm_shutdown_helper_need_password (shutdown_helper))
+     {
+       gtk_widget_show (ok_button);
+@@ -533,6 +508,21 @@
+       gdk_flush ();
+     }
+ 
++  /*
++   * For suspend/hibernate perform the action but do not
++   * close the session so it is still there on resume
++   */
++  if (result == GTK_RESPONSE_OK
++		  && (shutdownType == XFSM_SUSPEND || shutdownType == XFSM_HIBERNATE)) {
++	  xfsm_shutdown_helper_send_command (shutdown_helper, shutdownType);
++	  return FALSE;
++  }
++ 
++  if (result == GTK_RESPONSE_OK && shutdownType == XFSM_SWITCH) {
++		g_spawn_command_line_sync ("gdmflexiserver --startnew", NULL, NULL, NULL, NULL);
++		return FALSE;
++  }
++
+   /* process all pending events first */
+   while (gtk_events_pending ())
+     g_main_context_iteration (NULL, FALSE);
+@@ -571,7 +561,7 @@
+ /*
+  */
+ gint
+-xfsm_shutdown(gint type)
++xfsm_shutdown(void)
+ {
+   gboolean result;
+ 
+@@ -589,7 +579,7 @@
+   sync ();
+ #endif
+ 
+-  if (type == SHUTDOWN_LOGOUT)
++  if (shutdownType == XFSM_LOGOUT)
+     return EXIT_SUCCESS;
+ 
+   if (shutdown_helper == NULL)
+@@ -598,16 +588,7 @@
+       return EXIT_FAILURE;
+     }
+ 
+-  if (type == SHUTDOWN_HALT)
+-    {
+-      result = xfsm_shutdown_helper_send_command (shutdown_helper,
+-                                                  XFSM_SHUTDOWN_POWEROFF);
+-    }
+-  else
+-    {
+-      result = xfsm_shutdown_helper_send_command (shutdown_helper,
+-                                                  XFSM_SHUTDOWN_REBOOT);
+-    }
++  result = xfsm_shutdown_helper_send_command (shutdown_helper, shutdownType);
+ 
+   xfsm_shutdown_helper_destroy (shutdown_helper);
+   shutdown_helper = NULL;
+diff -Nur xfce4-session-4.4.1/xfce4-session/shutdown.h xfce4-session-4.4.1.new/xfce4-session/shutdown.h
+--- xfce4-session-4.4.1/xfce4-session/shutdown.h	2007-04-09 19:06:35.000000000 +0200
++++ xfce4-session-4.4.1.new/xfce4-session/shutdown.h	2007-09-10 15:00:27.000000000 +0200
+@@ -24,13 +24,8 @@
+ 
+ #include <glib.h>
+ 
+-/* */
+-#define	SHUTDOWN_LOGOUT	0
+-#define SHUTDOWN_REBOOT	1
+-#define SHUTDOWN_HALT	2
+-
+ /* prototypes */
+-extern gboolean	shutdownDialog(gint *, gboolean *);
+-extern gint	xfsm_shutdown(gint);
++extern gboolean	shutdownDialog(gboolean *);
++extern gint	xfsm_shutdown(void);
+ 
+ #endif	/* !__XFSM_SHUTDOWN_H__ */
+diff -Nur xfce4-session-4.4.1/xfce4-session/xfsm-global.c xfce4-session-4.4.1.new/xfce4-session/xfsm-global.c
+--- xfce4-session-4.4.1/xfce4-session/xfsm-global.c	2007-04-09 19:06:35.000000000 +0200
++++ xfce4-session-4.4.1.new/xfce4-session/xfsm-global.c	2007-09-10 15:00:27.000000000 +0200
+@@ -46,7 +46,6 @@
+ gchar            *session_file = NULL;
+ GList            *failsafe_clients = NULL;
+ gboolean          failsafe_mode = TRUE;
+-gint              shutdown_type = SHUTDOWN_LOGOUT;
+ XfsmSplashScreen *splash_screen = NULL;
+ 
+ void
+diff -Nur xfce4-session-4.4.1/xfce4-session/xfsm-global.h xfce4-session-4.4.1.new/xfce4-session/xfsm-global.h
+--- xfce4-session-4.4.1/xfce4-session/xfsm-global.h	2007-04-09 19:06:35.000000000 +0200
++++ xfce4-session-4.4.1.new/xfce4-session/xfsm-global.h	2007-09-10 15:00:27.000000000 +0200
+@@ -47,7 +47,6 @@
+ extern gchar            *session_file;
+ extern GList            *failsafe_clients;
+ extern gboolean          failsafe_mode;
+-extern gint              shutdown_type;
+ extern XfsmSplashScreen *splash_screen;
+ 
+ 
+diff -Nur xfce4-session-4.4.1/xfce4-session/xfsm-manager.c xfce4-session-4.4.1.new/xfce4-session/xfsm-manager.c
+--- xfce4-session-4.4.1/xfce4-session/xfsm-manager.c	2007-04-09 19:06:35.000000000 +0200
++++ xfce4-session-4.4.1.new/xfce4-session/xfsm-manager.c	2007-09-10 15:00:27.000000000 +0200
+@@ -799,7 +799,7 @@
+     }
+   else
+     {
+-      if (!fast && shutdown && !shutdownDialog (&shutdown_type, &shutdown_save))
++      if (!fast && shutdown && !shutdownDialog (&shutdown_save))
+         return;
+   
+       if (!shutdown || shutdown_save)
+diff -Nur xfce4-session-4.4.1/xfce4-session/xfsm-shutdown-helper.c xfce4-session-4.4.1.new/xfce4-session/xfsm-shutdown-helper.c
+--- xfce4-session-4.4.1/xfce4-session/xfsm-shutdown-helper.c	2007-04-09 19:06:35.000000000 +0200
++++ xfce4-session-4.4.1.new/xfce4-session/xfsm-shutdown-helper.c	2007-09-10 15:00:27.000000000 +0200
+@@ -55,6 +55,12 @@
+ 
+ #ifdef HAVE_DBUS
+ #include <dbus/dbus.h>
++#define	HAL_DBUS_SERVICE		"org.freedesktop.Hal"
++#define HAL_ROOT_COMPUTER		"/org/freedesktop/Hal/devices/computer"
++#define	HAL_DBUS_INTERFACE_DEVICE	"org.freedesktop.Hal.Device"
++#define	HAL_DBUS_INTERFACE_POWER	"org.freedesktop.Hal.Device.SystemPowerManagement"
++#define	HAL_PM_CAN_SUSPEND		"power_management.can_suspend_to_ram"
++#define	HAL_PM_CAN_HIBERNATE		"power_management.can_suspend_to_disk"
+ #endif
+ 
+ #include <libxfce4util/libxfce4util.h>
+@@ -74,6 +80,17 @@
+ };
+ 
+ 
++static struct
++{ 
++  XfsmShutdownCommand command;
++  gchar * name;
++} xfsm2hal[] =
++{
++	       { XFSM_REBOOT,    "Reboot"},
++	       { XFSM_SHUTDOWN,  "Shutdown"},
++	       { XFSM_SUSPEND,   "Suspend"},
++	       { XFSM_HIBERNATE, "Hibernate"}
++};
+ 
+ static gboolean
+ xfsm_shutdown_helper_hal_check (XfsmShutdownHelper *helper)
+@@ -100,9 +117,9 @@
+    * use the org.freedesktop.Hal.Device.SystemPowerManagement
+    * interface without shutting down/rebooting now.
+    */
+-  message = dbus_message_new_method_call ("org.freedesktop.Hal",
+-                                          "/org/freedesktop/Hal/devices/computer",
+-                                          "org.freedesktop.Hal.Device.SystemPowerManagement",
++  message = dbus_message_new_method_call (HAL_DBUS_SERVICE,
++                                          HAL_ROOT_COMPUTER,
++                                          HAL_DBUS_INTERFACE_POWER,
+                                           "ThisMethodMustNotExistInHal");
+   result = dbus_connection_send_with_reply_and_block (connection, message, 2000, &error);
+   dbus_message_unref (message);
+@@ -145,42 +162,45 @@
+                                XfsmShutdownCommand command)
+ {
+ #ifdef HAVE_DBUS
+-  DBusConnection *connection;
+-  DBusMessage    *message;
+-  DBusMessage    *result;
+-  DBusError       error;
+-
+-  /* initialize the error */
+-  dbus_error_init (&error);
+-
+-  /* connect to the system message bus */
+-  connection = dbus_bus_get (DBUS_BUS_SYSTEM, &error);
+-  if (G_UNLIKELY (connection == NULL))
+-    {
+-      g_warning (G_STRLOC ": Failed to connect to the system message bus: %s", error.message);
+-      dbus_error_free (&error);
+-      return FALSE;
+-    }
+-
+-  /* send the appropriate message to HAL, telling it to shutdown or reboot the system */
+-  message = dbus_message_new_method_call ("org.freedesktop.Hal",
+-                                          "/org/freedesktop/Hal/devices/computer",
+-                                          "org.freedesktop.Hal.Device.SystemPowerManagement",
+-                                          (command == XFSM_SHUTDOWN_REBOOT) ? "Reboot" : "Shutdown");
+-  result = dbus_connection_send_with_reply_and_block (connection, message, 2000, &error);
+-  dbus_message_unref (message);
+-
+-  /* check if we received a result */
+-  if (G_UNLIKELY (result == NULL))
+-    {
+-      g_warning (G_STRLOC ": Failed to contact HAL: %s", error.message);
+-      dbus_error_free (&error);
+-      return FALSE;
+-    }
+-
+-  /* pretend that we succeed */
+-  dbus_message_unref (result);
+-  return TRUE;
++    DBusConnection *connection;
++    DBusMessage *method;
++    DBusMessage *result;
++    DBusError derror;
++    gint i;
++    gchar *methodname;
++    dbus_int32_t wakeup = 0;
++    
++    for (i = 0; i < G_N_ELEMENTS (xfsm2hal); i++) {
++      if ( xfsm2hal[i].command == command ) {
++        methodname = xfsm2hal[i].name;
++      }
++     }
++   
++    dbus_error_init(&derror);
++    
++    connection = dbus_bus_get(DBUS_BUS_SYSTEM, &derror);
++
++    if (connection == NULL)
++        return FALSE;
++    
++    method = dbus_message_new_method_call(HAL_DBUS_SERVICE,
++		                          HAL_ROOT_COMPUTER,
++					  HAL_DBUS_INTERFACE_POWER,
++					  methodname);
++
++    if (command == XFSM_SUSPEND) {
++	dbus_message_append_args (method, DBUS_TYPE_INT32, &wakeup, DBUS_TYPE_INVALID);
++     }
++    
++    result = dbus_connection_send_with_reply_and_block(connection, method, 2000, &derror);
++    
++    dbus_message_unref(method);
++    
++    if (result == NULL)
++	return FALSE;
++    
++    dbus_message_unref(result);
++    return TRUE;
+ #else
+   return FALSE;
+ #endif
+diff -Nur xfce4-session-4.4.1/xfce4-session/xfsm-shutdown-helper.h xfce4-session-4.4.1.new/xfce4-session/xfsm-shutdown-helper.h
+--- xfce4-session-4.4.1/xfce4-session/xfsm-shutdown-helper.h	2007-04-09 19:06:35.000000000 +0200
++++ xfce4-session-4.4.1.new/xfce4-session/xfsm-shutdown-helper.h	2007-09-10 15:00:27.000000000 +0200
+@@ -27,8 +27,12 @@
+ 
<<Diff was trimmed, longer than 597 lines>>


More information about the pld-cvs-commit mailing list