[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