[Xfce4-commits] <xfce4-power-manager:master> Support for normal and presentation power mode.

Ali Abdallah noreply at xfce.org
Tue Feb 15 15:06:02 CET 2011


Updating branch refs/heads/master
         to 3e26c5d1eee93c073ece30655a133af50d8d1338 (commit)
       from 03951f243b64868adc6082950ba121bd5c130672 (commit)

commit 3e26c5d1eee93c073ece30655a133af50d8d1338
Author: Ali Abdallah <aliov at xfce.org>
Date:   Tue Feb 15 11:45:32 2011 +0100

    Support for normal and presentation power mode.

 src/xfpm-backlight.c |   19 ++++++-----
 src/xfpm-battery.c   |   23 +++++++++-----
 src/xfpm-dpms.c      |   25 +++++++++++---
 src/xfpm-dpms.h      |    2 +
 src/xfpm-enum-glib.h |    7 ++++
 src/xfpm-manager.c   |    3 ++
 src/xfpm-power.c     |   86 ++++++++++++++++++++++++++++++++++++++++++++++++--
 src/xfpm-power.h     |    3 ++
 8 files changed, 143 insertions(+), 25 deletions(-)

diff --git a/src/xfpm-backlight.c b/src/xfpm-backlight.c
index 0a85e7c..f6043bc 100644
--- a/src/xfpm-backlight.c
+++ b/src/xfpm-backlight.c
@@ -86,16 +86,19 @@ xfpm_backlight_dim_brightness (XfpmBacklight *backlight)
 {
     gboolean ret;
     
-    ret = xfpm_brightness_get_level (backlight->priv->brightness, &backlight->priv->last_level);
-    
-    if ( !ret )
+    if (xfpm_power_get_mode (backlight->priv->power) == XFPM_POWER_MODE_NORMAL )
     {
-	g_warning ("Unable to get current brightness level");
-	return;
+	ret = xfpm_brightness_get_level (backlight->priv->brightness, &backlight->priv->last_level);
+	
+	if ( !ret )
+	{
+	    g_warning ("Unable to get current brightness level");
+	    return;
+	}
+	XFPM_DEBUG ("Current brightness level before dimming : %u", backlight->priv->last_level);
+	
+	backlight->priv->dimmed = xfpm_brightness_dim_down (backlight->priv->brightness);
     }
-    XFPM_DEBUG ("Current brightness level before dimming : %u", backlight->priv->last_level);
-    
-    backlight->priv->dimmed = xfpm_brightness_dim_down (backlight->priv->brightness);
 }
 
 static gboolean
diff --git a/src/xfpm-battery.c b/src/xfpm-battery.c
index 5e49938..18da99c 100644
--- a/src/xfpm-battery.c
+++ b/src/xfpm-battery.c
@@ -94,20 +94,27 @@ G_DEFINE_TYPE (XfpmBattery, xfpm_battery, GTK_TYPE_STATUS_ICON)
 static const gchar * G_GNUC_CONST
 xfpm_battery_get_icon_index (XfpmDeviceType type, guint percent)
 {
-    
-    g_debug ("Battery percent %d\n", percent);
-    
-    if (percent < 10) {
+    if (percent < 10) 
+    {
         return "000";
-    } else if (percent < 30) {
+    } 
+    else if (percent < 30) 
+    {
         return ( (type == XFPM_DEVICE_TYPE_BATTERY || type == XFPM_DEVICE_TYPE_UPS) ? "020" : "030");
-    } else if (percent < 50) {
+    } 
+    else if (percent < 50) 
+    {
         return ( (type == XFPM_DEVICE_TYPE_BATTERY || type == XFPM_DEVICE_TYPE_UPS ) ? "040" : "030");
-    } else if (percent < 70) {
+    } 
+    else if (percent < 70) 
+    {
         return "060";
-    } else if (percent < 90) {
+    } 
+    else if (percent < 90) 
+    {
         return ((type == XFPM_DEVICE_TYPE_BATTERY || type == XFPM_DEVICE_TYPE_UPS) ? "080" : "060");
     }
+    
     return "100";
 }
 
diff --git a/src/xfpm-dpms.c b/src/xfpm-dpms.c
index 56c6e27..53f3721 100644
--- a/src/xfpm-dpms.c
+++ b/src/xfpm-dpms.c
@@ -49,7 +49,7 @@ static void xfpm_dpms_finalize   (GObject *object);
 struct XfpmDpmsPrivate
 {
     XfpmXfconf      *conf;
-    XfpmPower         *power;
+    XfpmPower       *power;
     
     gboolean         dpms_capable;
     gboolean         inhibited;
@@ -149,15 +149,18 @@ xfpm_dpms_get_configuration_timeouts (XfpmDpms *dpms, guint16 *ret_sleep, guint1
     *ret_off =  off_time * 60;
 }
 
-static void
+void
 xfpm_dpms_refresh (XfpmDpms *dpms)
 {
     gboolean enabled;
     guint16 off_timeout;
     guint16 sleep_timeout;
     gboolean sleep_mode;
+    gboolean presentation_mode;
+    
+    presentation_mode = (xfpm_power_get_mode (dpms->priv->power) == XFPM_POWER_MODE_PRESENTATION);
     
-    if ( dpms->priv->inhibited )
+    if ( dpms->priv->inhibited || presentation_mode)
     {
 	xfpm_dpms_disable (dpms);
 	return;
@@ -269,9 +272,19 @@ xfpm_dpms_finalize(GObject *object)
 XfpmDpms *
 xfpm_dpms_new (void)
 {
-    XfpmDpms *dpms = NULL;
-    dpms = g_object_new (XFPM_TYPE_DPMS, NULL);
-    return dpms;
+    static gpointer xfpm_dpms_object = NULL;
+    
+    if ( G_LIKELY (xfpm_dpms_object != NULL ) )
+    {
+	g_object_ref (xfpm_dpms_object);
+    }
+    else
+    {
+	xfpm_dpms_object = g_object_new (XFPM_TYPE_DPMS, NULL);
+	g_object_add_weak_pointer (xfpm_dpms_object, &xfpm_dpms_object);
+    }
+    
+    return XFPM_DPMS (xfpm_dpms_object);
 }
 
 gboolean xfpm_dpms_capable (XfpmDpms *dpms)
diff --git a/src/xfpm-dpms.h b/src/xfpm-dpms.h
index e4baece..125cbba 100644
--- a/src/xfpm-dpms.h
+++ b/src/xfpm-dpms.h
@@ -64,6 +64,8 @@ gboolean        xfpm_dpms_capable         (XfpmDpms *dpms) G_GNUC_PURE;
 
 void		xfpm_dpms_force_level	  (XfpmDpms *dpms, CARD16 level);
 
+void		xfpm_dpms_refresh 	  (XfpmDpms *dpms);
+
 G_END_DECLS
 
 #endif /* HAVE_DPMS */
diff --git a/src/xfpm-enum-glib.h b/src/xfpm-enum-glib.h
index 583e18c..b047eb4 100644
--- a/src/xfpm-enum-glib.h
+++ b/src/xfpm-enum-glib.h
@@ -107,6 +107,13 @@ typedef enum
     
 } XfpmShowIcon;
 
+typedef enum
+{
+    XFPM_POWER_MODE_NORMAL,
+    XFPM_POWER_MODE_PRESENTATION
+    
+} XfpmPowerMode;
+
 G_END_DECLS
 
 #endif /* __XFPM_ENUM_GLIB_H */
diff --git a/src/xfpm-manager.c b/src/xfpm-manager.c
index 2d9a81c..f2a4cc2 100644
--- a/src/xfpm-manager.c
+++ b/src/xfpm-manager.c
@@ -353,6 +353,9 @@ xfpm_manager_inhibit_changed_cb (XfpmInhibit *inhibit, gboolean inhibited, XfpmM
 static void
 xfpm_manager_alarm_timeout_cb (EggIdletime *idle, guint id, XfpmManager *manager)
 {
+    if (xfpm_power_get_mode (manager->priv->power) == XFPM_POWER_MODE_PRESENTATION)
+	return;
+    
     XFPM_DEBUG ("Alarm inactivity timeout id %d", id);
     
     if ( id == TIMEOUT_INACTIVITY_ON_AC || id == TIMEOUT_INACTIVITY_ON_BATTERY )
diff --git a/src/xfpm-power.c b/src/xfpm-power.c
index 667beb8..23f7f25 100644
--- a/src/xfpm-power.c
+++ b/src/xfpm-power.c
@@ -34,6 +34,7 @@
 
 #include "xfpm-power.h"
 #include "xfpm-dbus.h"
+#include "xfpm-dpms.h"
 #include "xfpm-battery.h"
 #include "xfpm-xfconf.h"
 #include "xfpm-notify.h"
@@ -46,9 +47,9 @@
 #include "xfpm-common.h"
 #include "xfpm-power-common.h"
 #include "xfpm-config.h"
-#include "xfpm-enum-glib.h"
 #include "xfpm-debug.h"
 #include "xfpm-enum-types.h"
+#include "egg-idletime.h"
 
 static void xfpm_power_finalize     (GObject *object);
 
@@ -82,6 +83,9 @@ struct XfpmPowerPrivate
     XfpmBatteryCharge overall_state;
     gboolean         critical_action_done;
     
+    XfpmPowerMode    power_mode;
+    EggIdletime     *idletime;
+    
     gboolean	     inhibited;
     
     XfpmNotify	    *notify;
@@ -431,6 +435,40 @@ xfpm_power_tray_exit_activated_cb (gpointer data)
     }
 }
 
+
+static void
+xfpm_power_change_mode (XfpmPower *power, XfpmPowerMode mode)
+{
+    XfpmDpms *dpms;
+    
+    power->priv->power_mode = mode;
+    
+    dpms = xfpm_dpms_new ();
+    xfpm_dpms_refresh (dpms);
+    g_object_unref (dpms);
+    
+    if (mode == XFPM_POWER_MODE_NORMAL)
+    {
+	EggIdletime *idletime;
+	idletime = egg_idletime_new ();
+	egg_idletime_alarm_reset_all (idletime);
+    
+	g_object_unref (idletime);
+    }
+}
+
+static void
+xfpm_power_normal_mode_cb (XfpmPower *power)
+{
+    xfpm_power_change_mode (power, XFPM_POWER_MODE_NORMAL);
+}
+
+static void
+xfpm_power_presentation_mode_cb (XfpmPower *power)
+{
+    xfpm_power_change_mode (power, XFPM_POWER_MODE_PRESENTATION);
+}
+
 static void
 xfpm_power_show_tray_menu (XfpmPower *power, 
 			 GtkStatusIcon *icon, 
@@ -438,7 +476,7 @@ xfpm_power_show_tray_menu (XfpmPower *power,
 			 guint activate_time,
 			 gboolean show_info_item)
 {
-    GtkWidget *menu, *mi, *img;
+    GtkWidget *menu, *mi, *img, *subm;
 
     menu = gtk_menu_new();
 
@@ -493,7 +531,6 @@ xfpm_power_show_tray_menu (XfpmPower *power,
     gtk_menu_shell_append (GTK_MENU_SHELL (menu), mi);
 
     // Power information
-    
     mi = gtk_image_menu_item_new_with_label (_("Power Information"));
     img = gtk_image_new_from_stock (GTK_STOCK_INFO, GTK_ICON_SIZE_MENU);
     gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (mi), img);
@@ -506,6 +543,41 @@ xfpm_power_show_tray_menu (XfpmPower *power,
     gtk_widget_show (mi);
     gtk_menu_shell_append (GTK_MENU_SHELL (menu), mi);
     
+    /** 
+     * Power Mode
+     **/
+    /* TRANSLATOR: Mode here is the power profile (presentation, power save, normal) */
+    mi = gtk_image_menu_item_new_with_label (_("Mode"));
+    img = gtk_image_new_from_icon_name (XFPM_AC_ADAPTER_ICON, GTK_ICON_SIZE_MENU);
+    gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (mi), img);
+    gtk_widget_set_sensitive (mi,TRUE);
+    gtk_widget_show (mi);
+    
+    subm = gtk_menu_new ();
+    gtk_menu_item_set_submenu (GTK_MENU_ITEM (mi), subm);
+    gtk_menu_shell_append (GTK_MENU_SHELL (menu), mi);
+    
+    /* Normal*/
+    mi = gtk_check_menu_item_new_with_label (_("Normal"));
+    gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (mi), power->priv->power_mode == XFPM_POWER_MODE_NORMAL);
+    gtk_widget_set_sensitive (mi,TRUE);
+    
+    g_signal_connect_swapped (mi, "activate",
+			      G_CALLBACK (xfpm_power_normal_mode_cb), power);
+    gtk_widget_show (mi);
+    gtk_menu_shell_append (GTK_MENU_SHELL (subm), mi);
+    
+    /* Normal*/
+    mi = gtk_check_menu_item_new_with_label (_("Presentation"));
+    gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (mi), power->priv->power_mode == XFPM_POWER_MODE_PRESENTATION);
+    gtk_widget_set_sensitive (mi, TRUE);
+    
+    g_signal_connect_swapped (mi, "activate",
+			      G_CALLBACK (xfpm_power_presentation_mode_cb), power);
+    gtk_widget_show (mi);
+    gtk_menu_shell_append (GTK_MENU_SHELL (subm), mi);
+    
+    
     mi = gtk_separator_menu_item_new ();
     gtk_widget_show (mi);
     gtk_menu_shell_append (GTK_MENU_SHELL (menu), mi);
@@ -1254,6 +1326,7 @@ xfpm_power_init (XfpmPower *power)
     power->priv->adapter_icon    = NULL;
     power->priv->overall_state   = XFPM_BATTERY_CHARGE_OK;
     power->priv->critical_action_done = FALSE;
+    power->priv->power_mode      = XFPM_POWER_MODE_NORMAL;
     
     power->priv->inhibit = xfpm_inhibit_new ();
     power->priv->notify  = xfpm_notify_new ();
@@ -1462,6 +1535,13 @@ gboolean xfpm_power_has_battery (XfpmPower *power)
     return ret;
 }
 
+XfpmPowerMode  xfpm_power_get_mode (XfpmPower *power)
+{
+    g_return_val_if_fail (XFPM_IS_POWER (power), XFPM_POWER_MODE_NORMAL);
+    
+    return power->priv->power_mode;
+}
+
 /*
  * 
  * DBus server implementation for org.freedesktop.PowerManagement
diff --git a/src/xfpm-power.h b/src/xfpm-power.h
index 4206f0f..d9798b0 100644
--- a/src/xfpm-power.h
+++ b/src/xfpm-power.h
@@ -22,6 +22,7 @@
 #define __XFPM_POWER_H
 
 #include <glib-object.h>
+#include "xfpm-enum-glib.h"
 
 G_BEGIN_DECLS
 
@@ -74,6 +75,8 @@ void			xfpm_power_hibernate       	(XfpmPower *power,
 
 gboolean		xfpm_power_has_battery		(XfpmPower *power);
 
+XfpmPowerMode           xfpm_power_get_mode		(XfpmPower *power);
+
 G_END_DECLS
 
 #endif /* __XFPM_POWER_H */



More information about the Xfce4-commits mailing list