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

Ali Abdallah aliov at xfce.org
Wed Mar 11 20:38:52 CET 2009


Author: aliov
Date: 2009-03-11 19:38:52 +0000 (Wed, 11 Mar 2009)
New Revision: 6886

Modified:
   xfce4-power-manager/trunk/ChangeLog
   xfce4-power-manager/trunk/settings/xfpm-settings.c
   xfce4-power-manager/trunk/settings/xfpm-settings.glade
   xfce4-power-manager/trunk/src/xfpm-battery.c
   xfce4-power-manager/trunk/src/xfpm-battery.h
   xfce4-power-manager/trunk/src/xfpm-config.h
   xfce4-power-manager/trunk/src/xfpm-engine.c
   xfce4-power-manager/trunk/src/xfpm-supply.c
Log:
Implement critical battery level settings+the option to disable lock screen when suspend/hibernate

Modified: xfce4-power-manager/trunk/ChangeLog
===================================================================
--- xfce4-power-manager/trunk/ChangeLog	2009-03-11 12:33:35 UTC (rev 6885)
+++ xfce4-power-manager/trunk/ChangeLog	2009-03-11 19:38:52 UTC (rev 6886)
@@ -1,4 +1,7 @@
 
+2009-03-11 20:38 Ali aliov at xfce.org 
+	 * : Implement critical battery level settings+the option to disable lock screen when suspend/hibernate
+
 2009-03-11 13:33 Ali aliov at xfce.org 
 	 * : Set dpms to standby or suspend depending on the user settings
 

Modified: xfce4-power-manager/trunk/settings/xfpm-settings.c
===================================================================
--- xfce4-power-manager/trunk/settings/xfpm-settings.c	2009-03-11 12:33:35 UTC (rev 6885)
+++ xfce4-power-manager/trunk/settings/xfpm-settings.c	2009-03-11 19:38:52 UTC (rev 6886)
@@ -286,6 +286,18 @@
 }
 #endif
 
+static gboolean
+critical_spin_output_cb (GtkSpinButton *w, gpointer data)
+{
+    gint val = (gint) gtk_spin_button_get_value (w);
+    gchar *text = g_strdup_printf ("%d %%", val);
+    
+    gtk_entry_set_text (GTK_ENTRY(w), text);
+    g_free (text);
+    
+    return TRUE;
+}
+
 static void
 on_battery_lid_changed_cb (GtkWidget *w, XfconfChannel *channel)
 {
@@ -335,6 +347,27 @@
 } 
 
 static void
+critical_level_value_changed_cb (GtkSpinButton *w, XfconfChannel *channel)
+{
+    guint val = (guint) gtk_spin_button_get_value (w);
+    
+    if (!xfconf_channel_get_uint (channel, CRITICAL_POWER_LEVEL, val) )
+    {
+	g_critical ("Unable to set value %d for property %s\n", val, CRITICAL_POWER_LEVEL);
+    }
+}
+
+static void
+lock_screen_toggled_cb (GtkWidget *w, XfconfChannel *channel)
+{
+    gboolean val = (gint) gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(w));
+    if ( !xfconf_channel_set_bool (channel, LOCK_SCREEN_ON_SLEEP, val) )
+    {
+	g_critical ("Unable to set value for property %s\n", LOCK_SCREEN_ON_SLEEP);
+    }
+}
+
+static void
 xfpm_settings_on_battery (XfconfChannel *channel)
 {
     gint val;
@@ -348,12 +381,13 @@
     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);
     
+    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", 
 		      G_CALLBACK(battery_critical_changed_cb), channel);
 		      
@@ -361,7 +395,7 @@
     
     val = xfpm_shutdown_string_to_int (str);
     
-    if ( val == -1 || val == 3 /*we don't do shutdown here */) 
+    if ( val == -1 || val == 1 /* we don't do suspend */) 
     {
 	g_warning ("Invalid value %s for property %s\n", str, CRITICAL_BATT_ACTION_CFG);
 	gtk_combo_box_set_active (GTK_COMBO_BOX(battery_critical), 0);
@@ -573,15 +607,12 @@
     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 (sleep, "changed",
 		      G_CALLBACK(set_sleep_changed_cb), channel);
     
     gchar *default_sleep_value = xfconf_channel_get_string (channel, SLEEP_SWITCH_CFG, "Nothing");
     gint   sleep_val_int = xfpm_shutdown_string_to_int (default_sleep_value );
-    if ( sleep_val_int == -1) 
+    if ( sleep_val_int == -1 || sleep_val_int == 3 ) 
     {
 	g_warning ("Invalid value %s for property %s\n", default_sleep_value, SLEEP_SWITCH_CFG);
 	gtk_combo_box_set_active (GTK_COMBO_BOX(sleep), 0);
@@ -631,6 +662,36 @@
     
     
 #endif
+    /*
+     * Critical battery level
+     */
+    GtkWidget *critical_level = glade_xml_get_widget (xml, "critical-spin");
+    
+    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 )
+    {
+	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);
+	
+    /*
+     * Lock screen for suspend/hibernate
+     */
+    GtkWidget *lock = glade_xml_get_widget (xml, "lock-screen");
+    
+    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",
+		      G_CALLBACK(lock_screen_toggled_cb), channel);
+    
 }
 
 static void

Modified: xfce4-power-manager/trunk/settings/xfpm-settings.glade
===================================================================
--- xfce4-power-manager/trunk/settings/xfpm-settings.glade	2009-03-11 12:33:35 UTC (rev 6885)
+++ xfce4-power-manager/trunk/settings/xfpm-settings.glade	2009-03-11 19:38:52 UTC (rev 6886)
@@ -876,7 +876,7 @@
                                     <child>
                                       <widget class="GtkLabel" id="label3">
                                         <property name="visible">True</property>
-                                        <property name="label" translatable="yes">Considre the computer on low power when the main power reaches:</property>
+                                        <property name="label" translatable="yes">Consider the computer on low power when the main power reaches:</property>
                                       </widget>
                                       <packing>
                                         <property name="expand">False</property>
@@ -884,13 +884,14 @@
                                       </packing>
                                     </child>
                                     <child>
-                                      <widget class="GtkSpinButton" id="spinbutton1">
+                                      <widget class="GtkSpinButton" id="critical-spin">
                                         <property name="visible">True</property>
                                         <property name="can_focus">True</property>
                                         <property name="invisible_char">&#x25CF;</property>
+                                        <property name="caps_lock_warning">False</property>
+                                        <property name="adjustment">5 5 20 1 0 0</property>
                                       </widget>
                                       <packing>
-                                        <property name="expand">False</property>
                                         <property name="position">1</property>
                                       </packing>
                                     </child>
@@ -901,7 +902,17 @@
                                   </packing>
                                 </child>
                                 <child>
-                                  <placeholder/>
+                                  <widget class="GtkCheckButton" id="lock-screen">
+                                    <property name="label" translatable="yes">Lock screen when going for suspend/hibernate</property>
+                                    <property name="visible">True</property>
+                                    <property name="can_focus">True</property>
+                                    <property name="receives_default">False</property>
+                                    <property name="draw_indicator">True</property>
+                                  </widget>
+                                  <packing>
+                                    <property name="expand">False</property>
+                                    <property name="position">2</property>
+                                  </packing>
                                 </child>
                               </widget>
                             </child>

Modified: xfce4-power-manager/trunk/src/xfpm-battery.c
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-battery.c	2009-03-11 12:33:35 UTC (rev 6885)
+++ xfce4-power-manager/trunk/src/xfpm-battery.c	2009-03-11 19:38:52 UTC (rev 6886)
@@ -63,6 +63,7 @@
     
     XfpmShowIcon     show_icon;
     XfpmBatteryState state;
+    guint            critical_level;
 };
 
 enum
@@ -269,7 +270,8 @@
 				gboolean is_discharging,
 				guint32 last_full, 
 				guint32 current_charge, 
-				guint percentage)
+				guint percentage,
+				guint8 critical_level)
 {
     if ( !is_charging && !is_discharging && last_full == current_charge )
     {
@@ -288,17 +290,17 @@
     }
     else if ( !is_charging && is_discharging )
     {
-	if ( percentage > 20 )
+	if ( percentage >= 30 )
 	{
 	    *state = BATTERY_IS_DISCHARGING;
 	    return  _("is discharging");
 	}
-	else if ( percentage >= 10 && percentage < 20)
+	else if ( percentage >= critical_level && percentage < 30)
 	{
 	    *state = BATTERY_CHARGE_LOW;
 	    return  _("charge is low");
 	}
-	else if ( percentage < 10 )
+	else if ( percentage < critical_level )
 	{
 	    *state = BATTERY_CHARGE_CRITICAL;
 	    return _("is almost empty");
@@ -324,7 +326,8 @@
     
     XfpmBatteryState state = battery->priv->state;
     const gchar *str = xfpm_battery_get_battery_state (&state, is_charging, is_discharging,
- 						       last_full, current_charge, percentage);
+ 						       last_full, current_charge, percentage, 
+						       battery->priv->critical_level);
     tip = g_strdup_printf("%i%% %s %s", percentage, _get_battery_name(battery->priv->type), str);
     //FIXME: Time for misc batteries
     xfpm_tray_icon_set_tooltip (battery->priv->icon, tip);
@@ -349,7 +352,7 @@
     }
 
     str = xfpm_battery_get_battery_state (&state, is_charging, is_discharging,
-					  last_full, current_charge, percentage);
+					  last_full, current_charge, percentage, battery->priv->critical_level);
     
     if ( time != 0  && time <= 28800 /* 8 hours */ && 
 	 state != BATTERY_FULLY_CHARGED && state != BATTERY_NOT_FULLY_CHARGED )
@@ -568,3 +571,10 @@
     
     gtk_widget_show_all (info);
 }
+
+void xfpm_battery_set_critical_level (XfpmBattery *battery, guint8 critical_level)
+{
+    g_return_if_fail (XFPM_IS_BATTERY(battery));
+    
+    battery->priv->critical_level = critical_level;
+}

Modified: xfce4-power-manager/trunk/src/xfpm-battery.h
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-battery.h	2009-03-11 12:33:35 UTC (rev 6885)
+++ xfce4-power-manager/trunk/src/xfpm-battery.h	2009-03-11 19:38:52 UTC (rev 6886)
@@ -69,6 +69,8 @@
 GtkStatusIcon  		*xfpm_battery_get_status_icon    (XfpmBattery *battery);
 const gchar    		*xfpm_battery_get_icon_name      (XfpmBattery *battery);
 void            	 xfpm_battery_show_info          (XfpmBattery *battery);
+void                     xfpm_battery_set_critical_level (XfpmBattery *battery,
+							  guint8 critical_level);
 
 G_END_DECLS
 

Modified: xfce4-power-manager/trunk/src/xfpm-config.h
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-config.h	2009-03-11 12:33:35 UTC (rev 6885)
+++ xfce4-power-manager/trunk/src/xfpm-config.h	2009-03-11 19:38:52 UTC (rev 6886)
@@ -31,9 +31,12 @@
 /* Configuration */
 #define 	XFPM_CHANNEL_CFG            "xfce4-power-manager"
 #define 	CRITICAL_BATT_ACTION_CFG    "/xfce4-power-manager/critical-battery-action"
+#define         CRITICAL_POWER_LEVEL        "/xfce4-power-manager/critical-power-level"
 
 #define 	POWER_SAVE_ON_BATTERY       "/xfce4-power-manager/power-save-on-battery"
 
+#define         LOCK_SCREEN_ON_SLEEP        "/xfce4-power-manager/lock-screen-suspend-hibernate"
+
 #define 	LCD_BRIGHTNESS_CFG          "/xfce4-power-manager/lcd-brightness"
 #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"

Modified: xfce4-power-manager/trunk/src/xfpm-engine.c
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-engine.c	2009-03-11 12:33:35 UTC (rev 6885)
+++ xfce4-power-manager/trunk/src/xfpm-engine.c	2009-03-11 19:38:52 UTC (rev 6886)
@@ -93,6 +93,7 @@
     XfpmShutdownRequest sleep_button;
     XfpmShutdownRequest lid_button_ac;
     XfpmShutdownRequest lid_button_battery;
+    gboolean            lock_screen;
     
 };
 
@@ -174,9 +175,10 @@
     {
 	TRACE("Going to do %s\n", action);
 	xfpm_send_message_to_network_manager ("sleep");
-	xfpm_lock_screen ();
-	if ( shutdown != XFPM_DO_SHUTDOWN )
+	
+	if ( shutdown != XFPM_DO_SHUTDOWN && engine->priv->lock_screen )
 	    xfpm_lock_screen ();
+	    
 	dbus_hal_shutdown (engine->priv->hbus, action, NULL);
 	xfpm_send_message_to_network_manager ("wake");
     }
@@ -307,7 +309,7 @@
     str = xfconf_channel_get_string (engine->priv->channel, SLEEP_SWITCH_CFG, "Nothing");
     val = xfpm_shutdown_string_to_int (str);
     
-    if ( val == -1 )
+    if ( val == -1 || val == 3)
     {
 	g_warning ("Invalid value %s for property %s, using default\n", str, SLEEP_SWITCH_CFG);
 	engine->priv->sleep_button = XFPM_DO_NOTHING;
@@ -343,6 +345,7 @@
     
     g_free (str);
     
+    engine->priv->lock_screen = xfconf_channel_get_bool (engine->priv->channel, LOCK_SCREEN_ON_SLEEP, TRUE);
 }
 
 static void
@@ -355,7 +358,7 @@
     {
         const gchar *str = g_value_get_string (value);
 	gint val = xfpm_shutdown_string_to_int (str);
-	if ( val == -1 )
+	if ( val == -1 || val == 1 )
 	{
 	    g_warning ("Invalid value %s for property %s, using default\n", str, SLEEP_SWITCH_CFG);
 	    engine->priv->sleep_button = XFPM_DO_NOTHING;
@@ -387,18 +390,12 @@
 	else
 	    engine->priv->lid_button_battery = val;
     }
+    else if ( xfpm_strequal (property, LOCK_SCREEN_ON_SLEEP ) )
+    {
+	engine->priv->lock_screen = g_value_get_boolean (value);
+    }
 }
 
-/*
- *
- */
-/*
-static void
-xfpm_engine_reset_all_properties (XfpmEngine *engine)
-{
-    
-}
-*/
 XfpmEngine *
 xfpm_engine_new(void)
 {

Modified: xfce4-power-manager/trunk/src/xfpm-supply.c
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-supply.c	2009-03-11 12:33:35 UTC (rev 6885)
+++ xfce4-power-manager/trunk/src/xfpm-supply.c	2009-03-11 19:38:52 UTC (rev 6886)
@@ -65,7 +65,7 @@
     
     gboolean 	   adapter_found;
     gboolean       adapter_present;
-    
+    guint8         critical_level;
     guint8         power_management;
 };
 
@@ -611,6 +611,7 @@
 	XfpmBattery *battery = xfpm_battery_new (device);
 	xfpm_battery_set_show_icon (battery, supply->priv->show_icon);
 	xfpm_battery_set_adapter_presence (battery, supply->priv->adapter_present);
+	xfpm_battery_set_critical_level (battery, supply->priv->critical_level);
 	g_hash_table_insert (supply->priv->hash, g_strdup(udi), battery);
 	
 	g_signal_connect (G_OBJECT(battery), "battery-state-changed",
@@ -713,9 +714,31 @@
     g_list_free (list);
 }
 
-//static void
-//xfpm_supply_check_configuration (const gchar *property, 
 static void
+xfpm_supply_set_critical_power_level (XfpmSupply *supply)
+{
+    GList *list = NULL;
+    
+    list = g_hash_table_get_values (supply->priv->hash);
+    
+    if ( !list )
+    	return;
+	
+    int i;
+    for ( i = 0; i<g_list_length(list); i++)
+    {
+	XfpmBattery *battery = NULL;
+	battery = (XfpmBattery *) g_list_nth_data(list, i);
+	
+	if ( battery )
+	{
+	    xfpm_battery_set_critical_level (battery, supply->priv->critical_level);
+	}
+    }
+    g_list_free (list);
+}
+
+static void
 xfpm_supply_property_changed_cb (XfconfChannel *channel, gchar *property, GValue *value, XfpmSupply *supply)
 {
     if ( G_VALUE_TYPE(value) == G_TYPE_INVALID )
@@ -725,7 +748,7 @@
     {
 	const gchar *str = g_value_get_string (value);
 	gint val = xfpm_shutdown_string_to_int (str);
-	if ( val == -1 || val == 3 )
+	if ( val == -1 || val == 3 || val == 1)
 	{
 	    g_warning ("Invalid value %s for property %s, using default\n", str, CRITICAL_BATT_ACTION_CFG);
 	    supply->priv->critical_action = XFPM_DO_NOTHING;
@@ -739,6 +762,19 @@
 	supply->priv->show_icon = val;
 	xfpm_supply_set_battery_show_tray_icon (supply);
     }
+    else if ( xfpm_strequal( property, CRITICAL_POWER_LEVEL) )
+    {
+	guint val = g_value_get_uint (value);
+	if ( val > 20 )
+	{
+	    g_warning ("Value %d for property %s is out of range \n", val, CRITICAL_POWER_LEVEL);
+	    supply->priv->critical_level = 10;
+	}
+	else 
+	    supply->priv->critical_level = val;
+	    
+	xfpm_supply_set_critical_power_level (supply);
+    }
 }
 
 static void
@@ -751,7 +787,7 @@
     str = xfconf_channel_get_string (supply->priv->channel, CRITICAL_BATT_ACTION_CFG, "Nothing");
     val = xfpm_shutdown_string_to_int (str);
     
-    if ( val == -1 || val > 3 )
+    if ( val == -1 || val > 3 || val == 1)
     {
 	g_warning ("Invalid value %s for property %s, using default\n", str, CRITICAL_BATT_ACTION_CFG);
 	supply->priv->critical_action = XFPM_DO_NOTHING;




More information about the Goodies-commits mailing list