[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