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

Ali Abdallah aliov at xfce.org
Wed Mar 18 22:18:15 CET 2009


Author: aliov
Date: 2009-03-18 21:18:15 +0000 (Wed, 18 Mar 2009)
New Revision: 6944

Modified:
   xfce4-power-manager/trunk/ChangeLog
   xfce4-power-manager/trunk/libxfpm/hal-manager.c
   xfce4-power-manager/trunk/settings/xfpm-settings-main.c
   xfce4-power-manager/trunk/settings/xfpm-settings.c
   xfce4-power-manager/trunk/settings/xfpm-settings.glade
   xfce4-power-manager/trunk/settings/xfpm-settings.h
   xfce4-power-manager/trunk/src/org.xfce.Power.Manager.xml
   xfce4-power-manager/trunk/src/xfpm-adapter.c
   xfce4-power-manager/trunk/src/xfpm-adapter.h
   xfce4-power-manager/trunk/src/xfpm-brightness-hal.c
   xfce4-power-manager/trunk/src/xfpm-brightness-hal.h
   xfce4-power-manager/trunk/src/xfpm-engine.c
   xfce4-power-manager/trunk/src/xfpm-engine.h
   xfce4-power-manager/trunk/src/xfpm-idle.c
   xfce4-power-manager/trunk/src/xfpm-manager.c
Log:
Load relevent settings depending on the form factor the power manager is running on

Modified: xfce4-power-manager/trunk/ChangeLog
===================================================================
--- xfce4-power-manager/trunk/ChangeLog	2009-03-18 09:46:52 UTC (rev 6943)
+++ xfce4-power-manager/trunk/ChangeLog	2009-03-18 21:18:15 UTC (rev 6944)
@@ -1,4 +1,7 @@
 
+2009-03-18 22:18 Ali aliov at xfce.org 
+	 * : Load relevent settings depending on the form factor the power manager is running on
+
 2009-03-18 10:46 Ali aliov at xfce.org 
 	 * : Removed already deleted file from PTOFILES.in+modified string in the settings dialog
 

Modified: xfce4-power-manager/trunk/libxfpm/hal-manager.c
===================================================================
--- xfce4-power-manager/trunk/libxfpm/hal-manager.c	2009-03-18 09:46:52 UTC (rev 6943)
+++ xfce4-power-manager/trunk/libxfpm/hal-manager.c	2009-03-18 21:18:15 UTC (rev 6944)
@@ -53,11 +53,66 @@
     LAST_SIGNAL
 };
 
+static gpointer hal_manager_object = NULL;
+
 static guint signals[LAST_SIGNAL] = { 0 };
 
 G_DEFINE_TYPE (HalManager, hal_manager, G_TYPE_OBJECT)
 
 static void
+hal_manager_device_added_cb (DBusGProxy *proxy, const gchar *udi, HalManager *manager)
+{
+    g_signal_emit (G_OBJECT(manager), signals[DEVICE_ADDED], 0, udi);
+}
+
+static void
+hal_manager_device_removed_cb (DBusGProxy *proxy, const gchar *udi, HalManager *manager)
+{
+    g_signal_emit (G_OBJECT(manager), signals[DEVICE_REMOVED], 0, udi);
+}
+
+static void
+hal_manager_connect (HalManager *manager)
+{
+    GError *error = NULL;
+    
+    manager->priv->bus = dbus_g_bus_get (DBUS_BUS_SYSTEM, &error);
+    
+    if ( error )
+    {
+	g_critical ("Failed to get bus system %s\n", error->message);
+	g_error_free (error);
+	goto out;
+    }
+    manager->priv->connected = TRUE;
+    
+    manager->priv->proxy = dbus_g_proxy_new_for_name (manager->priv->bus,
+		  				      "org.freedesktop.Hal",
+						      "/org/freedesktop/Hal/Manager",
+						      "org.freedesktop.Hal.Manager");
+    
+    if ( !manager->priv->proxy )
+    {
+	g_critical ("Unable to get proxy for \n");
+	goto out;
+    }
+    
+    dbus_g_proxy_add_signal (manager->priv->proxy, "DeviceAdded",
+			     G_TYPE_STRING, G_TYPE_INVALID);
+			     
+    dbus_g_proxy_connect_signal (manager->priv->proxy, "DeviceAdded",
+				 G_CALLBACK (hal_manager_device_added_cb), manager, NULL);
+
+    dbus_g_proxy_add_signal (manager->priv->proxy, "DeviceRemoved",
+			     G_TYPE_STRING, G_TYPE_INVALID);
+	
+    dbus_g_proxy_connect_signal (manager->priv->proxy, "DeviceRemoved",
+				 G_CALLBACK (hal_manager_device_removed_cb), manager, NULL);
+out:
+	;
+}
+
+static void
 hal_manager_class_init(HalManagerClass *klass)
 {
     GObjectClass *object_class = G_OBJECT_CLASS(klass);
@@ -94,6 +149,8 @@
     manager->priv->bus 	     = NULL;
     manager->priv->proxy     = NULL;
     manager->priv->connected = FALSE;
+    
+    hal_manager_connect (manager);
 }
 
 static void
@@ -112,70 +169,22 @@
     G_OBJECT_CLASS(hal_manager_parent_class)->finalize(object);
 }
 
-static void
-hal_manager_device_added_cb (DBusGProxy *proxy, const gchar *udi, HalManager *manager)
+HalManager *
+hal_manager_new (void)
 {
-    g_signal_emit (G_OBJECT(manager), signals[DEVICE_ADDED], 0, udi);
-}
-
-static void
-hal_manager_device_removed_cb (DBusGProxy *proxy, const gchar *udi, HalManager *manager)
-{
-    g_signal_emit (G_OBJECT(manager), signals[DEVICE_REMOVED], 0, udi);
-}
-
-static void
-hal_manager_connect (HalManager *manager)
-{
-    GError *error = NULL;
-    
-    manager->priv->bus = dbus_g_bus_get (DBUS_BUS_SYSTEM, &error);
-    
-    if ( error )
+    if ( hal_manager_object != NULL )
     {
-	g_critical ("Failed to get bus system %s\n", error->message);
-	g_error_free (error);
-	goto out;
+	g_object_ref (hal_manager_object);
     }
-    manager->priv->connected = TRUE;
-    
-    manager->priv->proxy = dbus_g_proxy_new_for_name (manager->priv->bus,
-		  				      "org.freedesktop.Hal",
-						      "/org/freedesktop/Hal/Manager",
-						      "org.freedesktop.Hal.Manager");
-    
-    if ( !manager->priv->proxy )
+    else
     {
-	g_critical ("Unable to get proxy for \n");
-	goto out;
+	hal_manager_object = g_object_new (HAL_TYPE_MANAGER, NULL);
+	g_object_add_weak_pointer (hal_manager_object, &hal_manager_object);
     }
     
-    dbus_g_proxy_add_signal (manager->priv->proxy, "DeviceAdded",
-			     G_TYPE_STRING, G_TYPE_INVALID);
-			     
-    dbus_g_proxy_connect_signal (manager->priv->proxy, "DeviceAdded",
-				 G_CALLBACK (hal_manager_device_added_cb), manager, NULL);
-
-    dbus_g_proxy_add_signal (manager->priv->proxy, "DeviceRemoved",
-			     G_TYPE_STRING, G_TYPE_INVALID);
-	
-    dbus_g_proxy_connect_signal (manager->priv->proxy, "DeviceRemoved",
-				 G_CALLBACK (hal_manager_device_removed_cb), manager, NULL);
-out:
-	;
+    return HAL_MANAGER (hal_manager_object);
 }
 
-HalManager *
-hal_manager_new (void)
-{
-    HalManager *manager = NULL;
-    manager = g_object_new (HAL_TYPE_MANAGER, NULL);
-    
-    hal_manager_connect (manager);
-    
-    return manager;
-}
-
 gchar **hal_manager_find_device_by_capability (HalManager *manager, const gchar *capability)
 {
     g_return_val_if_fail (HAL_IS_MANAGER(manager), NULL);

Modified: xfce4-power-manager/trunk/settings/xfpm-settings-main.c
===================================================================
--- xfce4-power-manager/trunk/settings/xfpm-settings-main.c	2009-03-18 09:46:52 UTC (rev 6943)
+++ xfce4-power-manager/trunk/settings/xfpm-settings-main.c	2009-03-18 21:18:15 UTC (rev 6944)
@@ -75,6 +75,16 @@
     
     GError *error = NULL;
     DBusGConnection *bus = dbus_g_bus_get(DBUS_BUS_SESSION, &error);
+    gboolean system_laptop;
+    gboolean user_privilege;
+    gboolean can_suspend;
+    gboolean can_hibernate;
+    gboolean has_lid;
+    gboolean has_lcd_brightness;
+	
+    XfconfChannel *channel;
+    DBusGProxy *proxy;
+    GtkWidget *dialog;
     
     if ( error )
     {
@@ -98,24 +108,39 @@
 	
 	if ( !xfconf_init(&error) )
     	{
-	    g_critical("xfconf init failed: %s using default settings\n",error->message);
+	    g_critical("xfconf init failed: %s using default settings\n", error->message);
 	    
 	    xfpm_popup_message(_("Xfce Power Manager"),_("Failed to load power manager configuration, "\
 	    			"using defaults"), GTK_MESSAGE_WARNING);
 	    g_error_free(error);
 	    error = NULL;
+	    return EXIT_FAILURE;
     	}
 	
-	XfconfChannel *channel = xfconf_channel_new(XFPM_CHANNEL_CFG);
-	DBusGProxy *proxy;
-    	GtkWidget *dialog;
+	channel = xfconf_channel_new(XFPM_CHANNEL_CFG);
 	
    	proxy = dbus_g_proxy_new_for_name(bus,
 				           "org.xfce.PowerManager",
 				           "/org/xfce/PowerManager",
 				           "org.xfce.Power.Manager");
 	
-	dialog = xfpm_settings_dialog_new (channel);	
+	xfpm_manager_dbus_client_get_config (proxy, &system_laptop, &user_privilege,
+					     &can_suspend, &can_hibernate, &has_lcd_brightness,
+					     &has_lid, &error);
+					     
+	if ( error )
+	{
+	    g_critical ("Unable to get configuration information from xfce power manager: %s", error->message);
+	    xfpm_error (_("Xfce Power Manager Settings"),
+		       _("Unable to connect to Xfce Power Manager") );
+	    g_error_free (error);
+	    return EXIT_FAILURE;
+	}
+	
+	dialog = xfpm_settings_dialog_new (channel, system_laptop, user_privilege,
+					   can_suspend, can_hibernate, has_lcd_brightness,
+					   has_lid);
+					   
 	g_signal_connect(dialog, "response", G_CALLBACK(dialog_response_cb), bus);
 	
 	gtk_widget_show(dialog);

Modified: xfce4-power-manager/trunk/settings/xfpm-settings.c
===================================================================
--- xfce4-power-manager/trunk/settings/xfpm-settings.c	2009-03-18 09:46:52 UTC (rev 6943)
+++ xfce4-power-manager/trunk/settings/xfpm-settings.c	2009-03-18 21:18:15 UTC (rev 6944)
@@ -405,10 +405,19 @@
 }
 
 static void
-xfpm_settings_on_battery (XfconfChannel *channel)
+xfpm_settings_on_battery (XfconfChannel *channel, gboolean user_privilege, gboolean can_suspend, 
+			 gboolean can_hibernate, gboolean has_lcd_brightness, gboolean has_lid)
 {
     gint val;
+    
     GtkWidget *battery_critical = glade_xml_get_widget (xml, "battery-critical-combox");
+    
+    if (!user_privilege )
+    {
+	gtk_widget_set_sensitive (battery_critical, FALSE);
+	gtk_widget_set_tooltip_text (battery_critical, _("Shutdown and hibernate operations not permitted"));
+    }
+    
     GtkListStore *list_store;
     GtkTreeIter iter;
     list_store = gtk_list_store_new (2, G_TYPE_STRING, G_TYPE_INT);
@@ -418,11 +427,13 @@
     gtk_list_store_append(list_store, &iter);
     gtk_list_store_set (list_store, &iter, 0, _("Nothing"), 1, 0, -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, _("Hibernate"), 1, 2, -1);
-    
-    gtk_list_store_append(list_store, &iter);
     gtk_list_store_set (list_store, &iter, 0, _("Shutdown"), 1, 3, -1);
     
     g_signal_connect (battery_critical, "changed", 
@@ -483,57 +494,84 @@
      * Lid switch settings on battery
      */
     GtkWidget *lid = glade_xml_get_widget (xml, "on-battery-lid");
-    
-    list_store = gtk_list_store_new (2, G_TYPE_STRING, G_TYPE_INT);
-    
-    gtk_combo_box_set_model (GTK_COMBO_BOX(lid), GTK_TREE_MODEL(list_store));
-    
-    gtk_list_store_append(list_store, &iter);
-    gtk_list_store_set (list_store, &iter, 0, _("Nothing"), 1, 0, -1);
-    
-    gtk_list_store_append(list_store, &iter);
-    gtk_list_store_set (list_store, &iter, 0, _("Suspend"), 1, 1, -1);
-    
-    gtk_list_store_append(list_store, &iter);
-    gtk_list_store_set (list_store, &iter, 0, _("Hibernate"), 1, 2, -1);
-    
-    g_signal_connect (lid, "changed", 
-		      G_CALLBACK(on_battery_lid_changed_cb), channel);
-		      
-    str = xfconf_channel_get_string (channel, LID_SWITCH_ON_BATTERY_CFG, "Nothing");
-    
-    val = xfpm_shutdown_string_to_int (str);
-    
-    if ( val == -1 || val == 3 /*we don't do shutdown here */) 
+    if ( has_lid )
     {
-	g_warning ("Invalid value %s for property %s\n", str, LID_SWITCH_ON_BATTERY_CFG);
-	gtk_combo_box_set_active (GTK_COMBO_BOX(lid), 0);
+	if (!user_privilege )
+	{
+	    gtk_widget_set_sensitive (lid, FALSE);
+	    gtk_widget_set_tooltip_text (lid, _("Shutdown and hibernate operations not permitted"));
+	}
+	
+	list_store = gtk_list_store_new (2, G_TYPE_STRING, G_TYPE_INT);
+	
+	gtk_combo_box_set_model (GTK_COMBO_BOX(lid), 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);
+	}
+	
+	g_signal_connect (lid, "changed", 
+			  G_CALLBACK(on_battery_lid_changed_cb), channel);
+			  
+	str = xfconf_channel_get_string (channel, LID_SWITCH_ON_BATTERY_CFG, "Nothing");
+	
+	val = xfpm_shutdown_string_to_int (str);
+	
+	if ( val == -1 || val == 3 /*we don't do shutdown here */) 
+	{
+	    g_warning ("Invalid value %s for property %s\n", str, LID_SWITCH_ON_BATTERY_CFG);
+	    gtk_combo_box_set_active (GTK_COMBO_BOX(lid), 0);
+	}
+	else
+	    gtk_combo_box_set_active (GTK_COMBO_BOX(lid), val);
+	    
+	g_free (str);
     }
     else
-	gtk_combo_box_set_active (GTK_COMBO_BOX(lid), val);
-	
-    g_free (str);
+    {
+	GtkWidget *label = glade_xml_get_widget (xml, "on-battery-lid-label");
+	gtk_widget_hide (label);
+	gtk_widget_hide (lid);
+    }
     
     /*
      * 
      * Brightness on battery power
      */
     GtkWidget *brg = glade_xml_get_widget (xml ,"brg-on-battery");
-    
-    val = xfconf_channel_get_uint (channel, BRIGHTNESS_ON_BATTERY, 10);
-    
-    gtk_range_set_value (GTK_RANGE(brg), val);
-    
-    g_signal_connect (brg, "value-changed",
-		      G_CALLBACK(brightness_on_battery_value_changed_cb), channel);
-		      
-    g_signal_connect (brg, "format-value", 
-		      G_CALLBACK(format_brightness_value_cb), NULL);
-    
+    if ( has_lcd_brightness )
+    {
+	val = xfconf_channel_get_uint (channel, BRIGHTNESS_ON_BATTERY, 10);
+	
+	gtk_range_set_value (GTK_RANGE(brg), val);
+	
+	g_signal_connect (brg, "value-changed",
+			  G_CALLBACK(brightness_on_battery_value_changed_cb), channel);
+			  
+	g_signal_connect (brg, "format-value", 
+			  G_CALLBACK(format_brightness_value_cb), NULL);
+    }
+    else
+    {
+	GtkWidget *frame = glade_xml_get_widget (xml, "on-battery-brg-frame");
+	gtk_widget_hide_all (frame);
+    }
 }
 
 static void
-xfpm_settings_on_ac (XfconfChannel *channel)
+xfpm_settings_on_ac (XfconfChannel *channel, gboolean user_privilege, gboolean can_suspend, 
+		     gboolean can_hibernate, gboolean has_lcd_brightness, gboolean has_lid)
 {
     guint val;
 #ifdef HAVE_DPMS
@@ -564,63 +602,89 @@
     g_signal_connect (on_ac_dpms_off, "format-value", 
 		      G_CALLBACK(format_dpms_value_cb), NULL);
 #endif
-
     /*
      * Lid switch settings on AC power
      */
-    GtkListStore *list_store;
-    GtkTreeIter iter;
-    list_store = gtk_list_store_new (2, G_TYPE_STRING, G_TYPE_INT);
-    
     GtkWidget *lid = glade_xml_get_widget (xml, "on-ac-lid");
-    gtk_combo_box_set_model (GTK_COMBO_BOX(lid), GTK_TREE_MODEL(list_store));
-    
-    gtk_list_store_append(list_store, &iter);
-    gtk_list_store_set (list_store, &iter, 0, _("Nothing"), 1, 0, -1);
-    
-    gtk_list_store_append(list_store, &iter);
-    gtk_list_store_set (list_store, &iter, 0, _("Suspend"), 1, 1, -1);
-    
-    gtk_list_store_append(list_store, &iter);
-    gtk_list_store_set (list_store, &iter, 0, _("Hibernate"), 1, 2, -1);
-    
-    g_signal_connect (lid, "changed", 
-		      G_CALLBACK(on_ac_lid_changed_cb), channel);
-		      
-    gchar *str = xfconf_channel_get_string (channel, LID_SWITCH_ON_AC_CFG, "Nothing");
-    
-    val = xfpm_shutdown_string_to_int (str);
-    
-    if ( val == -1 || val == 3 /*we don't do shutdown here */) 
+    if ( has_lid )
     {
-	g_warning ("Invalid value %s for property %s\n", str, LID_SWITCH_ON_AC_CFG);
-	gtk_combo_box_set_active (GTK_COMBO_BOX(lid), 0);
+	GtkListStore *list_store;
+	GtkTreeIter iter;
+	list_store = gtk_list_store_new (2, G_TYPE_STRING, G_TYPE_INT);
+	
+	if ( !user_privilege )
+	{
+	    gtk_widget_set_sensitive (lid, FALSE);
+	    gtk_widget_set_tooltip_text (lid, _("Hibernate and suspend operations not permitted"));
+	    
+	}
+	gtk_combo_box_set_model (GTK_COMBO_BOX(lid), 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);
+	}
+	
+	g_signal_connect (lid, "changed", 
+			  G_CALLBACK(on_ac_lid_changed_cb), channel);
+			  
+	gchar *str = xfconf_channel_get_string (channel, LID_SWITCH_ON_AC_CFG, "Nothing");
+	
+	val = xfpm_shutdown_string_to_int (str);
+	
+	if ( val == -1 || val == 3 /*we don't do shutdown here */) 
+	{
+	    g_warning ("Invalid value %s for property %s\n", str, LID_SWITCH_ON_AC_CFG);
+	    gtk_combo_box_set_active (GTK_COMBO_BOX(lid), 0);
+	}
+	else
+	    gtk_combo_box_set_active (GTK_COMBO_BOX(lid), val);
+	    
+	g_free (str);
     }
     else
-	gtk_combo_box_set_active (GTK_COMBO_BOX(lid), val);
-	
-    g_free (str);
+    {
+	GtkWidget *frame = glade_xml_get_widget (xml, "on-ac-actions-frame");
+	gtk_widget_hide_all (frame);
+    }
     
-    
     /*
      * 
      * Brightness on AC power
      */
     GtkWidget *brg = glade_xml_get_widget (xml ,"brg-on-ac");
-    
-    val = xfconf_channel_get_uint (channel, BRIGHTNESS_ON_AC, 9);
-    
-    gtk_range_set_value (GTK_RANGE(brg), val);
-    
-    g_signal_connect (brg, "value-changed",
-		      G_CALLBACK(brightness_on_ac_value_changed_cb), channel);
-		      
-    g_signal_connect (brg, "format-value", 
-		      G_CALLBACK(format_brightness_value_cb), NULL);
+    if ( has_lcd_brightness )
+    {
+	val = xfconf_channel_get_uint (channel, BRIGHTNESS_ON_AC, 9);
+	
+	gtk_range_set_value (GTK_RANGE(brg), val);
+	
+	g_signal_connect (brg, "value-changed",
+			  G_CALLBACK(brightness_on_ac_value_changed_cb), channel);
+			  
+	g_signal_connect (brg, "format-value", 
+			  G_CALLBACK(format_brightness_value_cb), NULL);
+    }
+    else
+    {
+	GtkWidget *frame = glade_xml_get_widget (xml, "on-ac-brg-frame");
+	gtk_widget_hide_all (frame);
+    }
 }
 
 static void
-xfpm_settings_general (XfconfChannel *channel)
+xfpm_settings_general (XfconfChannel *channel, gboolean user_privilege,
+			  gboolean can_suspend, gboolean can_hibernate)
 {
     /*
      *  Tray icon settings
@@ -665,18 +729,28 @@
      */
     list_store = gtk_list_store_new (2, G_TYPE_STRING, G_TYPE_INT);
     GtkWidget *sleep = glade_xml_get_widget (xml, "sleep-combox");
+    if (!user_privilege )
+    {
+	gtk_widget_set_sensitive (sleep, FALSE);
+	gtk_widget_set_tooltip_text (sleep, _("Hibernate and suspend operations not permitted"));
+    }
     
     gtk_combo_box_set_model (GTK_COMBO_BOX(sleep), GTK_TREE_MODEL(list_store));
 
     gtk_list_store_append (list_store, &iter);
     gtk_list_store_set (list_store, &iter, 0, _("Nothing"), 1, 0, -1);
     
-    gtk_list_store_append (list_store, &iter);
-    gtk_list_store_set (list_store, &iter, 0, _("Suspend"), 1, 1, -1);
+    if ( can_suspend )
+    {
+	gtk_list_store_append (list_store, &iter);
+	gtk_list_store_set (list_store, &iter, 0, _("Suspend"), 1, 1, -1);
+    }
     
-    gtk_list_store_append (list_store, &iter);
-    gtk_list_store_set (list_store, &iter, 0, _("Hibernate"), 1, 2, -1);
-    
+    if ( can_hibernate )
+    {
+	gtk_list_store_append (list_store, &iter);
+	gtk_list_store_set (list_store, &iter, 0, _("Hibernate"), 1, 2, -1);
+    }
     g_signal_connect (sleep, "changed",
 		      G_CALLBACK(set_sleep_changed_cb), channel);
     
@@ -691,8 +765,6 @@
 	gtk_combo_box_set_active (GTK_COMBO_BOX(sleep), sleep_val_int);
     
     g_free (default_sleep_value);
-    
-    
     /*
      * Enable/Disable Notification
      */
@@ -707,8 +779,9 @@
 }
 
 static void
-xfpm_settings_advanced (XfconfChannel *channel )
+xfpm_settings_advanced (XfconfChannel *channel, gboolean system_latop, gboolean user_privilege )
 {
+    guint val;
 #ifdef HAVE_DPMS
     sleep_dpms_mode = glade_xml_get_widget (xml, "sleep-dpms-mode");
     suspend_dpms_mode = glade_xml_get_widget (xml, "suspend-dpms-mode");
@@ -730,36 +803,50 @@
     
     g_free (str);
     
-    
-#endif
+#endif /* HAVE_DPMS */
+
     /*
      * Critical battery level
      */
     GtkWidget *critical_level = glade_xml_get_widget (xml, "critical-spin");
+    if ( system_latop )
+    {
+	gtk_widget_set_tooltip_text (critical_level, 
+				     _("When the main power on the computer reaches this value of charge percentage"));
     
-    gtk_widget_set_tooltip_text (critical_level, 
-			        _("When the main power on the computer reaches this value of charge percentage"));
-    
-    g_signal_connect (critical_level, "output", 
-		      G_CALLBACK(critical_spin_output_cb), NULL);
-    g_signal_connect (critical_level, "value-changed", 
-		      G_CALLBACK(critical_level_value_changed_cb), channel);
+	g_signal_connect (critical_level, "output", 
+			  G_CALLBACK(critical_spin_output_cb), NULL);
+	g_signal_connect (critical_level, "value-changed", 
+			  G_CALLBACK(critical_level_value_changed_cb), channel);
 		      
-    guint val = xfconf_channel_get_uint (channel, CRITICAL_POWER_LEVEL, 10 );
-    
-    if ( val > 20 )
+	val = xfconf_channel_get_uint (channel, CRITICAL_POWER_LEVEL, 10 );
+
+	if ( val > 20 )
+	{
+	    g_critical ("Value %d if out of range for property %s\n", val, CRITICAL_POWER_LEVEL);
+	    gtk_spin_button_set_value (GTK_SPIN_BUTTON(critical_level), 10);
+	}
+	else
+	    gtk_spin_button_set_value (GTK_SPIN_BUTTON(critical_level), 10);
+    }
+    else
     {
-	g_critical ("Value %d if out of range for property %s\n", val, CRITICAL_POWER_LEVEL);
-	gtk_spin_button_set_value (GTK_SPIN_BUTTON(critical_level), 10);
+	GtkWidget *label = glade_xml_get_widget (xml, "critical-level-label" );
+	gtk_widget_hide (critical_level);
+	gtk_widget_hide (label);
     }
-    else
-	gtk_spin_button_set_value (GTK_SPIN_BUTTON(critical_level), 10);
 	
     /*
      * Lock screen for suspend/hibernate
      */
     GtkWidget *lock = glade_xml_get_widget (xml, "lock-screen");
     
+    if ( !user_privilege )
+    {
+	gtk_widget_set_sensitive (lock, FALSE);
+	gtk_widget_set_tooltip_text (lock, _("Hibernate and suspend operations not permitted"));
+    }
+    
     val = xfconf_channel_get_bool (channel, LOCK_SCREEN_ON_SLEEP, TRUE);
     gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(lock), val);
     g_signal_connect (lock, "toggled",
@@ -793,7 +880,7 @@
 }
 
 static void
-xfpm_settings_tree_view (XfconfChannel *channel)
+xfpm_settings_tree_view (XfconfChannel *channel, gboolean system_laptop)
 {
     GtkWidget *view = glade_xml_get_widget (xml, "treeview");
     GdkPixbuf *pix;
@@ -801,6 +888,8 @@
     GtkTreeIter iter;
     GtkTreeViewColumn *col;
     GtkCellRenderer *renderer;
+    GtkTreeSelection *sel;
+    GtkTreePath *path;
     gint i = 0;
     
     list_store = gtk_list_store_new(3, GDK_TYPE_PIXBUF, G_TYPE_STRING, G_TYPE_INT);
@@ -852,18 +941,20 @@
     }
     i++;
     
-    
-    pix = xfpm_load_icon("battery", 48); 
-    gtk_list_store_append(list_store, &iter);
-    if ( pix )
+    if ( system_laptop )
     {
-	    gtk_list_store_set(list_store, &iter, 0, pix, 1, _("On Battery"), 2, i, -1);
-	    g_object_unref(pix);
+	pix = xfpm_load_icon("battery", 48); 
+	gtk_list_store_append(list_store, &iter);
+	if ( pix )
+	{
+		gtk_list_store_set(list_store, &iter, 0, pix, 1, _("On Battery"), 2, i, -1);
+		g_object_unref(pix);
+	}
+	else
+	{
+		gtk_list_store_set(list_store, &iter, 1, _("On Battery"), 2, i, -1);
+	}
     }
-    else
-    {
-	    gtk_list_store_set(list_store, &iter, 1, _("On Battery"), 2, i, -1);
-    }
     i++;
     
     pix = xfpm_load_icon("applications-other", 48); 
@@ -877,10 +968,6 @@
     {
 	    gtk_list_store_set(list_store, &iter, 1, _("Advance"), 2, i, -1);
     }
-    
-    
-    GtkTreeSelection *sel;
-    GtkTreePath *path;
 
     sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(view));
 
@@ -908,8 +995,16 @@
 }
 
 GtkWidget *
-xfpm_settings_dialog_new (XfconfChannel *channel)
+xfpm_settings_dialog_new (XfconfChannel *channel, 
+			  gboolean system_laptop, gboolean user_privilege,
+			  gboolean can_suspend, gboolean can_hibernate,
+			  gboolean has_lcd_brightness, gboolean has_lid)
 {
+    TRACE("system_laptop=%s user_privilege=%s can_suspend=%s can_hibernate=%s has_lcd_brightness=%s has_lid=%s",
+	  xfpm_bool_to_string (system_laptop), xfpm_bool_to_string (user_privilege),
+	  xfpm_bool_to_string (can_suspend), xfpm_bool_to_string (can_hibernate),
+	  xfpm_bool_to_string (has_lcd_brightness), xfpm_bool_to_string (has_lid) );
+	  
     GtkWidget *dialog;
     
     xml = glade_xml_new_from_buffer (xfpm_settings_glade,
@@ -918,11 +1013,15 @@
     
     dialog = glade_xml_get_widget (xml, "xfpm-settings-dialog");
 
-    xfpm_settings_on_ac     (channel);
-    xfpm_settings_on_battery (channel);
-    xfpm_settings_tree_view (channel);
-    xfpm_settings_general   (channel);
-    xfpm_settings_advanced  (channel);
+    xfpm_settings_on_ac (channel, user_privilege, can_suspend, can_hibernate, has_lid, has_lcd_brightness);
+    
+    if ( system_laptop )
+	xfpm_settings_on_battery (channel, user_privilege, can_suspend, can_hibernate, has_lid, has_lcd_brightness);
+	
+    xfpm_settings_tree_view (channel, system_laptop);
+    
+    xfpm_settings_general   (channel, user_privilege, can_suspend, can_hibernate);
+    xfpm_settings_advanced  (channel, system_laptop, user_privilege);
 
     g_signal_connect (dialog, "response", G_CALLBACK(dialog_response_cb), channel);
     

Modified: xfce4-power-manager/trunk/settings/xfpm-settings.glade
===================================================================
--- xfce4-power-manager/trunk/settings/xfpm-settings.glade	2009-03-18 09:46:52 UTC (rev 6943)
+++ xfce4-power-manager/trunk/settings/xfpm-settings.glade	2009-03-18 21:18:15 UTC (rev 6944)
@@ -212,7 +212,7 @@
                         <property name="orientation">vertical</property>
                         <property name="spacing">10</property>
                         <child>
-                          <widget class="GtkFrame" id="frame7">
+                          <widget class="GtkFrame" id="on-ac-actions-frame">
                             <property name="visible">True</property>
                             <property name="label_xalign">0</property>
                             <property name="shadow_type">none</property>
@@ -230,7 +230,7 @@
                                         <property name="visible">True</property>
                                         <property name="spacing">10</property>
                                         <child>
-                                          <widget class="GtkLabel" id="label27">
+                                          <widget class="GtkLabel" id="on-ac-lid-label">
                                             <property name="visible">True</property>
                                             <property name="label" translatable="yes">When laptop lid is closed:</property>
                                           </widget>
@@ -376,7 +376,7 @@
                           </packing>
                         </child>
                         <child>
-                          <widget class="GtkFrame" id="frame8">
+                          <widget class="GtkFrame" id="on-ac-brg-frame">
                             <property name="visible">True</property>
                             <property name="label_xalign">0</property>
                             <property name="shadow_type">none</property>
@@ -527,7 +527,7 @@
                                               <widget class="GtkHBox" id="hbox20">
                                                 <property name="visible">True</property>
                                                 <child>
-                                                  <widget class="GtkLabel" id="label33">
+                                                  <widget class="GtkLabel" id="on-battery-lid-label">
                                                     <property name="visible">True</property>
                                                     <property name="label" translatable="yes">When laptop lid is closed:</property>
                                                   </widget>
@@ -694,7 +694,7 @@
                               </packing>
                             </child>
                             <child>
-                              <widget class="GtkFrame" id="frame10">
+                              <widget class="GtkFrame" id="on-battery-brg-frame">
                                 <property name="visible">True</property>
                                 <property name="label_xalign">0</property>
                                 <property name="shadow_type">none</property>
@@ -874,9 +874,9 @@
                                     <property name="visible">True</property>
                                     <property name="spacing">10</property>
                                     <child>
-                                      <widget class="GtkLabel" id="label3">
+                                      <widget class="GtkLabel" id="critical-level-label">
                                         <property name="visible">True</property>
-                                        <property name="label" translatable="yes">Consider the computer on low power:</property>
+                                        <property name="label" translatable="yes">Consider the computer on low power at:</property>
                                       </widget>
                                       <packing>
                                         <property name="expand">False</property>

Modified: xfce4-power-manager/trunk/settings/xfpm-settings.h
===================================================================
--- xfce4-power-manager/trunk/settings/xfpm-settings.h	2009-03-18 09:46:52 UTC (rev 6943)
+++ xfce4-power-manager/trunk/settings/xfpm-settings.h	2009-03-18 21:18:15 UTC (rev 6944)
@@ -22,7 +22,13 @@
 #define __XFPM_SETTINGS_H
 
 
-GtkWidget *	xfpm_settings_dialog_new 	(XfconfChannel *channel);
+GtkWidget *	xfpm_settings_dialog_new 	(XfconfChannel *channel,
+						 gboolean system_laptop,
+						 gboolean user_privilege,
+					         gboolean can_suspend,
+					         gboolean can_hibernate,
+					         gboolean has_lcd_brightness,
+					         gboolean has_lid);
 
 
 

Modified: xfce4-power-manager/trunk/src/org.xfce.Power.Manager.xml
===================================================================
--- xfce4-power-manager/trunk/src/org.xfce.Power.Manager.xml	2009-03-18 09:46:52 UTC (rev 6943)
+++ xfce4-power-manager/trunk/src/org.xfce.Power.Manager.xml	2009-03-18 21:18:15 UTC (rev 6944)
@@ -10,14 +10,13 @@
     <method name="Quit">
     </method>
     
-    <method name="GetAll">
+    <method name="GetConfig">
 	<arg direction="out" name="system_laptop" type="b"/>
-	<arg direction="out" name="power_management" type="i"/>
-	<arg direction="out" name="with_dpms" type="b"/>
-	<arg direction="out" name="governor" type="i"/>
-	<arg direction="out" name="switch_buttons" type="i"/>
-	<arg direction="out" name="brightness_control" type="b"/>
-	<arg direction="out" name="ups_found" type="b"/>
+	<arg direction="out" name="user_privilege" type="b"/>
+	<arg direction="out" name="can_suspend" type="b"/>
+	<arg direction="out" name="can_hibernate" type="b"/>
+	<arg direction="out" name="has_lcd_brightness" type="b"/>
+	<arg direction="out" name="has_lid" type="b"/>
     </method>
     
     <method name="GetInfo">

Modified: xfce4-power-manager/trunk/src/xfpm-adapter.c
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-adapter.c	2009-03-18 09:46:52 UTC (rev 6943)
+++ xfce4-power-manager/trunk/src/xfpm-adapter.c	2009-03-18 21:18:15 UTC (rev 6944)
@@ -58,6 +58,7 @@
 {
     HalDevice 	 *device;
     gboolean      present;
+    gboolean      hw_found;
 };
 
 enum
@@ -82,7 +83,38 @@
 	adapter->priv->present = hal_device_get_property_bool (adapter->priv->device, "ac_adapter.present");
 	g_signal_emit (G_OBJECT(adapter), signals[ADAPTER_CHANGED], 0, adapter->priv->present);
     }
+}
+
+static void
+xfpm_adapter_set_device (XfpmAdapter *adapter)
+{
+    HalManager *manager;
+    gchar **udi;
     
+    manager = hal_manager_new ();
+    
+    udi = hal_manager_find_device_by_capability (manager, "ac_adapter");
+    
+    if (!udi )//FIXME Adapter should be present on laptops
+	goto out;
+	
+    TRACE("Found AC Adapter with udi=%s\n", udi[0]);
+
+    adapter->priv->hw_found = TRUE;
+    
+    adapter->priv->device = hal_device_new ();
+    hal_device_set_udi (adapter->priv->device, udi[0]);
+    
+    hal_manager_free_string_array (udi);
+    
+    adapter->priv->present = hal_device_get_property_bool (adapter->priv->device, "ac_adapter.present");
+    
+    g_signal_connect (adapter->priv->device, "device-changed",
+		      G_CALLBACK(xfpm_adapter_device_changed_cb), adapter);
+		      
+    hal_device_watch (adapter->priv->device);
+out:
+    g_object_unref (manager);
 }
 
 static void
@@ -107,41 +139,34 @@
 static void
 xfpm_adapter_init(XfpmAdapter *adapter)
 {
-    HalManager *manager;
-    gchar **udi = NULL;
+    HalDevice *device;
     gchar *form_factor = NULL;
     
     adapter->priv = XFPM_ADAPTER_GET_PRIVATE(adapter);
     
-    adapter->priv->device = hal_device_new ();
-    hal_device_set_udi (adapter->priv->device, "/org/freedesktop/Hal/devices/computer");
+    adapter->priv->device   = NULL;
+    adapter->priv->present  = TRUE;
+    adapter->priv->hw_found = FALSE;
     
-    form_factor = hal_device_get_property_string (adapter->priv->device, "system.formfactor");
+    device = hal_device_new ();
+    hal_device_set_udi (device, "/org/freedesktop/Hal/devices/computer");
+    
+    form_factor = hal_device_get_property_string (device, "system.formfactor");
         
-    TRACE("System formfactor=%s\n", form_factor); //FIXME Use this value
-    g_free(form_factor);
-        
-    manager = hal_manager_new ();
+    TRACE("System formfactor=%s\n", form_factor);
+    if ( xfpm_strequal (form_factor, "laptop") )
+    {
+	xfpm_adapter_set_device (adapter);
+	TRACE("System is identified as a laptop");
+    }
+    else
+    {
+	TRACE("System is not identified as a laptop");
+    }
     
-    udi = hal_manager_find_device_by_capability (manager, "ac_adapter");
-    
-    if (!udi )//FIXME Adapter should be present on laptops
-	goto out;
-	
-    TRACE("Found AC Adapter with udi=%s\n", udi[0]);
-    
-    hal_device_set_udi (adapter->priv->device, udi[0]);
-    
-    hal_manager_free_string_array (udi);
-    
-    adapter->priv->present = hal_device_get_property_bool (adapter->priv->device, "ac_adapter.present");
-    g_signal_connect (adapter->priv->device, "device-changed",
-		      G_CALLBACK(xfpm_adapter_device_changed_cb), adapter);
-		      
-    hal_device_watch (adapter->priv->device);
-out:
-    g_object_unref (manager);
-    
+    g_object_unref (device);
+    if ( form_factor )
+	g_free(form_factor);
 }
 
 static void
@@ -178,3 +203,10 @@
     
     return adapter->priv->present;
 }
+
+gboolean xfpm_adapter_has_hw (XfpmAdapter *adapter)
+{
+    g_return_val_if_fail (XFPM_IS_ADAPTER(adapter), FALSE);
+    
+    return adapter->priv->hw_found;
+}

Modified: xfce4-power-manager/trunk/src/xfpm-adapter.h
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-adapter.h	2009-03-18 09:46:52 UTC (rev 6943)
+++ xfce4-power-manager/trunk/src/xfpm-adapter.h	2009-03-18 21:18:15 UTC (rev 6944)
@@ -51,6 +51,9 @@
 XfpmAdapter      	*xfpm_adapter_new             (void);
 
 gboolean 	  	 xfpm_adapter_get_present     (XfpmAdapter *adapter);
+
+gboolean 		 xfpm_adapter_has_hw 	      (XfpmAdapter *adapter);
+
 G_END_DECLS
 
 #endif /* __XFPM_ADAPTER_H */

Modified: xfce4-power-manager/trunk/src/xfpm-brightness-hal.c
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-brightness-hal.c	2009-03-18 09:46:52 UTC (rev 6943)
+++ xfce4-power-manager/trunk/src/xfpm-brightness-hal.c	2009-03-18 21:18:15 UTC (rev 6944)
@@ -480,3 +480,10 @@
     
     return brg;
 }
+
+gboolean xfpm_brightness_hal_has_hw (XfpmBrightnessHal *brg)
+{
+    g_return_val_if_fail (XFPM_IS_BRIGHTNESS_HAL (brg), FALSE);
+    
+    return brg->priv->hw_found;
+}

Modified: xfce4-power-manager/trunk/src/xfpm-brightness-hal.h
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-brightness-hal.h	2009-03-18 09:46:52 UTC (rev 6943)
+++ xfce4-power-manager/trunk/src/xfpm-brightness-hal.h	2009-03-18 21:18:15 UTC (rev 6944)
@@ -46,6 +46,8 @@
 
 GType        				xfpm_brightness_hal_get_type        (void) G_GNUC_CONST;
 XfpmBrightnessHal      		       *xfpm_brightness_hal_new             (void);
+
+gboolean                                xfpm_brightness_hal_has_hw          (XfpmBrightnessHal *brg);
 G_END_DECLS
 
 #endif /* __XFPM_BRIGHTNESS_HAL_H */

Modified: xfce4-power-manager/trunk/src/xfpm-engine.c
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-engine.c	2009-03-18 09:46:52 UTC (rev 6943)
+++ xfce4-power-manager/trunk/src/xfpm-engine.c	2009-03-18 21:18:15 UTC (rev 6944)
@@ -42,6 +42,7 @@
 #include <xfconf/xfconf.h>
 
 #include "libxfpm/hal-iface.h"
+#include "libxfpm/hal-device.h"
 #include "libxfpm/xfpm-string.h"
 #include "libxfpm/xfpm-common.h"
 
@@ -95,6 +96,10 @@
     
     gboolean            block_shutdown;
     
+    gboolean            is_laptop;
+    gboolean            has_lcd_brightness;
+    gboolean            has_lid;
+    
     /*Configuration */
     XfpmShutdownRequest sleep_button;
     XfpmShutdownRequest lid_button_ac;
@@ -208,12 +213,38 @@
 static void
 xfpm_engine_load_all (XfpmEngine *engine)
 {
+    HalDevice *device;
+    gchar *form_factor = NULL;
+    
     xfpm_engine_check_hal_iface (engine);
     
+    device = hal_device_new ();
+    
+    hal_device_set_udi (device, "/org/freedesktop/Hal/devices/computer");
+    
+    form_factor = hal_device_get_property_string (device, "system.formfactor");
+        
+    TRACE("System formfactor=%s\n", form_factor);
+    if ( xfpm_strequal (form_factor, "laptop") )
+    {
+	engine->priv->is_laptop = TRUE;
+	TRACE("System is identified as a laptop");
+    }
+    else
+    {
+	engine->priv->is_laptop = FALSE;
+	TRACE("System is not identified as a laptop");
+    }
+    if ( form_factor )
+	g_free (form_factor);
+	
+    g_object_unref (device);
+    
 #ifdef HAVE_DPMS		      
     engine->priv->dpms = xfpm_dpms_new ();
 #endif
-    engine->priv->cpu = xfpm_cpu_new ();
+    if ( engine->priv->is_laptop )
+	engine->priv->cpu = xfpm_cpu_new ();
 
     engine->priv->supply = xfpm_supply_new (engine->priv->power_management);
     xfpm_supply_monitor (engine->priv->supply);
@@ -229,19 +260,30 @@
     /*
     * Lid from HAL 
     */
-    engine->priv->lid = xfpm_lid_hal_new ();
-    
-    if ( xfpm_lid_hw_found (engine->priv->lid ))
-    	g_signal_connect (engine->priv->lid, "lid-closed",
-			  G_CALLBACK(xfpm_engine_lid_closed_cb), engine);
+    if ( engine->priv->is_laptop )
+    {
+	engine->priv->lid = xfpm_lid_hal_new ();
+	engine->priv->has_lid = xfpm_lid_hw_found (engine->priv->lid );
+	if ( engine->priv->has_lid )
+	    g_signal_connect (engine->priv->lid, "lid-closed",
+			      G_CALLBACK(xfpm_engine_lid_closed_cb), engine);
+	else
+	    g_object_unref (engine->priv->lid);
+    }
 			  
     /*
     * Brightness HAL
     */
-    engine->priv->brg_hal = xfpm_brightness_hal_new ();
-    
-    g_signal_connect (G_OBJECT(engine->priv->supply), "shutdown-request",
-		      G_CALLBACK (xfpm_engine_shutdown_request_battery_cb), engine);
+    if ( engine->priv->is_laptop )
+    {
+	engine->priv->brg_hal = xfpm_brightness_hal_new ();
+	engine->priv->has_lcd_brightness = xfpm_brightness_hal_has_hw (engine->priv->brg_hal);
+	if ( engine->priv->has_lcd_brightness )
+	    g_signal_connect (G_OBJECT(engine->priv->supply), "shutdown-request",
+			      G_CALLBACK (xfpm_engine_shutdown_request_battery_cb), engine);
+	else
+	    g_object_unref (engine->priv->brg_hal);
+    }
 }
 
 static void
@@ -367,9 +409,11 @@
 static void
 xfpm_engine_init (XfpmEngine *engine)
 {
+    GError *error = NULL;
     engine->priv = XFPM_ENGINE_GET_PRIVATE(engine);
     
     engine->priv->iface       = hal_iface_new ();
+    engine->priv->adapter = xfpm_adapter_new ();
 
     engine->priv->inhibit     = xfpm_inhibit_new ();
     engine->priv->inhibited   = FALSE;
@@ -390,6 +434,25 @@
     engine->priv->power_management = 0;
     
     xfpm_engine_dbus_init (engine);
+    
+    if ( !xfconf_init(&error) )
+    {
+    	g_critical ("xfconf_init failed: %s\n", error->message);
+       	g_error_free (error);
+    }	
+    
+    engine->priv->conf    = xfpm_xfconf_new ();
+    
+    engine->priv->on_battery = ! xfpm_adapter_get_present (engine->priv->adapter);
+    
+    g_signal_connect (engine->priv->adapter, "adapter-changed",
+		      G_CALLBACK(xfpm_engine_adapter_changed_cb), engine);
+    
+    g_signal_connect (engine->priv->conf->channel, "property-changed",
+		      G_CALLBACK(xfpm_engine_property_changed_cb), engine);
+    
+    xfpm_engine_load_configuration (engine);
+    xfpm_engine_load_all (engine);
 }
 
 static void
@@ -431,28 +494,28 @@
     XfpmEngine *engine = NULL;
     engine = g_object_new (XFPM_TYPE_ENGINE, NULL);
 
-    GError *error = NULL;
-    if ( !xfconf_init(&error) )
-    {
-    	g_critical ("xfconf_init failed: %s\n", error->message);
-       	g_error_free (error);
-    }	
+    return engine;
+}
+
+void              xfpm_engine_get_info        (XfpmEngine *engine,
+					       gboolean *system_laptop,
+					       gboolean *user_privilege,
+					       gboolean *can_suspend,
+					       gboolean *can_hibernate,
+					       gboolean *has_lcd_brightness,
+					       gboolean *has_lid)
+{
+    g_return_if_fail (XFPM_IS_ENGINE(engine));
     
-    engine->priv->conf    = xfpm_xfconf_new ();
-    engine->priv->adapter = xfpm_adapter_new ();
+    g_object_get (G_OBJECT(engine->priv->iface), 
+		  "caller-privilege", user_privilege,
+		  "can-suspend", can_suspend,
+		  "can-hibernate",can_hibernate,
+		  NULL);
     
-    engine->priv->on_battery = ! xfpm_adapter_get_present (engine->priv->adapter);
-    
-    g_signal_connect (engine->priv->adapter, "adapter-changed",
-		      G_CALLBACK(xfpm_engine_adapter_changed_cb), engine);
-    
-    g_signal_connect (engine->priv->conf->channel, "property-changed",
-		      G_CALLBACK(xfpm_engine_property_changed_cb), engine);
-    
-    xfpm_engine_load_configuration (engine);
-    xfpm_engine_load_all (engine);
-    
-    return engine;
+    *system_laptop = engine->priv->is_laptop;
+    *has_lcd_brightness = engine->priv->has_lcd_brightness;
+    *has_lid = engine->priv->has_lid;
 }
 
 /*

Modified: xfce4-power-manager/trunk/src/xfpm-engine.h
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-engine.h	2009-03-18 09:46:52 UTC (rev 6943)
+++ xfce4-power-manager/trunk/src/xfpm-engine.h	2009-03-18 21:18:15 UTC (rev 6944)
@@ -47,6 +47,13 @@
 GType        	  xfpm_engine_get_type        (void) G_GNUC_CONST;
 XfpmEngine       *xfpm_engine_new             (void);
 
+void              xfpm_engine_get_info        (XfpmEngine *engine,
+					       gboolean *system_laptop,
+					       gboolean *user_privilege,
+					       gboolean *can_suspend,
+					       gboolean *can_hibernate,
+					       gboolean *has_lcd_brightness,
+					       gboolean *has_lid);
 G_END_DECLS
 
 #endif /* __XFPM_ENGINE_H */

Modified: xfce4-power-manager/trunk/src/xfpm-idle.c
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-idle.c	2009-03-18 09:46:52 UTC (rev 6943)
+++ xfce4-power-manager/trunk/src/xfpm-idle.c	2009-03-18 21:18:15 UTC (rev 6944)
@@ -300,6 +300,8 @@
 	xfpm_idle_free_alarm (idle, alarm);
     }
     g_ptr_array_free (idle->priv->array, TRUE);
+    
+    gdk_window_remove_filter (NULL, xfpm_idle_x_event_filter, idle);
 
     G_OBJECT_CLASS(xfpm_idle_parent_class)->finalize(object);
 }

Modified: xfce4-power-manager/trunk/src/xfpm-manager.c
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-manager.c	2009-03-18 09:46:52 UTC (rev 6943)
+++ xfce4-power-manager/trunk/src/xfpm-manager.c	2009-03-18 21:18:15 UTC (rev 6944)
@@ -171,16 +171,23 @@
  * DBus server implementation
  * 
  */
-static gboolean xfpm_manager_dbus_quit     (XfpmManager *manager,
-					    GError **error);
-static gboolean xfpm_manager_dbus_get_all  (XfpmManager *manager,
-					    GHashTable **OUT_hash,
-					    GError **error);
-static gboolean xfpm_manager_dbus_get_info (XfpmManager *manager,
-					    gchar **OUT_name,
-					    gchar **OUT_version,
-					    gchar **OUT_vendor,
-					    GError **error);
+static gboolean xfpm_manager_dbus_quit       (XfpmManager *manager,
+					      GError **error);
+					    
+static gboolean xfpm_manager_dbus_get_config (XfpmManager *manager,
+					      gboolean *OUT_system_laptop,
+					      gboolean *OUT_user_privilege,
+					      gboolean *OUT_can_suspend,
+					      gboolean *OUT_can_hibernate,
+					      gboolean *OUT_has_lcd_brightness,
+					      gboolean *OUT_has_lid,
+					      GError **error);
+					      
+static gboolean xfpm_manager_dbus_get_info   (XfpmManager *manager,
+					      gchar **OUT_name,
+					      gchar **OUT_version,
+					      gchar **OUT_vendor,
+					      GError **error);
 
 #include "xfce-power-manager-dbus-server.h"
 
@@ -209,18 +216,26 @@
     return TRUE;
 }
 
-static gboolean
-xfpm_manager_dbus_get_all(XfpmManager *manager, 
-			  GHashTable **OUT_hash, 
-			  GError **error)
+static gboolean xfpm_manager_dbus_get_config (XfpmManager *manager,
+					      gboolean *OUT_system_laptop,
+					      gboolean *OUT_user_privilege,
+					      gboolean *OUT_can_suspend,
+					      gboolean *OUT_can_hibernate,
+					      gboolean *OUT_has_lcd_brightness,
+					      gboolean *OUT_has_lid,
+					      GError **error)
 {
-    TRACE("Get all message received\n");
-
-   *OUT_hash = g_hash_table_new(g_str_hash, g_str_equal);
     
+    xfpm_engine_get_info (manager->priv->engine,
+			  OUT_system_laptop,
+			  OUT_user_privilege,
+			  OUT_can_suspend,
+			  OUT_can_hibernate,
+			  OUT_has_lcd_brightness,
+			  OUT_has_lid);
     return TRUE;
 }
-
+					      
 static gboolean 
 xfpm_manager_dbus_get_info (XfpmManager *manager,
 			    gchar **OUT_name,




More information about the Goodies-commits mailing list