[Goodies-commits] r7158 - in xfce4-power-manager/trunk: . libxfpm settings src

Ali Abdallah aliov at xfce.org
Fri Apr 10 21:29:14 CEST 2009


Author: aliov
Date: 2009-04-10 19:29:14 +0000 (Fri, 10 Apr 2009)
New Revision: 7158

Modified:
   xfce4-power-manager/trunk/ChangeLog
   xfce4-power-manager/trunk/configure.ac.in
   xfce4-power-manager/trunk/libxfpm/xfpm-common.c
   xfce4-power-manager/trunk/settings/xfpm-settings.c
   xfce4-power-manager/trunk/settings/xfpm-settings.glade
   xfce4-power-manager/trunk/src/xfpm-button-hal.c
   xfce4-power-manager/trunk/src/xfpm-button-xf86.c
   xfce4-power-manager/trunk/src/xfpm-button.c
   xfce4-power-manager/trunk/src/xfpm-config.h
   xfce4-power-manager/trunk/src/xfpm-engine.c
   xfce4-power-manager/trunk/src/xfpm-enum-glib.h
   xfce4-power-manager/trunk/src/xfpm-enum.h
   xfce4-power-manager/trunk/src/xfpm-manager.c
   xfce4-power-manager/trunk/src/xfpm-session.c
   xfce4-power-manager/trunk/src/xfpm-session.h
   xfce4-power-manager/trunk/src/xfpm-shutdown.c
   xfce4-power-manager/trunk/src/xfpm-shutdown.h
   xfce4-power-manager/trunk/src/xfpm-xfconf.c
Log:
Added handler for power button+added option to ask the session manager to its show the exit dialog

Modified: xfce4-power-manager/trunk/ChangeLog
===================================================================
--- xfce4-power-manager/trunk/ChangeLog	2009-04-10 17:54:03 UTC (rev 7157)
+++ xfce4-power-manager/trunk/ChangeLog	2009-04-10 19:29:14 UTC (rev 7158)
@@ -1,4 +1,7 @@
 
+2009-04-10 21:29 Ali aliov at xfce.org 
+	 * : Added handler for power button+added option to ask the session manager to its show the exit dialog
+
 2009-04-10 19:53 Ali aliov at xfce.org 
 	 * : Change the session restart style to if running when we are exiting
 

Modified: xfce4-power-manager/trunk/configure.ac.in
===================================================================
--- xfce4-power-manager/trunk/configure.ac.in	2009-04-10 17:54:03 UTC (rev 7157)
+++ xfce4-power-manager/trunk/configure.ac.in	2009-04-10 19:29:14 UTC (rev 7158)
@@ -98,6 +98,19 @@
 AC_SUBST([DPMS_LIBS])
 
 #=======================================================#
+#      Check for XF86_XK_Suspend && Hibernate           #
+#=======================================================#
+
+AC_CHECK_DECL(XF86XK_Suspend,have_XF86XK_Suspend=1,have_XF86XK_Suspend=0,[#include <X11/XF86keysym.h>])
+if test "x${ac_cv_have_decl_XF86XK_Suspend}" != "xno"; then
+  AC_DEFINE(HAVE_XF86XK_SUSPEND, 1, [Define if XF86XK_Suspend is available])
+fi
+AC_CHECK_DECL(XF86XK_Hibernate,have_XF86XK_Hibernate=1,have_XF86XK_Hibernate=0,[#include <X11/XF86keysym.h>])
+if test "x${ac_cv_have_decl_XF86XK_Hibernate}" != "xno"; then
+  AC_DEFINE(HAVE_XF86XK_HIBERNATE, 1, [Define if XF86XK_Hibernate is available])
+fi
+
+#=======================================================#
 #                 Panel plugins ?                       #
 #=======================================================#
 AC_ARG_ENABLE([panel_plugins],

Modified: xfce4-power-manager/trunk/libxfpm/xfpm-common.c
===================================================================
--- xfce4-power-manager/trunk/libxfpm/xfpm-common.c	2009-04-10 17:54:03 UTC (rev 7157)
+++ xfce4-power-manager/trunk/libxfpm/xfpm-common.c	2009-04-10 19:29:14 UTC (rev 7158)
@@ -77,6 +77,8 @@
 	return "Hibernate";
     else if ( val == 3)
 	return "Shutdown";
+    else if ( val == 4)
+	return "Ask";
     
     return "Invalid";
 }
@@ -89,8 +91,10 @@
 	return 1;
     else if  (xfpm_strequal("Hibernate", string) )
 	return 2;
-    else if (xfpm_strequal("Shutdown", string) )
+    else if (xfpm_strequal ("Shutdown", string) )
 	return 3;
+    else if (xfpm_strequal ("Ask", string) )
+	return 4;
 	
     return -1; /* error here */
 }

Modified: xfce4-power-manager/trunk/settings/xfpm-settings.c
===================================================================
--- xfce4-power-manager/trunk/settings/xfpm-settings.c	2009-04-10 17:54:03 UTC (rev 7157)
+++ xfce4-power-manager/trunk/settings/xfpm-settings.c	2009-04-10 19:29:14 UTC (rev 7158)
@@ -152,6 +152,30 @@
 }
 
 static void
+set_hibernate_changed_cb (GtkWidget *w, XfconfChannel *channel)
+{
+    GtkTreeModel     *model;
+    GtkTreeIter       selected_row;
+    gint value = 0;
+    
+    if (!gtk_combo_box_get_active_iter (GTK_COMBO_BOX (w), &selected_row))
+	return;
+	
+    model = gtk_combo_box_get_model (GTK_COMBO_BOX(w));
+   
+    gtk_tree_model_get(model,
+                       &selected_row,
+                       1,
+                       &value,
+                       -1);
+    
+    if (!xfconf_channel_set_string (channel, HIBERNATE_SWITCH_CFG, xfpm_int_to_shutdown_string(value) ) )
+    {
+	g_critical ("Cannot set value for property %s\n", HIBERNATE_SWITCH_CFG);
+    }
+}
+
+static void
 power_save_toggled_cb (GtkWidget *w, XfconfChannel *channel)
 {
     gboolean val = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(w));
@@ -812,6 +836,9 @@
     gtk_list_store_append (list_store, &iter);
     gtk_list_store_set (list_store, &iter, 0, _("Shutdown"), 1, 3, -1);
     
+     gtk_list_store_append (list_store, &iter);
+    gtk_list_store_set (list_store, &iter, 0, _("Ask"), 1, 4, -1);
+    
     g_signal_connect (power, "changed",
 		      G_CALLBACK(set_power_changed_cb), channel);
     
@@ -839,7 +866,65 @@
 
     g_free (default_power_value);
     
+    /*
+     * Hibernate button
+     */
+    list_store = gtk_list_store_new (2, G_TYPE_STRING, G_TYPE_INT);
+    GtkWidget *hibernate = glade_xml_get_widget (xml, "hibernate-combox");
+    if (!user_privilege )
+    {
+	gtk_widget_set_sensitive (hibernate, FALSE);
+	gtk_widget_set_tooltip_text (hibernate, _("Hibernate and suspend operations not permitted"));
+    }
+    
+    gtk_combo_box_set_model (GTK_COMBO_BOX(hibernate), GTK_TREE_MODEL(list_store));
 
+    gtk_list_store_append (list_store, &iter);
+    gtk_list_store_set (list_store, &iter, 0, _("Nothing"), 1, 0, -1);
+    
+    if ( can_suspend )
+    {
+	gtk_list_store_append (list_store, &iter);
+	gtk_list_store_set (list_store, &iter, 0, _("Suspend"), 1, 1, -1);
+    }
+    
+    if ( can_hibernate )
+    {
+	gtk_list_store_append (list_store, &iter);
+	gtk_list_store_set (list_store, &iter, 0, _("Hibernate"), 1, 2, -1);
+    }
+    
+    gtk_list_store_append (list_store, &iter);
+    gtk_list_store_set (list_store, &iter, 0, _("Ask"), 1, 4, -1);
+    
+    g_signal_connect (hibernate, "changed",
+		      G_CALLBACK(set_hibernate_changed_cb), channel);
+    
+    gchar *default_hibernate_value = xfconf_channel_get_string (channel, HIBERNATE_SWITCH_CFG, "Nothing");
+    gint   hibernate_val_int = xfpm_shutdown_string_to_int (default_hibernate_value );
+    
+    if ( G_UNLIKELY (hibernate_val_int == -1) ) 
+    {
+	g_warning ("Invalid value %s for property %s\n", default_hibernate_value, POWER_SWITCH_CFG);
+	hibernate_val_int = 0;
+    }
+    for ( valid = gtk_tree_model_get_iter_first (GTK_TREE_MODEL (list_store), &iter);
+	      valid;
+	      valid = gtk_tree_model_iter_next (GTK_TREE_MODEL (list_store), &iter) )
+    {
+	gint list_value;
+	gtk_tree_model_get (GTK_TREE_MODEL (list_store), &iter,
+				1, &list_value, -1);
+	if ( hibernate_val_int == list_value )
+	{
+	    gtk_combo_box_set_active_iter (GTK_COMBO_BOX (hibernate), &iter);
+	    break;
+	}
+    }
+
+    g_free (default_hibernate_value);
+    
+
     /*
      * Sleep button 
      */
@@ -867,6 +952,10 @@
 	gtk_list_store_append (list_store, &iter);
 	gtk_list_store_set (list_store, &iter, 0, _("Hibernate"), 1, 2, -1);
     }
+    
+     gtk_list_store_append (list_store, &iter);
+    gtk_list_store_set (list_store, &iter, 0, _("Ask"), 1, 4, -1);
+    
     g_signal_connect (sleep, "changed",
 		      G_CALLBACK(set_sleep_changed_cb), channel);
     

Modified: xfce4-power-manager/trunk/settings/xfpm-settings.glade
===================================================================
--- xfce4-power-manager/trunk/settings/xfpm-settings.glade	2009-04-10 17:54:03 UTC (rev 7157)
+++ xfce4-power-manager/trunk/settings/xfpm-settings.glade	2009-04-10 19:29:14 UTC (rev 7158)
@@ -57,7 +57,7 @@
                                     <child>
                                       <widget class="GtkTable" id="table3">
                                         <property name="visible">True</property>
-                                        <property name="n_rows">3</property>
+                                        <property name="n_rows">4</property>
                                         <property name="n_columns">2</property>
                                         <property name="column_spacing">10</property>
                                         <property name="row_spacing">10</property>
@@ -139,9 +139,9 @@
                                           <widget class="GtkHBox" id="hbox3">
                                             <property name="visible">True</property>
                                             <child>
-                                              <widget class="GtkLabel" id="label3">
+                                              <widget class="GtkLabel" id="label4">
                                                 <property name="visible">True</property>
-                                                <property name="label" translatable="yes">When sleep button is pressed:</property>
+                                                <property name="label" translatable="yes">When hibernate button is pressed:</property>
                                               </widget>
                                               <packing>
                                                 <property name="expand">False</property>
@@ -158,7 +158,7 @@
                                           <widget class="GtkHBox" id="hbox4">
                                             <property name="visible">True</property>
                                             <child>
-                                              <widget class="GtkComboBox" id="sleep-combox">
+                                              <widget class="GtkComboBox" id="hibernate-combox">
                                                 <property name="visible">True</property>
                                                 <property name="items" translatable="yes">Nothing</property>
                                               </widget>
@@ -175,6 +175,46 @@
                                             <property name="bottom_attach">3</property>
                                           </packing>
                                         </child>
+                                        <child>
+                                          <widget class="GtkHBox" id="hbox5">
+                                            <property name="visible">True</property>
+                                            <child>
+                                              <widget class="GtkLabel" id="label3">
+                                                <property name="visible">True</property>
+                                                <property name="label" translatable="yes">When sleep button is pressed:</property>
+                                              </widget>
+                                              <packing>
+                                                <property name="expand">False</property>
+                                                <property name="position">0</property>
+                                              </packing>
+                                            </child>
+                                          </widget>
+                                          <packing>
+                                            <property name="top_attach">3</property>
+                                            <property name="bottom_attach">4</property>
+                                          </packing>
+                                        </child>
+                                        <child>
+                                          <widget class="GtkHBox" id="hbox6">
+                                            <property name="visible">True</property>
+                                            <child>
+                                              <widget class="GtkComboBox" id="sleep-combox">
+                                                <property name="visible">True</property>
+                                                <property name="items" translatable="yes">Nothing</property>
+                                              </widget>
+                                              <packing>
+                                                <property name="expand">False</property>
+                                                <property name="position">0</property>
+                                              </packing>
+                                            </child>
+                                          </widget>
+                                          <packing>
+                                            <property name="left_attach">1</property>
+                                            <property name="right_attach">2</property>
+                                            <property name="top_attach">3</property>
+                                            <property name="bottom_attach">4</property>
+                                          </packing>
+                                        </child>
                                       </widget>
                                       <packing>
                                         <property name="expand">False</property>
@@ -982,7 +1022,7 @@
             <property name="visible">True</property>
             <child>
               <widget class="GtkButton" id="help-button">
-                <property name="label" translatable="no">gtk-help</property>
+                <property name="label">gtk-help</property>
                 <property name="response_id">-11</property>
                 <property name="visible">True</property>
                 <property name="can_focus">True</property>
@@ -997,7 +1037,7 @@
             </child>
             <child>
               <widget class="GtkButton" id="close-button">
-                <property name="label" translatable="no">gtk-close</property>
+                <property name="label">gtk-close</property>
                 <property name="response_id">-7</property>
                 <property name="visible">True</property>
                 <property name="can_focus">True</property>

Modified: xfce4-power-manager/trunk/src/xfpm-button-hal.c
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-button-hal.c	2009-04-10 17:54:03 UTC (rev 7157)
+++ xfce4-power-manager/trunk/src/xfpm-button-hal.c	2009-04-10 19:29:14 UTC (rev 7158)
@@ -69,22 +69,29 @@
     if ( !xfpm_strequal (condition, "ButtonPressed") )
 	return;
 
-    if ( xfpm_strequal (detail, "power")  && bt->priv->keys & POWER_KEY )
+    TRACE ("Emitting signal button press condition %s detail %s", condition, detail);
+
+    if ( xfpm_strequal (detail, "power")  && !bt->priv->keys & POWER_KEY )
     {
 	TRACE ("Emitting signal button press condition %s detail %s", condition, detail);
 	g_signal_emit (G_OBJECT (bt), signals [HAL_BUTTON_PRESSED], 0, BUTTON_POWER_OFF);
     }
-    else if ( xfpm_strequal (detail, "sleep")  && bt->priv->keys & SLEEP_KEY )
+    else if ( xfpm_strequal (detail, "sleep")  && !bt->priv->keys & SLEEP_KEY )
     {
 	TRACE ("Emitting signal button press condition %s detail %s", condition, detail);
 	g_signal_emit (G_OBJECT (bt), signals [HAL_BUTTON_PRESSED], 0, BUTTON_SLEEP);
     }
-    else if ( xfpm_strequal (detail, "brightness-up")  && bt->priv->keys & BRIGHTNESS_KEY )
+    else if ( xfpm_strequal (detail, "hibernate") && !bt->priv->keys & HIBERNATE_KEY )
     {
 	TRACE ("Emitting signal button press condition %s detail %s", condition, detail);
+	g_signal_emit (G_OBJECT (bt), signals [HAL_BUTTON_PRESSED], 0, BUTTON_HIBERNATE);
+    }
+    else if ( xfpm_strequal (detail, "brightness-up")  && !bt->priv->keys & BRIGHTNESS_KEY )
+    {
+	TRACE ("Emitting signal button press condition %s detail %s", condition, detail);
 	g_signal_emit (G_OBJECT (bt), signals [HAL_BUTTON_PRESSED], 0, BUTTON_MON_BRIGHTNESS_UP);
     }
-    else if ( xfpm_strequal (detail, "brightness-down")  && bt->priv->keys & BRIGHTNESS_KEY )
+    else if ( xfpm_strequal (detail, "brightness-down")  && !bt->priv->keys & BRIGHTNESS_KEY )
     {
 	TRACE ("Emitting signal button press condition %s detail %s", condition, detail);
 	g_signal_emit (G_OBJECT (bt), signals [HAL_BUTTON_PRESSED], 0, BUTTON_MON_BRIGHTNESS_DOWN);

Modified: xfce4-power-manager/trunk/src/xfpm-button-xf86.c
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-button-xf86.c	2009-04-10 17:54:03 UTC (rev 7157)
+++ xfce4-power-manager/trunk/src/xfpm-button-xf86.c	2009-04-10 19:29:14 UTC (rev 7158)
@@ -185,6 +185,16 @@
     if ( xfpm_button_xf86_xevent_key (button, XF86XK_PowerOff, BUTTON_POWER_OFF) )
 	button->priv->mapped_buttons |= POWER_KEY;
     
+#ifdef HAVE_XF86XK_HIBERNATE
+    if ( xfpm_button_xf86_xevent_key (button, XF86XK_Hibernate, BUTTON_HIBERNATE) )
+	button->priv->mapped_buttons |= HIBERNATE_KEY;
+#endif 
+
+#ifdef HAVE_XF86XK_SUSPEND
+    if ( xfpm_button_xf86_xevent_key (button, XF86XK_Suspend, BUTTON_SLEEP) )
+	button->priv->mapped_buttons |= SLEEP_KEY;
+#endif 
+
     if ( xfpm_button_xf86_xevent_key (button, XF86XK_Sleep, BUTTON_SLEEP) )
 	button->priv->mapped_buttons |= SLEEP_KEY;
 	

Modified: xfce4-power-manager/trunk/src/xfpm-button.c
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-button.c	2009-04-10 17:54:03 UTC (rev 7157)
+++ xfce4-power-manager/trunk/src/xfpm-button.c	2009-04-10 19:29:14 UTC (rev 7158)
@@ -68,7 +68,7 @@
 static void
 xfpm_button_xf86_emit_signal (XfpmButton *button, XfpmButtonKey key)
 {
-    if ( key == BUTTON_LID_CLOSED || key == BUTTON_POWER_OFF || key == BUTTON_SLEEP )
+    if ( key == BUTTON_LID_CLOSED || key == BUTTON_POWER_OFF || key == BUTTON_SLEEP || key == BUTTON_HIBERNATE )
     {
 	if ( g_timer_elapsed (button->priv->timer, NULL) > SLEEP_KEY_TIMEOUT )
 	{
@@ -122,7 +122,6 @@
 xfpm_button_init (XfpmButton *button)
 {
     guint8 xf86_mapped;
-    guint8 hal_keys = 0;
     gboolean only_lid = FALSE;
     
     button->priv = XFPM_BUTTON_GET_PRIVATE (button);
@@ -134,13 +133,12 @@
 
     button->priv->hal = xfpm_button_hal_new ();
     
-    if ( xf86_mapped & SLEEP_KEY && xf86_mapped & POWER_KEY && xf86_mapped & BRIGHTNESS_KEY )
+    if ( xf86_mapped & SLEEP_KEY && xf86_mapped & POWER_KEY && 
+	 xf86_mapped & BRIGHTNESS_KEY && xf86_mapped & HIBERNATE_KEY )
 	only_lid = TRUE;
-	
-    hal_keys = ~xf86_mapped;
+
+    xfpm_button_hal_get_keys (button->priv->hal, only_lid, xf86_mapped);
     
-    xfpm_button_hal_get_keys (button->priv->hal, only_lid, hal_keys);
-    
     g_signal_connect (button->priv->xf86, "xf86-button-pressed",
 		      G_CALLBACK (xfpm_button_xf86_button_pressed_cb), button);
 		      

Modified: xfce4-power-manager/trunk/src/xfpm-config.h
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-config.h	2009-04-10 17:54:03 UTC (rev 7157)
+++ xfce4-power-manager/trunk/src/xfpm-config.h	2009-04-10 19:29:14 UTC (rev 7158)
@@ -43,8 +43,9 @@
 
 #define 	LID_SWITCH_ON_AC_CFG        "/xfce4-power-manager/lid-action-on-ac"
 #define 	LID_SWITCH_ON_BATTERY_CFG   "/xfce4-power-manager/lid-action-on-battery"
+#define 	POWER_SWITCH_CFG            "/xfce4-power-manager/power-switch-action"
+#define         HIBERNATE_SWITCH_CFG        "/xfce4-power-manager/hibernate-switch-action"
 #define 	SLEEP_SWITCH_CFG            "/xfce4-power-manager/sleep-switch-action"
-#define 	POWER_SWITCH_CFG            "/xfce4-power-manager/power-switch-action"
 
 #define 	GENERAL_NOTIFICATION_CFG    "/xfce4-power-manager/general-notification"
 

Modified: xfce4-power-manager/trunk/src/xfpm-engine.c
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-engine.c	2009-04-10 17:54:03 UTC (rev 7157)
+++ xfce4-power-manager/trunk/src/xfpm-engine.c	2009-04-10 19:29:14 UTC (rev 7158)
@@ -218,7 +218,7 @@
 	return;
     }
     
-    if ( type == BUTTON_POWER_OFF || type == BUTTON_SLEEP )
+    if ( type == BUTTON_POWER_OFF || type == BUTTON_SLEEP || type == BUTTON_HIBERNATE )
 	shutdown = xfpm_xfconf_get_property_enum (engine->priv->conf, 
 					          type == BUTTON_POWER_OFF ? POWER_SWITCH_CFG :
 					          SLEEP_SWITCH_CFG );
@@ -228,7 +228,10 @@
 					          LID_SWITCH_ON_BATTERY_CFG :
 					          LID_SWITCH_ON_AC_CFG);
 	
-    xfpm_engine_shutdown_request (engine, shutdown, FALSE);
+    if ( shutdown == XFPM_ASK )
+	xfpm_shutdown_ask (engine->priv->shutdown);
+    else
+	xfpm_engine_shutdown_request (engine, shutdown, FALSE);
 }
 
 static void

Modified: xfce4-power-manager/trunk/src/xfpm-enum-glib.h
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-enum-glib.h	2009-04-10 17:54:03 UTC (rev 7157)
+++ xfce4-power-manager/trunk/src/xfpm-enum-glib.h	2009-04-10 19:29:14 UTC (rev 7158)
@@ -32,7 +32,8 @@
     XFPM_DO_NOTHING,
     XFPM_DO_SUSPEND,
     XFPM_DO_HIBERNATE,
-    XFPM_DO_SHUTDOWN
+    XFPM_DO_SHUTDOWN,
+    XFPM_ASK
     
 } XfpmShutdownRequest;
 
@@ -51,6 +52,7 @@
 typedef enum
 {
     BUTTON_POWER_OFF,
+    BUTTON_HIBERNATE,
     BUTTON_SLEEP,
     BUTTON_MON_BRIGHTNESS_UP,
     BUTTON_MON_BRIGHTNESS_DOWN,

Modified: xfce4-power-manager/trunk/src/xfpm-enum.h
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-enum.h	2009-04-10 17:54:03 UTC (rev 7157)
+++ xfce4-power-manager/trunk/src/xfpm-enum.h	2009-04-10 19:29:14 UTC (rev 7158)
@@ -51,7 +51,8 @@
     LID_KEY   		= (1 << 0),
     BRIGHTNESS_KEY	= (1 << 1),
     SLEEP_KEY 		= (1 << 2),
-    POWER_KEY 		= (1 << 3)
+    HIBERNATE_KEY	= (1 << 3),
+    POWER_KEY 		= (1 << 4)
     
 } XfpmKeys;
 

Modified: xfce4-power-manager/trunk/src/xfpm-manager.c
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-manager.c	2009-04-10 17:54:03 UTC (rev 7157)
+++ xfce4-power-manager/trunk/src/xfpm-manager.c	2009-04-10 19:29:14 UTC (rev 7158)
@@ -141,7 +141,6 @@
 
     xfpm_dbus_release_name (dbus_g_connection_get_connection(manager->priv->session_bus),
 			    "org.freedesktop.PowerManagement");
-				  
 }
 
 static gboolean

Modified: xfce4-power-manager/trunk/src/xfpm-session.c
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-session.c	2009-04-10 17:54:03 UTC (rev 7157)
+++ xfce4-power-manager/trunk/src/xfpm-session.c	2009-04-10 19:29:14 UTC (rev 7158)
@@ -29,6 +29,8 @@
 #include <glib.h>
 #include <gtk/gtk.h>
 
+#include <dbus/dbus-glib.h>
+
 #include <libxfce4util/libxfce4util.h>
 #include <libxfcegui4/libxfcegui4.h>
 
@@ -174,3 +176,43 @@
     
     client_session_set_restart_style (session->priv->client, SESSION_RESTART_IF_RUNNING);
 }
+
+// Currently we just spawn xfce4-session-logout, FIXME: change this
+void xfpm_session_ask_shutdown (XfpmSession *session)
+{
+    DBusGConnection *bus;
+    DBusGProxy *proxy;
+    GError *error = NULL;
+    gboolean allow_save = TRUE;
+    gint ask = 0;
+    
+    bus = dbus_g_bus_get (DBUS_BUS_SESSION, NULL);
+    
+    proxy = dbus_g_proxy_new_for_name (bus,
+				       "org.xfce.SessionManager",
+                                       "/org/xfce/SessionManager",
+                                       "org.xfce.Session.Manager");
+				       
+    if ( !proxy )
+    {
+	g_critical ("Unable to create proxy for xfce session manager");
+	goto out;
+    }
+	
+    dbus_g_proxy_call (proxy, "Shutdown", &error,
+		       G_TYPE_UINT, ask,
+		       G_TYPE_BOOLEAN, allow_save,
+		       G_TYPE_INVALID,
+		       G_TYPE_INVALID);
+		       
+    if ( error )
+    {
+	g_warning ("%s", error->message);
+	g_error_free (error);
+    }
+    
+    g_object_unref (proxy);
+out:
+    dbus_g_connection_unref (bus);
+
+}

Modified: xfce4-power-manager/trunk/src/xfpm-session.h
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-session.h	2009-04-10 17:54:03 UTC (rev 7157)
+++ xfce4-power-manager/trunk/src/xfpm-session.h	2009-04-10 19:29:14 UTC (rev 7158)
@@ -55,6 +55,8 @@
 /* This is used to change the restart Style */
 void				 xfpm_session_quit	      (XfpmSession *session);
 
+void				 xfpm_session_ask_shutdown    (XfpmSession *session);
+
 G_END_DECLS
 
 #endif /* __XFPM_SESSION_H */

Modified: xfce4-power-manager/trunk/src/xfpm-shutdown.c
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-shutdown.c	2009-04-10 17:54:03 UTC (rev 7157)
+++ xfce4-power-manager/trunk/src/xfpm-shutdown.c	2009-04-10 19:29:14 UTC (rev 7158)
@@ -40,6 +40,7 @@
 
 #include "libxfpm/xfpm-string.h"
 #include "xfpm-shutdown.h"
+#include "xfpm-session.h"
 #include "xfpm-errors.h"
 
 #define DUPLICATE_SHUTDOWN_REQUEST 8.0f
@@ -61,6 +62,7 @@
     DBusGConnection *bus;
     HalMonitor      *monitor;
 
+    XfpmSession     *session;
     gboolean         connected;
     gboolean         can_suspend;
     gboolean         can_hibernate;
@@ -200,6 +202,8 @@
     
     shutdown->priv->bus = dbus_g_bus_get (DBUS_BUS_SYSTEM, &error);
     
+    shutdown->priv->session = xfpm_session_new ();
+    
     if ( error )
     {
 	g_critical ("Unable to get system bus %s.", error->message);
@@ -253,6 +257,8 @@
     if ( shutdown->priv->monitor )
 	g_object_unref (shutdown->priv->monitor);
 	
+    g_object_unref (shutdown->priv->session);
+	
     G_OBJECT_CLASS(xfpm_shutdown_parent_class)->finalize(object);
 }
 
@@ -459,6 +465,13 @@
     g_signal_emit (G_OBJECT (shutdown), signals [WAKING_UP], 0);
 }
 
+void xfpm_shutdown_ask (XfpmShutdown *shutdown)
+{
+    g_return_if_fail (XFPM_IS_SHUTDOWN (shutdown));
+    
+    xfpm_session_ask_shutdown (shutdown->priv->session);
+}
+
 void xfpm_shutdown_reload (XfpmShutdown *shutdown)
 {
     g_return_if_fail (XFPM_IS_SHUTDOWN (shutdown));

Modified: xfce4-power-manager/trunk/src/xfpm-shutdown.h
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-shutdown.h	2009-04-10 17:54:03 UTC (rev 7157)
+++ xfce4-power-manager/trunk/src/xfpm-shutdown.h	2009-04-10 19:29:14 UTC (rev 7158)
@@ -71,6 +71,8 @@
 void                      xfpm_suspend                  (XfpmShutdown *shutdown,
 							 GError **error);
 
+void                      xfpm_shutdown_ask             (XfpmShutdown *shutdown);
+
 void			  xfpm_shutdown_reload          (XfpmShutdown *shutdown);
 
 G_END_DECLS

Modified: xfce4-power-manager/trunk/src/xfpm-xfconf.c
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-xfconf.c	2009-04-10 17:54:03 UTC (rev 7157)
+++ xfce4-power-manager/trunk/src/xfpm-xfconf.c	2009-04-10 19:29:14 UTC (rev 7158)
@@ -52,6 +52,7 @@
     XfconfChannel 	*channel;
     
     XfpmShutdownRequest  power_button;
+    XfpmShutdownRequest  hibernate_button;
     XfpmShutdownRequest  sleep_button;
     XfpmShutdownRequest  lid_button_ac;
     XfpmShutdownRequest  lid_button_battery;
@@ -132,6 +133,18 @@
 	else
 	    conf->priv->power_button = xfpm_shutdown_string_to_int (str);
     }
+    else if ( xfpm_strequal (property, HIBERNATE_SWITCH_CFG ) )
+    {
+	str = g_value_get_string (value);
+	val = xfpm_shutdown_string_to_int (str);
+	if ( G_UNLIKELY (val == -1) )
+	{
+	    g_warning ("Invalid value %s fpr property %s, using default\n", str, HIBERNATE_SWITCH_CFG);
+	    conf->priv->hibernate_button = XFPM_DO_NOTHING;
+	}
+	else
+	    conf->priv->hibernate_button = xfpm_shutdown_string_to_int (str);
+    }
     else if ( xfpm_strequal (property, LID_SWITCH_ON_AC_CFG) )
     {
 	str = g_value_get_string (value);
@@ -294,6 +307,19 @@
     
     g_free (str);
     
+    str = xfconf_channel_get_string (conf->priv->channel, HIBERNATE_SWITCH_CFG, "Nothing");
+    val = xfpm_shutdown_string_to_int (str);
+    
+    if ( G_UNLIKELY (val == -1 ) )
+    {
+	g_warning ("Invalid value %s for property %s, using default\n", str, HIBERNATE_SWITCH_CFG);
+	conf->priv->hibernate_button = XFPM_DO_NOTHING;
+	xfconf_channel_set_string (conf->priv->channel, HIBERNATE_SWITCH_CFG, "Nothing");
+    }
+    else conf->priv->hibernate_button = val;
+    
+    g_free (str);
+    
     conf->priv->general_notification = xfconf_channel_get_bool (conf->priv->channel, GENERAL_NOTIFICATION_CFG, TRUE);
     
     str = xfconf_channel_get_string (conf->priv->channel, LID_SWITCH_ON_AC_CFG, "Nothing");
@@ -536,6 +562,8 @@
 	return conf->priv->show_icon;
     else if ( xfpm_strequal (property, POWER_SWITCH_CFG) )
 	return conf->priv->power_button;
+    else if ( xfpm_strequal (property, HIBERNATE_SWITCH_CFG ) )
+	return conf->priv->hibernate_button;
     
     g_warn_if_reached ();
 




More information about the Goodies-commits mailing list