[Goodies-commits] r7200 - in xfce4-power-manager/trunk: . panel-plugins/inhibit src

Ali Abdallah aliov at xfce.org
Tue Apr 14 19:19:34 CEST 2009


Author: aliov
Date: 2009-04-14 17:19:34 +0000 (Tue, 14 Apr 2009)
New Revision: 7200

Modified:
   xfce4-power-manager/trunk/ChangeLog
   xfce4-power-manager/trunk/configure.ac.in
   xfce4-power-manager/trunk/panel-plugins/inhibit/inhibit-plugin.c
   xfce4-power-manager/trunk/src/xfpm-battery.c
   xfce4-power-manager/trunk/src/xfpm-engine.c
   xfce4-power-manager/trunk/src/xfpm-screen-saver.c
   xfce4-power-manager/trunk/src/xfpm-screen-saver.h
   xfce4-power-manager/trunk/src/xfpm-tray-icon.c
Log:
Add option to inhibit backlight sleep in the context menu+updates on the battery code

Modified: xfce4-power-manager/trunk/ChangeLog
===================================================================
--- xfce4-power-manager/trunk/ChangeLog	2009-04-14 11:36:04 UTC (rev 7199)
+++ xfce4-power-manager/trunk/ChangeLog	2009-04-14 17:19:34 UTC (rev 7200)
@@ -1,4 +1,7 @@
 
+2009-04-14 19:19 Ali aliov at xfce.org 
+	 * : Add option to inhibit backlight sleep in the context menu+updates on the battery code
+
 2009-04-14  9:49 Ali aliov at xfce.org 
 	 * : Commit all changes for beta2
 

Modified: xfce4-power-manager/trunk/configure.ac.in
===================================================================
--- xfce4-power-manager/trunk/configure.ac.in	2009-04-14 11:36:04 UTC (rev 7199)
+++ xfce4-power-manager/trunk/configure.ac.in	2009-04-14 17:19:34 UTC (rev 7200)
@@ -3,7 +3,7 @@
 m4_define([xfpm_version_minor],  [8])
 m4_define([xfpm_version_micro],  [0])
 m4_define([xfpm_version_build],  [])
-m4_define([xfpm_version_tag],[beta2])
+m4_define([xfpm_version_tag],[r at REVISION@])
 m4_define([xfpm_version], [xfpm_version_major().xfpm_version_minor().xfpm_version_micro()ifelse(xfpm_version_tag(), [svn], [xfpm_version_tag().xfpm_version_build()], [xfpm_version_tag()])])
 
 AC_INIT([xfce4-power-manager], [xfpm_version], [http://bugzilla.xfce.org/])

Modified: xfce4-power-manager/trunk/panel-plugins/inhibit/inhibit-plugin.c
===================================================================
--- xfce4-power-manager/trunk/panel-plugins/inhibit/inhibit-plugin.c	2009-04-14 11:36:04 UTC (rev 7199)
+++ xfce4-power-manager/trunk/panel-plugins/inhibit/inhibit-plugin.c	2009-04-14 17:19:34 UTC (rev 7200)
@@ -555,14 +555,14 @@
 
     if ( inhibit_plugin_inhibit_screen_saver (inhibit, 
 					      "org.freedesktop.ScreenSaver",
-					      "/org/freedesktop/ScreenSaver/Inhibit",
+					      "/org/freedesktop/ScreenSaver",
 					      "org.freedesktop.ScreenSaver") )
     {
 	inhibit->saver_inhibited = TRUE;
     }
     else if ( inhibit_plugin_inhibit_screen_saver (inhibit, 
 						   "org.gnome.ScreenSaver",
-						   "/org/gnome/ScreenSaver/Inhibit",
+						   "/org/gnome/ScreenSaver",
 					           "org.gnome.ScreenSaver") )
     {
 	

Modified: xfce4-power-manager/trunk/src/xfpm-battery.c
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-battery.c	2009-04-14 11:36:04 UTC (rev 7199)
+++ xfce4-power-manager/trunk/src/xfpm-battery.c	2009-04-14 17:19:34 UTC (rev 7200)
@@ -155,15 +155,14 @@
     
 static void
 xfpm_battery_refresh_icon (XfpmBattery *battery, 
-			   gboolean is_present,
-			   guint percentage
-			   )
+			   XfpmBatteryState state,
+			   guint percentage)
 {
     gchar *icon;
 
     XFPM_DEBUG_ENUM ("battery state", battery->priv->state, XFPM_TYPE_BATTERY_STATE)
     
-    if ( !is_present )
+    if ( state == BATTERY_NOT_PRESENT )
     {
 	xfpm_tray_icon_set_icon (battery->priv->icon, 
 				 battery->priv->type == HAL_DEVICE_TYPE_UPS ? "gpm-ups-missing" : "gpm-primary-missing");
@@ -171,7 +170,7 @@
     }
     
     /* Battery full */
-    if ( battery->priv->state == BATTERY_FULLY_CHARGED )
+    if ( state == BATTERY_FULLY_CHARGED )
     {
 	if ( battery->priv->type == HAL_DEVICE_TYPE_PRIMARY)
 	    xfpm_tray_icon_set_icon (battery->priv->icon, battery->priv->adapter_present ? "gpm-primary-charged" : "gpm-primary-100");
@@ -184,7 +183,7 @@
 	    g_free(icon);
 	}
     }
-    else if ( battery->priv->state == BATTERY_NOT_FULLY_CHARGED )
+    else if ( state == BATTERY_NOT_FULLY_CHARGED )
     {
 	if ( battery->priv->adapter_present )
 	{
@@ -203,7 +202,7 @@
 	g_free(icon);
 	
     }
-    else if ( battery->priv->state == BATTERY_IS_CHARGING )
+    else if ( state == BATTERY_IS_CHARGING )
     {
 	icon = g_strdup_printf("%s%s-%s",
 			      battery->priv->icon_prefix, 
@@ -213,8 +212,8 @@
 	xfpm_tray_icon_set_icon (battery->priv->icon, icon);
 	g_free(icon);
     }
-    else if ( battery->priv->state == BATTERY_IS_DISCHARGING || battery->priv->state == BATTERY_CHARGE_CRITICAL ||
-	      battery->priv->state == BATTERY_CHARGE_LOW )
+    else if ( state == BATTERY_IS_DISCHARGING || state == BATTERY_CHARGE_CRITICAL ||
+	      state == BATTERY_CHARGE_LOW )
     {
 	icon = g_strdup_printf("%s%s",
 			      battery->priv->icon_prefix, 
@@ -227,23 +226,20 @@
 }
 
 static void
-xfpm_battery_refresh_state (XfpmBattery *battery, XfpmBatteryState state)
+xfpm_battery_notify (XfpmBattery *battery)
 {
     const gchar *message;
     gboolean notify;
     
     notify = xfpm_xfconf_get_property_bool (battery->priv->conf, GENERAL_NOTIFICATION_CFG);
     
-    if ( battery->priv->state != state)
+    if ( notify )
     {
-	battery->priv->state = state;
-	if ( notify )
-	{
-	    message = xfpm_battery_get_message_from_battery_state (state, battery->priv->adapter_present );
-	    if ( !message )
-		goto signal;
+	message = xfpm_battery_get_message_from_battery_state (battery->priv->state, battery->priv->adapter_present);
+	if ( !message )
+	    return;
 	
-	    xfpm_notify_show_notification (battery->priv->notify, 
+	xfpm_notify_show_notification (battery->priv->notify, 
 				       _("Xfce power manager"), 
 				       message, 
 				       xfpm_tray_icon_get_icon_name (battery->priv->icon),
@@ -251,10 +247,6 @@
 				       battery->priv->type == HAL_DEVICE_TYPE_PRIMARY ? FALSE : TRUE,
 				       XFPM_NOTIFY_NORMAL,
 				       xfpm_tray_icon_get_tray_icon(battery->priv->icon));
-	}
-signal:
-	g_signal_emit (G_OBJECT(battery), signals[BATTERY_STATE_CHANGED], 0, state);
-	TRACE("Emitting signal battery state changed");
     }
 }
 
@@ -324,11 +316,25 @@
 }
 
 static void
-xfpm_battery_refresh_tooltip_misc (XfpmBattery *battery, gboolean is_present, 
-				   gboolean is_charging, gboolean is_discharging,
-				   guint32 last_full, guint32 current_charge,
-				   guint percentage, guint time)
+xfpm_battery_refresh_common (XfpmBattery *battery, guint percentage, XfpmBatteryState state)
 {
+    xfpm_battery_refresh_icon (battery, state, percentage);
+    
+    if ( battery->priv->state != state)
+    {
+	battery->priv->state = state;
+	TRACE("Emitting signal battery state changed");
+	g_signal_emit (G_OBJECT(battery), signals[BATTERY_STATE_CHANGED], 0, state);
+	xfpm_battery_notify (battery);
+    }
+}
+
+static void
+xfpm_battery_refresh_misc (XfpmBattery *battery, gboolean is_present, 
+			   gboolean is_charging, gboolean is_discharging,
+			   guint32 last_full, guint32 current_charge,
+			   guint percentage, guint time)
+{
     gchar *tip;
     guint critical_level = xfpm_xfconf_get_property_int (battery->priv->conf, CRITICAL_POWER_LEVEL );
     
@@ -337,6 +343,7 @@
 	tip = g_strdup_printf ("%s %s", _get_battery_name(battery->priv->type), _("is not present"));
 	xfpm_tray_icon_set_tooltip (battery->priv->icon, tip);
 	g_free(tip);
+	battery->priv->state = BATTERY_NOT_PRESENT;
 	return;
     }
     
@@ -348,14 +355,15 @@
     //FIXME: Time for misc batteries
     xfpm_tray_icon_set_tooltip (battery->priv->icon, tip);
     g_free (tip);
-    xfpm_battery_refresh_state (battery, state);
+    
+    xfpm_battery_refresh_common (battery, percentage, state);
 }
 
 static void
-xfpm_battery_refresh_tooltip_primary (XfpmBattery *battery, gboolean is_present, 
-				      gboolean is_charging, gboolean is_discharging,
-				      guint32 last_full, guint32 current_charge,
-				      guint percentage, guint time)
+xfpm_battery_refresh_primary (XfpmBattery *battery, gboolean is_present, 
+			      gboolean is_charging, gboolean is_discharging,
+			      guint32 last_full, guint32 current_charge,
+			      guint percentage, guint time)
 {
     gchar *tip;
     const gchar *str;
@@ -366,6 +374,7 @@
     if ( !is_present )
     {
 	xfpm_tray_icon_set_tooltip(battery->priv->icon, _("Battery not present"));
+	battery->priv->state = BATTERY_NOT_PRESENT;
 	return;
     }
 
@@ -420,7 +429,8 @@
 
     xfpm_tray_icon_set_tooltip(battery->priv->icon, tip);
     g_free(tip);
-    xfpm_battery_refresh_state (battery, state);
+
+    xfpm_battery_refresh_common (battery, percentage, state);
 }
 
 static void
@@ -442,16 +452,15 @@
 		  NULL);
     
     battery->priv->type == HAL_DEVICE_TYPE_PRIMARY ?
-			   xfpm_battery_refresh_tooltip_primary (battery, is_present, 
-								 is_charging, is_discharging, 
-								 last_full, current_charge,
-								 percentage, time)
+			   xfpm_battery_refresh_primary (battery, is_present, 
+							 is_charging, is_discharging, 
+							 last_full, current_charge,
+							 percentage, time)
   					           :
-			    xfpm_battery_refresh_tooltip_misc   (battery, is_present, 
-								 is_charging, is_discharging, 
-								 last_full, current_charge,
-								 percentage, time);
-    xfpm_battery_refresh_icon (battery, is_present, percentage);
+			    xfpm_battery_refresh_misc   (battery, is_present, 
+							 is_charging, is_discharging, 
+							 last_full, current_charge,
+							 percentage, time);
     xfpm_battery_refresh_visible_icon (battery);
 }
 
@@ -625,10 +634,9 @@
     return battery->priv->device;
 }
 
-//FIXME: default g_return value
 XfpmBatteryState xfpm_battery_get_state (XfpmBattery *battery)
 {
-    g_return_val_if_fail (XFPM_IS_BATTERY(battery), 0);
+    g_return_val_if_fail (XFPM_IS_BATTERY(battery), BATTERY_NOT_PRESENT);
     
     return battery->priv->state;
 }

Modified: xfce4-power-manager/trunk/src/xfpm-engine.c
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-engine.c	2009-04-14 11:36:04 UTC (rev 7199)
+++ xfce4-power-manager/trunk/src/xfpm-engine.c	2009-04-14 17:19:34 UTC (rev 7200)
@@ -47,6 +47,7 @@
 #include "xfpm-button.h"
 #include "xfpm-inhibit.h"
 #include "xfpm-backlight.h"
+#include "xfpm-screen-saver.h"
 #include "xfpm-shutdown.h"
 #include "xfpm-idle.h"
 #include "xfpm-errors.h"
@@ -78,6 +79,7 @@
     XfpmShutdown        *shutdown;
     XfpmButton          *button;
     XfpmIdle            *idle;
+    XfpmScreenSaver     *srv;
 #ifdef HAVE_DPMS
     XfpmDpms *dpms;
 #endif
@@ -352,7 +354,22 @@
 {
     TRACE ("Alarm inactivity timeout id %d", id);
     gboolean sleep_mode;
+    gboolean saver;
     
+    if ( engine->priv->inhibited )
+    {
+	TRACE ("Power manager is currently inhibited");
+	return;
+    }
+    
+    saver = xfpm_screen_saver_get_inhibit (engine->priv->srv);
+    
+    if ( saver )
+    {
+	TRACE ("User disabled sleep on the context menu");
+	return;
+    }
+    
     sleep_mode = xfpm_xfconf_get_property_bool (engine->priv->conf, INACTIVITY_SLEEP_MODE);
 
     if ( id == TIMEOUT_INACTIVITY_ON_AC && engine->priv->on_battery == FALSE )
@@ -399,7 +416,7 @@
     engine->priv->shutdown = xfpm_shutdown_new ();
     engine->priv->adapter = xfpm_adapter_new ();
     engine->priv->notify = xfpm_notify_new ();
-
+    engine->priv->srv    = xfpm_screen_saver_new ();
     engine->priv->inhibit = xfpm_inhibit_new ();
     engine->priv->inhibited = FALSE;
 
@@ -466,6 +483,8 @@
     g_object_unref (engine->priv->shutdown);
 
     g_object_unref (engine->priv->adapter);
+    
+    g_object_unref (engine->priv->srv);
 
     if (engine->priv->bk)
 	g_object_unref (engine->priv->bk);

Modified: xfce4-power-manager/trunk/src/xfpm-screen-saver.c
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-screen-saver.c	2009-04-14 11:36:04 UTC (rev 7199)
+++ xfce4-power-manager/trunk/src/xfpm-screen-saver.c	2009-04-14 17:19:34 UTC (rev 7200)
@@ -37,6 +37,7 @@
 #include "libxfpm/xfpm-dbus.h"
 
 #include "xfpm-screen-saver.h"
+#include "xfpm-inhibit.h"
 #include "xfpm-dbus-monitor.h"
 
 /* Init */
@@ -47,15 +48,12 @@
 #define XFPM_SCREEN_SAVER_GET_PRIVATE(o) \
 (G_TYPE_INSTANCE_GET_PRIVATE((o), XFPM_TYPE_SCREEN_SAVER, XfpmScreenSaverPrivate))
 
-#define MAX_SCREEN_SAVER_INHIBITORS 10
-
 struct XfpmScreenSaverPrivate
 {
-    DBusConnection  *bus;
-    XfpmDBusMonitor *monitor;
-    GPtrArray       *array;
+    DBusGConnection *bus;
+    XfpmInhibit     *inhibit;
     
-    guint            inhibitors;
+    gboolean         inhibited;
 };
 
 enum
@@ -70,86 +68,13 @@
 
 G_DEFINE_TYPE(XfpmScreenSaver, xfpm_screen_saver, G_TYPE_OBJECT)
 
-static gchar *
-xfpm_screen_saver_find_unique_name (XfpmScreenSaver *srv, const gchar *unique_name)
-{
-    gint i;
-    gchar *name;
-    
-    for ( i = 0; i<srv->priv->array->len; i++)
-    {
-	name = g_ptr_array_index (srv->priv->array, i);
-	if ( g_strcmp0 (name, unique_name) == 0 )
-	    return name;
-    }
-    return NULL;
-}
-
 static void
-xfpm_screen_saver_uninhibit_message (XfpmScreenSaver *srv, const gchar *unique_name)
+xfpm_screen_saver_inhibit_changed_cb (XfpmInhibit *inhbit, gboolean inhibited, XfpmScreenSaver *srv)
 {
-    gchar *name;
-    
-    name = xfpm_screen_saver_find_unique_name (srv, unique_name);
-    
-    if ( name )
-    {
-	TRACE ("%s", name);
-	xfpm_dbus_monitor_remove_match (srv->priv->monitor, name);
-	g_ptr_array_remove (srv->priv->array, name);
-	g_free (name);
-	
-	srv->priv->inhibitors--;
-
-	if ( srv->priv->inhibitors == 0 )
-	{
-	    g_signal_emit (G_OBJECT(srv), signals[SCREEN_SAVER_INHIBITED], 0, FALSE);
-	}
-    }
+    g_signal_emit (G_OBJECT (srv), signals [SCREEN_SAVER_INHIBITED], 0, inhibited);
 }
 
 static void
-xfpm_screen_saver_inhibit_message (XfpmScreenSaver *srv, const gchar *unique_name)
-{
-    if (xfpm_screen_saver_find_unique_name (srv, unique_name) )
-	return /* We have it already!*/;
-	
-    TRACE ("%s", unique_name);
-    g_ptr_array_add (srv->priv->array, g_strdup (unique_name));
-    xfpm_dbus_monitor_add_match (srv->priv->monitor, unique_name);
-    
-    if ( srv->priv->inhibitors == 0 )
-    {
-	g_signal_emit (G_OBJECT(srv), signals[SCREEN_SAVER_INHIBITED], 0, TRUE);
-    }
-    
-    srv->priv->inhibitors++;
-}
-
-static DBusHandlerResult 
-xfpm_screen_saver_filter (DBusConnection *connection, DBusMessage *message, void *data)
-{
-    XfpmScreenSaver *srv = ( XfpmScreenSaver *)data;
-    
-    if ( dbus_message_is_method_call (message, "org.gnome.ScreenSaver", "Inhibit") )
-	xfpm_screen_saver_inhibit_message (srv, dbus_message_get_sender (message) );
-    else if ( dbus_message_is_method_call (message, "org.gnome.ScreenSaver", "UnInhibit") )
-	xfpm_screen_saver_uninhibit_message (srv, dbus_message_get_sender (message) );
-    else if ( dbus_message_is_method_call (message, "org.freedesktop.ScreenSaver", "Inhibit") )
-	xfpm_screen_saver_inhibit_message (srv, dbus_message_get_sender (message) );
-    else if ( dbus_message_is_method_call (message, "org.freedesktop.ScreenSaver", "UnInhibit") )
-	xfpm_screen_saver_uninhibit_message (srv, dbus_message_get_sender (message) );
-    
-    return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; /* Keep on as we just want to spy */
-}
-
-static void
-xfpm_screen_saver_connection_lost (XfpmDBusMonitor *monitor, gchar *unique_name, XfpmScreenSaver *srv)
-{
-    xfpm_screen_saver_uninhibit_message (srv, unique_name);
-}
-
-static void
 xfpm_screen_saver_class_init(XfpmScreenSaverClass *klass)
 {
     GObjectClass *object_class = G_OBJECT_CLASS(klass);
@@ -171,87 +96,22 @@
 static void
 xfpm_screen_saver_init(XfpmScreenSaver *srv)
 {
-    DBusError error;
-    dbus_error_init (&error);
-    
     srv->priv = XFPM_SCREEN_SAVER_GET_PRIVATE(srv);
     
-    srv->priv->bus = dbus_bus_get (DBUS_BUS_SESSION, &error);
-    srv->priv->monitor = xfpm_dbus_monitor_new ();
-    g_signal_connect (srv->priv->monitor, "connection-lost",
-		      G_CALLBACK (xfpm_screen_saver_connection_lost), srv);
-		      
-    srv->priv->array   	  = g_ptr_array_new ();
-    srv->priv->inhibitors = 0;
-    
-    if ( dbus_error_is_set (&error) )
-    {
-	g_critical ("Unable to get session bus: %s", error.message);
-	dbus_error_free (&error);
-	goto out;
-    }
-    
-    dbus_bus_add_match (srv->priv->bus, 
-			"type='method_call',interface='org.gnome.ScreenSaver'",
-			&error);
-			
-    if ( dbus_error_is_set (&error) )
-    {
-	g_warning ("Failed to add match for interface org.gnome.ScreenSaver: %s", error.message);
-	dbus_error_free (&error);
-    }
-	
-    dbus_error_init (&error);
-    
-    dbus_bus_add_match (srv->priv->bus, 
-			"type='method_call',interface='org.freedesktop.ScreenSaver'",
-			&error);
-			
-    if ( dbus_error_is_set (&error) )
-    {
-	g_warning ("Failed to add match for interface org.freedesktop.ScreenSaver: %s", error.message);
-	dbus_error_free (&error);
-    }
-	
-    if (!dbus_connection_add_filter (srv->priv->bus, xfpm_screen_saver_filter, srv, NULL) )
-    {
-	g_warning ("Couldn't add filter");
-    }
-out:
-    ;
+    srv->priv->inhibit = xfpm_inhibit_new ();
+    g_signal_connect (srv->priv->inhibit, "has-inhibit-changed",
+		      G_CALLBACK (xfpm_screen_saver_inhibit_changed_cb), srv);
 }
 
 static void
 xfpm_screen_saver_finalize(GObject *object)
 {
     XfpmScreenSaver *srv;
-    gint i;
-    gchar *name;
 
     srv = XFPM_SCREEN_SAVER(object);
     
-    dbus_bus_remove_match (srv->priv->bus,
-			  "type='method_call',interface='org.gnome.ScreenSaver'", 
-			  NULL);
+    g_object_unref (srv->priv->inhibit);
     
-    dbus_bus_remove_match (srv->priv->bus,
-			  "type='method_call',interface='org.freedesktop.ScreenSaver'", 
-			  NULL);
-
-    dbus_connection_unref (srv->priv->bus);
-    
-    g_object_unref (srv->priv->monitor);
-
-    
-    for ( i = 0; i<srv->priv->array->len; i++)
-    {
-	name = g_ptr_array_index (srv->priv->array, i);
-	g_ptr_array_remove (srv->priv->array, name);
-	g_free (name);
-    }
-    
-    g_ptr_array_free (srv->priv->array, TRUE);
-
     G_OBJECT_CLASS(xfpm_screen_saver_parent_class)->finalize(object);
 }
 
@@ -269,3 +129,32 @@
     }
     return XFPM_SCREEN_SAVER (xfpm_screen_saver_object);
 }
+
+void xfpm_screen_saver_inhibit (XfpmScreenSaver *srv)
+{
+    g_return_if_fail (XFPM_IS_SCREEN_SAVER (srv));
+    
+    if ( srv->priv->inhibited == FALSE )
+    {
+	srv->priv->inhibited = TRUE;
+	g_signal_emit (G_OBJECT (srv), signals[SCREEN_SAVER_INHIBITED], 0, srv->priv->inhibited);
+    }
+}
+
+void xfpm_screen_saver_uninhibit (XfpmScreenSaver *srv)
+{
+    g_return_if_fail (XFPM_IS_SCREEN_SAVER (srv));
+    
+    if ( srv->priv->inhibited == TRUE )
+    {
+	srv->priv->inhibited = FALSE;
+	g_signal_emit (G_OBJECT (srv), signals[SCREEN_SAVER_INHIBITED], 0, srv->priv->inhibited);
+    }
+}
+
+gboolean xfpm_screen_saver_get_inhibit (XfpmScreenSaver *srv)
+{
+    g_return_val_if_fail (XFPM_IS_SCREEN_SAVER (srv), FALSE);
+    
+    return srv->priv->inhibited;
+}

Modified: xfce4-power-manager/trunk/src/xfpm-screen-saver.h
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-screen-saver.h	2009-04-14 11:36:04 UTC (rev 7199)
+++ xfce4-power-manager/trunk/src/xfpm-screen-saver.h	2009-04-14 17:19:34 UTC (rev 7200)
@@ -48,8 +48,15 @@
 } XfpmScreenSaverClass;
 
 GType        			  xfpm_screen_saver_get_type        (void) G_GNUC_CONST;
+
 XfpmScreenSaver       	 	 *xfpm_screen_saver_new             (void);
 
+void				  xfpm_screen_saver_inhibit         (XfpmScreenSaver *srv);
+
+void 				  xfpm_screen_saver_uninhibit       (XfpmScreenSaver *srv);
+
+gboolean                          xfpm_screen_saver_get_inhibit     (XfpmScreenSaver *srv);
+
 G_END_DECLS
 
 #endif /* __XFPM_SCREEN_SAVER_H */

Modified: xfce4-power-manager/trunk/src/xfpm-tray-icon.c
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-tray-icon.c	2009-04-14 11:36:04 UTC (rev 7199)
+++ xfce4-power-manager/trunk/src/xfpm-tray-icon.c	2009-04-14 17:19:34 UTC (rev 7200)
@@ -39,6 +39,7 @@
 #include "xfpm-tray-icon.h"
 #include "xfpm-shutdown.h"
 #include "xfpm-inhibit.h"
+#include "xfpm-screen-saver.h"
 #include "xfpm-xfconf.h"
 #include "xfpm-config.h"
 
@@ -52,10 +53,11 @@
 
 struct XfpmTrayIconPrivate
 {
-    XfpmShutdown  *shutdown;
-    XfpmXfconf    *conf;
-    XfpmNotify    *notify;
-    XfpmInhibit   *inhibit;
+    XfpmShutdown    *shutdown;
+    XfpmXfconf      *conf;
+    XfpmNotify      *notify;
+    XfpmInhibit     *inhibit;
+    XfpmScreenSaver *srv;
     
     GtkStatusIcon *icon;
     GQuark         icon_quark;
@@ -229,6 +231,16 @@
 }
 
 static void
+xfpm_tray_icon_inhibit_active_cb (GtkWidget *mi, XfpmTrayIcon *tray)
+{
+    gboolean active;
+    active = xfpm_screen_saver_get_inhibit (tray->priv->srv);
+    
+    active == FALSE ? xfpm_screen_saver_inhibit   (tray->priv->srv) :
+		      xfpm_screen_saver_uninhibit (tray->priv->srv);
+}
+
+static void
 xfpm_tray_icon_popup_menu_cb (GtkStatusIcon *icon, guint button, 
 			      guint activate_time, XfpmTrayIcon *tray)
 {
@@ -239,6 +251,8 @@
     gboolean can_hibernate = FALSE ;
     gboolean caller = FALSE;
 
+    gboolean saver_inhibited;
+
     g_object_get (G_OBJECT (tray->priv->shutdown),
 		  "caller-privilege", &caller,
 		  "can-suspend", &can_suspend,
@@ -274,7 +288,21 @@
     }
     gtk_widget_show(mi);
     gtk_menu_shell_append(GTK_MENU_SHELL(menu),mi);
+
+    saver_inhibited = xfpm_screen_saver_get_inhibit (tray->priv->srv);
+    mi = gtk_image_menu_item_new_with_label (saver_inhibited ? _("Clear inhibit") : _("Inhibit"));
     
+    gtk_widget_set_tooltip_text (mi, _("Disable or enable automatic sleep, setting this will tell the power manager "\
+				       "to disable backlight sleep, for example you could active the inhibit if you are watching a movie."));
+    
+    img = gtk_image_new_from_stock (saver_inhibited ? GTK_STOCK_CANCEL : GTK_STOCK_APPLY, GTK_ICON_SIZE_MENU);
+    gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(mi),img);
+    g_signal_connect (G_OBJECT (mi), "activate",
+		      G_CALLBACK (xfpm_tray_icon_inhibit_active_cb), tray);
+    gtk_widget_set_sensitive (mi, TRUE);
+    gtk_widget_show(mi);
+    gtk_menu_shell_append(GTK_MENU_SHELL(menu),mi);
+    
     if ( tray->priv->info_menu )
     {
 	mi = gtk_separator_menu_item_new();
@@ -378,6 +406,7 @@
     tray->priv->notify = xfpm_notify_new ();
     tray->priv->inhibited = FALSE;
     tray->priv->inhibit = xfpm_inhibit_new ();
+    tray->priv->srv     = xfpm_screen_saver_new ();
     
     tray->priv->info_menu = TRUE;
     tray->priv->icon_quark = 0;
@@ -411,6 +440,8 @@
     g_object_unref (tray->priv->notify);
     
     g_object_unref (tray->priv->inhibit);
+    
+    g_object_unref (tray->priv->srv);
 
     G_OBJECT_CLASS(xfpm_tray_icon_parent_class)->finalize(object);
 }




More information about the Goodies-commits mailing list