[Goodies-commits] r5681 - xfce4-power-manager/trunk/src
Ali Abdallah
aliov at xfce.org
Sat Oct 18 20:26:20 CEST 2008
Author: aliov
Date: 2008-10-18 18:26:20 +0000 (Sat, 18 Oct 2008)
New Revision: 5681
Modified:
xfce4-power-manager/trunk/src/xfpm-ac-adapter.c
xfce4-power-manager/trunk/src/xfpm-ac-adapter.h
xfce4-power-manager/trunk/src/xfpm-battery-icon.c
xfce4-power-manager/trunk/src/xfpm-battery-icon.h
xfce4-power-manager/trunk/src/xfpm-battery.c
xfce4-power-manager/trunk/src/xfpm-battery.h
xfce4-power-manager/trunk/src/xfpm-button.c
xfce4-power-manager/trunk/src/xfpm-button.h
xfce4-power-manager/trunk/src/xfpm-common.h
xfce4-power-manager/trunk/src/xfpm-driver.c
xfce4-power-manager/trunk/src/xfpm-hal.c
xfce4-power-manager/trunk/src/xfpm-hal.h
xfce4-power-manager/trunk/src/xfpm-lcd-brightness.c
xfce4-power-manager/trunk/src/xfpm-notify.c
xfce4-power-manager/trunk/src/xfpm-notify.h
xfce4-power-manager/trunk/src/xfpm-settings.c
xfce4-power-manager/trunk/src/xfpm-settings.h
Log:
Lot of improvements and bug fixes
Modified: xfce4-power-manager/trunk/src/xfpm-ac-adapter.c
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-ac-adapter.c 2008-10-18 18:05:53 UTC (rev 5680)
+++ xfce4-power-manager/trunk/src/xfpm-ac-adapter.c 2008-10-18 18:26:20 UTC (rev 5681)
@@ -101,12 +101,11 @@
SystemFormFactor factor;
GQuark adapter_udi;
-
- gboolean adapter_found;
gboolean present;
- gboolean can_suspend;
- gboolean can_hibernate;
+ gboolean adapter_found;
+ guint8 power_management;
+
};
enum
@@ -157,7 +156,9 @@
priv->hal = xfpm_hal_new();
priv->adapter_udi = 0 ;
-
+
+ priv->power_management = 0 ;
+
g_signal_connect(adapter,"size-changed",
G_CALLBACK(xfpm_ac_adapter_size_changed_cb),NULL);
g_signal_connect(adapter,"popup-menu",
@@ -395,7 +396,7 @@
gtk_widget_set_sensitive(mi,FALSE);
- if ( priv->can_hibernate )
+ if ( priv->power_management & SYSTEM_CAN_HIBERNATE )
{
gtk_widget_set_sensitive(mi,TRUE);
g_signal_connect(mi,"activate",
@@ -411,7 +412,7 @@
gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(mi),img);
gtk_widget_set_sensitive(mi,FALSE);
- if ( priv->can_suspend )
+ if ( priv->power_management & SYSTEM_CAN_SUSPEND )
{
gtk_widget_set_sensitive(mi,TRUE);
g_signal_connect(mi,"activate",
@@ -476,13 +477,11 @@
void
xfpm_ac_adapter_set_sleep_info (XfpmAcAdapter *adapter,
- gboolean can_hibernate,
- gboolean can_suspend)
+ guint8 sleep_info)
{
g_return_if_fail(XFPM_IS_AC_ADAPTER(adapter));
XfpmAcAdapterPrivate *priv;
priv = XFPM_AC_ADAPTER_GET_PRIVATE(adapter);
-
- priv->can_suspend = can_suspend;
- priv->can_hibernate = can_hibernate;
+
+ priv->power_management = sleep_info;
}
Modified: xfce4-power-manager/trunk/src/xfpm-ac-adapter.h
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-ac-adapter.h 2008-10-18 18:05:53 UTC (rev 5680)
+++ xfce4-power-manager/trunk/src/xfpm-ac-adapter.h 2008-10-18 18:26:20 UTC (rev 5681)
@@ -57,6 +57,5 @@
void xfpm_ac_adapter_monitor (XfpmAcAdapter *adapter,
SystemFormFactor factor);
void xfpm_ac_adapter_set_sleep_info (XfpmAcAdapter *adapter,
- gboolean can_hibernate,
- gboolean can_suspend);
+ guint8 sleep_info);
#endif
Modified: xfce4-power-manager/trunk/src/xfpm-battery-icon.c
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-battery-icon.c 2008-10-18 18:05:53 UTC (rev 5680)
+++ xfce4-power-manager/trunk/src/xfpm-battery-icon.c 2008-10-18 18:26:20 UTC (rev 5681)
@@ -103,7 +103,7 @@
"Last full",
"Last battery full charge",
0,
- G_MAXINT16, /*shouldn't be longer */
+ G_MAXUINT32,
4000,
G_PARAM_READWRITE|G_PARAM_CONSTRUCT ));
@@ -112,7 +112,7 @@
g_param_spec_uint("batt-critical-level",
"Battery critical level",
"Low battery level",
- 0,
+ 1,
15,
8,
G_PARAM_READWRITE|G_PARAM_CONSTRUCT));
@@ -284,7 +284,6 @@
return "100";
}
-
static gchar *
xfpm_battery_icon_get_icon_prefix(XfpmBatteryType type)
{
@@ -384,8 +383,10 @@
}
else
{
- xfpm_notify_simple(_("Xfce power manager"),message,5000,NOTIFY_URGENCY_LOW,
- GTK_STATUS_ICON(battery_icon),icon_name,0);
+ NotifyNotification *n =
+ xfpm_notify_new(_("Xfce power manager"),message,5000,NOTIFY_URGENCY_LOW,
+ GTK_STATUS_ICON(battery_icon),icon_name);
+ xfpm_notify_show_notification(n,0);
}
}
#endif
@@ -423,7 +424,7 @@
}
GtkStatusIcon *
-xfpm_battery_icon_new(guint last_full,guint battery_type,
+xfpm_battery_icon_new(guint32 last_full,XfpmBatteryType battery_type,
guint critical_level,gboolean visible)
{
XfpmBatteryIcon *battery_icon = NULL;
@@ -442,16 +443,48 @@
}
void
-xfpm_battery_icon_set_state(XfpmBatteryIcon *battery_icon,guint charge,guint remaining_per,
- gboolean present,gboolean is_charging,gboolean is_discharging,
- gboolean ac_adapter_present)
+xfpm_battery_icon_set_state(XfpmBatteryIcon *battery_icon,guint32 charge,guint per,
+ guint32 remaining_time,gboolean present,
+ gboolean is_charging,gboolean is_discharging,
+ gboolean ac_adapter_present)
{
g_return_if_fail(XFPM_IS_BATTERY_ICON(battery_icon));
battery_icon->ac_adapter_present = ac_adapter_present;
battery_icon->battery_present = present;
+#ifdef DEBUG
+ gchar *content_is_charging;
+ gchar *content_is_discharging;
+ gchar *content_present;
- gchar tip[128];
+ GValue value = { 0, };
+ g_value_init(&value,G_TYPE_BOOLEAN);
+ g_value_set_boolean(&value,is_charging);
+ content_is_charging = g_strdup_value_contents(&value);
+ g_value_set_boolean(&value,is_discharging);
+ content_is_discharging = g_strdup_value_contents(&value);
+
+ g_value_set_boolean(&value,present);
+ content_present = g_strdup_value_contents(&value);
+
+ XFPM_DEBUG("Setting battery state charge=%d is_charging:%s is_discharging:%s present:%s \n",charge,
+ content_is_charging,content_is_discharging,content_present);
+ g_free(content_is_charging);
+ g_free(content_is_discharging);
+ g_free(content_present);
+#endif
+ guint remaining_per;
+ if ( per > 0 )
+ {
+ remaining_per = per;
+ }
+ else
+ {
+ remaining_per = 1;
+ }
+
+ gchar tip[256];
+
if ( present == FALSE )
{
xfpm_battery_icon_update(battery_icon,NOT_PRESENT,remaining_per);
@@ -461,23 +494,19 @@
}
sprintf(tip,"%i",remaining_per);
- strcat(tip,"%");
+ strcat(tip,_("%"));
- XFPM_DEBUG("Setting battery state charge=%d is_charging=%d is_discharging=%d \n",charge,
- is_charging,is_discharging);
-
// battery is full
if ( is_charging == FALSE && is_discharging == FALSE && battery_icon->last_full == charge )
{
strcat(tip,_(" Battery fully charged"));
- gtk_status_icon_set_tooltip(GTK_STATUS_ICON(battery_icon),tip);
xfpm_battery_icon_update(battery_icon,FULL,remaining_per);
}
// battery is not dis/charging but is not full also
if ( is_charging == FALSE && is_discharging == FALSE && battery_icon->last_full != charge )
{
- gtk_status_icon_set_tooltip(GTK_STATUS_ICON(battery_icon),tip);
+ strcat(tip,_(" Battery charge"));
xfpm_battery_icon_update(battery_icon,NOT_FULL,remaining_per);
}
@@ -485,7 +514,6 @@
if ( is_charging == TRUE && is_discharging == FALSE )
{
strcat(tip,_(" Battery is charging "));
- gtk_status_icon_set_tooltip(GTK_STATUS_ICON(battery_icon),tip);
xfpm_battery_icon_update(battery_icon,CHARGING,remaining_per);
}
@@ -499,20 +527,35 @@
strcat(tip,
battery_icon->type == PRIMARY ? _(" Running on battery"): _(" Battery is discharging"));
}
- gtk_status_icon_set_tooltip(GTK_STATUS_ICON(battery_icon),tip);
xfpm_battery_icon_update(battery_icon,DISCHARGING,remaining_per);
}
else if ( remaining_per <= ( battery_icon->critical_level+10 ) && remaining_per > battery_icon->critical_level )
{
strcat(tip,_(" Battery charge level is low"));
- gtk_status_icon_set_tooltip(GTK_STATUS_ICON(battery_icon),tip);
xfpm_battery_icon_update(battery_icon,LOW,remaining_per);
}
else if ( remaining_per <= battery_icon->critical_level )
{
strcat(tip,_(" Battery charge level is critical"));
- gtk_status_icon_set_tooltip(GTK_STATUS_ICON(battery_icon),tip);
xfpm_battery_icon_update(battery_icon,CRITICAL,remaining_per);
}
}
+
+ if ( remaining_time != 0 )
+ {
+ gchar time_str[80] = "";
+ gchar hours_str[20] = "";
+ gchar minutes_str[20] = "";
+ gint minutes,hours,minutes_left;
+ hours = remaining_time / 3600;
+ minutes = remaining_time / 60;
+ minutes_left = minutes % 60;
+
+ strcat(hours_str,hours > 1 ? _("hours") : _("hour") );
+ strcat(minutes_str,minutes > 1 ? _("minutes") : _("minute"));
+
+ sprintf(time_str,_("\nEstimated Time Left: %d %s %d %s"),hours,hours_str,minutes_left,minutes_str);
+ strcat(tip,time_str);
+ }
+ gtk_status_icon_set_tooltip(GTK_STATUS_ICON(battery_icon),tip);
}
Modified: xfce4-power-manager/trunk/src/xfpm-battery-icon.h
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-battery-icon.h 2008-10-18 18:05:53 UTC (rev 5680)
+++ xfce4-power-manager/trunk/src/xfpm-battery-icon.h 2008-10-18 18:26:20 UTC (rev 5681)
@@ -69,14 +69,15 @@
} XfpmBatteryIconClass;
GType xfpm_battery_icon_get_type (void);
-GtkStatusIcon *xfpm_battery_icon_new (guint last_full,
- guint battery_type,
+GtkStatusIcon *xfpm_battery_icon_new (guint32 last_full,
+ XfpmBatteryType battery_type,
guint critical_charge,
gboolean visible);
void xfpm_battery_icon_set_state (XfpmBatteryIcon *battery_icon,
- guint charge,
+ guint32 charge,
guint remaining_per,
+ guint32 remaining_time,
gboolean present,
gboolean is_charging,
gboolean is_discharging,
Modified: xfce4-power-manager/trunk/src/xfpm-battery.c
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-battery.c 2008-10-18 18:05:53 UTC (rev 5680)
+++ xfce4-power-manager/trunk/src/xfpm-battery.c 2008-10-18 18:26:20 UTC (rev 5681)
@@ -98,6 +98,14 @@
const gchar *key,gboolean is_removed,
gboolean is_added,XfpmBattery *batt);
+static void xfpm_battery_show_critical_options(XfpmBattery *batt,XfpmBatteryIcon *icon);
+static void xfpm_battery_handle_primary_critical(XfpmBattery *batt,
+ XfpmBatteryIcon *icon);
+static void xfpm_battery_handle_ups_critical(XfpmBattery *batt,
+ XfpmBatteryIcon *icon);
+static void xfpm_battery_handle_critical_charge(XfpmBattery *batt,
+ XfpmBatteryIcon *icon);
+
static void xfpm_battery_state_change_cb(GObject *object,
GParamSpec *arg1,
gpointer data);
@@ -124,8 +132,9 @@
{
XfpmHal *hal;
GHashTable *batteries;
- gboolean can_hibernate;
- gboolean can_suspend;
+
+ guint8 power_management;
+
};
G_DEFINE_TYPE(XfpmBattery,xfpm_battery,G_TYPE_OBJECT)
@@ -191,7 +200,7 @@
g_param_spec_uint("critical-charge",
"Critical charge",
"Critical battery charge",
- 0,
+ 1,
15,
8,
G_PARAM_READWRITE|G_PARAM_CONSTRUCT));
@@ -234,8 +243,6 @@
priv = XFPM_BATTERY_GET_PRIVATE(battery);
priv->batteries = g_hash_table_new(g_str_hash,g_str_equal);
- priv->can_hibernate = FALSE;
- priv->can_suspend = FALSE;
xfpm_battery_load_config(battery);
@@ -575,6 +582,20 @@
xfpm_battery_refresh(batt);
}
+
+static guint
+_get_battery_percentage(gint32 last_full,gint32 current)
+{
+ guint val = 100;
+
+ if ( last_full <= current ) return val;
+
+ float f = (float)current/last_full *100;
+
+ val = (guint)f;
+ return val;
+}
+
static void
xfpm_battery_handle_device_property_changed(XfpmHal *hal,const gchar *udi,
const gchar *key,gboolean is_removed,
@@ -597,12 +618,12 @@
{
return;
}
- if ( !strcmp(key,"battery.reporting.last_full") )
+ if ( !strcmp(key,"battery.charge_level.last_full") )
{
GError *error = NULL;
guint last_full = xfpm_hal_get_int_info(priv->hal,
udi,
- "battery.reporting.last_full",
+ "battery.charge_level.last_full",
&error);
if ( error )
{
@@ -613,16 +634,15 @@
return;
}
- if ( strcmp(key,"battery.reporting.current") &&
- strcmp(key,"battery.charge_level.percentage") &&
- strcmp(key,"battery.rechargeable.is_charging") &&
+ if ( strcmp(key,"battery.charge_level.current") &&
+ strcmp(key,"battery.rechargeable.is_charging") &&
strcmp(key,"battery.rechargeable.is_discharging") )
{
return;
}
XFPM_DEBUG("Drive status change udi=%s key=%s\n",udi,key);
- guint current;
+ gint32 current;
guint percentage;
gboolean is_charging;
gboolean is_discharging;
@@ -630,7 +650,7 @@
GError *error = NULL;
current = xfpm_hal_get_int_info(priv->hal,
udi,
- "battery.reporting.current",
+ "battery.charge_level.current",
&error);
if ( error )
{
@@ -638,16 +658,35 @@
g_error_free(error);
return;
}
- percentage = xfpm_hal_get_int_info(priv->hal,
- udi,
- "battery.charge_level.percentage",
- &error);
- if ( error )
+
+ if (xfpm_hal_device_have_key(priv->hal,udi,"battery.charge_level.persentage"))
{
- XFPM_DEBUG("%s\n",error->message);
- g_error_free(error);
- return;
- }
+ if ( error )
+ {
+ XFPM_DEBUG("%s:\n",error->message);
+ g_error_free(error);
+ return;
+ }
+ percentage = xfpm_hal_get_int_info(priv->hal,
+ udi,
+ "battery.charge_level.percentage",
+ &error);
+ }
+ else
+ {
+ GError *error = NULL;
+ guint last_full = xfpm_hal_get_int_info(priv->hal,
+ udi,
+ "battery.charge_level.last_full",
+ &error);
+ if ( error )
+ {
+ XFPM_DEBUG("%s\n",error->message);
+ g_error_free(error);
+ return;
+ }
+ percentage = _get_battery_percentage(last_full,current);
+ }
is_present = xfpm_hal_get_bool_info(priv->hal,
udi,
@@ -680,13 +719,130 @@
g_error_free(error);
return;
}
-
- xfpm_battery_icon_set_state(XFPM_BATTERY_ICON(icon),current,percentage,
+
+ gint32 remaining_time = 0 ;
+ if (xfpm_hal_device_have_key(priv->hal,udi,"battery.remaining_time"))
+ {
+ if ( error )
+ {
+ XFPM_DEBUG("%s:\n",error->message);
+ g_error_free(error);
+ return;
+ }
+ remaining_time = xfpm_hal_get_int_info(priv->hal,
+ udi,
+ "battery.remaining_time",
+ &error);
+ }
+ xfpm_battery_icon_set_state(XFPM_BATTERY_ICON(icon),current,percentage,remaining_time,
is_present,is_charging,is_discharging,batt->ac_adapter_present);
}
}
+#ifdef HAVE_LIBNOTIFY
static void
+_do_critical_action(NotifyNotification *n,gchar *action,XfpmBattery *batt)
+{
+ if (!strcmp(action,"shutdown"))
+ {
+ XFPM_DEBUG("Sending shutdown request\n");
+ g_signal_emit(G_OBJECT(batt),signals[XFPM_ACTION_REQUEST],0,XFPM_DO_SHUTDOWN,TRUE);
+ }
+ else if ( !strcmp(action,"hibernate"))
+ {
+ XFPM_DEBUG("Sending hibernate request\n");
+ g_signal_emit(G_OBJECT(batt),signals[XFPM_ACTION_REQUEST],0,XFPM_DO_HIBERNATE,TRUE);
+ }
+}
+#endif
+
+static void
+xfpm_battery_show_critical_options(XfpmBattery *batt,XfpmBatteryIcon *icon)
+{
+ XfpmBatteryPrivate *priv;
+ priv = XFPM_BATTERY_GET_PRIVATE(batt);
+
+ const gchar *message;
+ message = _("Your battery charge level is critical "\
+ "save your work to avoid data loss");
+
+#ifdef HAVE_LIBNOTIFY
+
+ NotifyNotification *n = xfpm_notify_new(_("Xfce power manager"),
+ message,
+ 20000,
+ NOTIFY_URGENCY_CRITICAL,
+ GTK_STATUS_ICON(icon),
+ "gpm-ac-adapter");
+ if (priv->power_management & SYSTEM_CAN_SHUTDOWN )
+ {
+ xfpm_notify_add_action(n,
+ "shutdown",
+ _("Shutdown the system"),
+ (NotifyActionCallback)_do_critical_action,
+ batt);
+ }
+ if ( priv->power_management & SYSTEM_CAN_HIBERNATE )
+ {
+ xfpm_notify_add_action(n,
+ "hibernate",
+ _("Hibernate the system"),
+ (NotifyActionCallback)_do_critical_action,
+ batt);
+ }
+ xfpm_notify_show_notification(n,6);
+#else
+ /*FIXME Show the options in GtkDialog */
+
+#endif
+}
+
+static void
+xfpm_battery_handle_primary_critical(XfpmBattery *batt,XfpmBatteryIcon *icon)
+{
+ if ( batt->critical_action == XFPM_DO_HIBERNATE )
+ {
+ XFPM_DEBUG("Sending Hibernate request\n");
+ g_signal_emit(G_OBJECT(batt),signals[XFPM_ACTION_REQUEST],0,XFPM_DO_HIBERNATE,TRUE);
+ return;
+ }
+
+ if ( batt->critical_action == XFPM_DO_SHUTDOWN )
+ {
+ XFPM_DEBUG("Sending shutdown request\n");
+ g_signal_emit(G_OBJECT(batt),signals[XFPM_ACTION_REQUEST],0,XFPM_DO_SHUTDOWN,TRUE);
+ return;
+ }
+
+ if ( batt->critical_action == XFPM_DO_NOTHING )
+ {
+ xfpm_battery_show_critical_options(batt,icon);
+ }
+}
+
+static void
+xfpm_battery_handle_ups_critical(XfpmBattery *batt,XfpmBatteryIcon *icon)
+{
+ xfpm_battery_show_critical_options(batt,icon);
+}
+
+static void
+xfpm_battery_handle_critical_charge(XfpmBattery *batt,XfpmBatteryIcon *icon)
+{
+ XfpmBatteryType battery_type;
+ g_object_get(G_OBJECT(icon),"battery-type",&battery_type,NULL);
+
+ if ( battery_type == PRIMARY )
+ {
+ xfpm_battery_handle_primary_critical(batt,icon);
+ }
+ else if ( battery_type == UPS )
+ {
+ xfpm_battery_handle_ups_critical(batt,icon);
+ }
+}
+
+static void
xfpm_battery_state_change_cb(GObject *object,GParamSpec *arg1,gpointer data)
{
if ( !strcmp(arg1->name,"battery-state") )
@@ -708,29 +864,9 @@
XFPM_DEBUG("param:%s value:%s\n",arg1->name,content);
g_free(content);
#endif
- if ( batt->critical_action == XFPM_DO_NOTHING )
- {
- return;
- }
-
if ( state == CRITICAL )
{
- XfpmBatteryType battery_type;
- g_object_get(object,"battery-type",&battery_type,NULL);
- if ( battery_type != PRIMARY )
- {
- return;
- }
- if ( batt->critical_action == XFPM_DO_HIBERNATE )
- {
- XFPM_DEBUG("Sending Hibernate\n");
- g_signal_emit(G_OBJECT(batt),signals[XFPM_ACTION_REQUEST],0,XFPM_DO_HIBERNATE,TRUE);
- return;
- }
- if ( batt->critical_action == XFPM_DO_SHUTDOWN )
- {
- g_signal_emit(G_OBJECT(batt),signals[XFPM_ACTION_REQUEST],0,XFPM_DO_SHUTDOWN,TRUE);
- }
+ xfpm_battery_handle_critical_charge(batt,XFPM_BATTERY_ICON(object));
}
}
}
@@ -780,7 +916,7 @@
img = gtk_image_new_from_icon_name("gpm-hibernate",GTK_ICON_SIZE_MENU);
gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(mi),img);
gtk_widget_set_sensitive(mi,FALSE);
- if ( priv->can_hibernate )
+ if ( priv->power_management & SYSTEM_CAN_HIBERNATE )
{
gtk_widget_set_sensitive(mi,TRUE);
g_signal_connect(mi,"activate",
@@ -796,7 +932,7 @@
gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(mi),img);
gtk_widget_set_sensitive(mi,FALSE);
- if ( priv->can_suspend )
+ if ( priv->power_management & SYSTEM_CAN_SUSPEND )
{
gtk_widget_set_sensitive(mi,TRUE);
g_signal_connect(mi,"activate",
@@ -861,15 +997,18 @@
priv = XFPM_BATTERY_GET_PRIVATE(batt);
// Sanity check
- if ( !xfpm_hal_device_have_key(priv->hal,udi,"battery.reporting.last_full") ||
- !xfpm_hal_device_have_key(priv->hal,udi,"battery.reporting.current") ||
- !xfpm_hal_device_have_key(priv->hal,udi,"battery.charge_level.percentage") ||
+ // All those keys are flagged as always exist on device battery, except for battery.is_rechargeable
+ if ( !xfpm_hal_device_have_key(priv->hal,udi,"battery.is_rechargeable") ||
+ !xfpm_hal_device_have_key(priv->hal,udi,"battery.charge_level.last_full") ||
+ !xfpm_hal_device_have_key(priv->hal,udi,"battery.charge_level.current") ||
!xfpm_hal_device_have_key(priv->hal,udi,"battery.present") ||
!xfpm_hal_device_have_key(priv->hal,udi,"battery.rechargeable.is_charging") ||
+ !xfpm_hal_device_have_key(priv->hal,udi,"battery.rechargeable.is_discharging") ||
!xfpm_hal_device_have_key(priv->hal,udi,"battery.type") )
{
return FALSE;
}
+
return TRUE;
}
@@ -886,7 +1025,7 @@
GError *error = NULL;
guint last_full = xfpm_hal_get_int_info(priv->hal,
udi,
- "battery.reporting.last_full",
+ "battery.charge_level.last_full",
&error);
if ( error )
{
@@ -894,9 +1033,9 @@
g_error_free(error);
return;
}
- guint current = xfpm_hal_get_int_info(priv->hal,
+ gint32 current = xfpm_hal_get_int_info(priv->hal,
udi,
- "battery.reporting.current",
+ "battery.charge_level.current",
&error);
if ( error )
{
@@ -904,16 +1043,6 @@
g_error_free(error);
return;
}
- guint percentage = xfpm_hal_get_int_info(priv->hal,
- udi,
- "battery.charge_level.percentage",
- &error);
- if ( error )
- {
- XFPM_DEBUG("%s:\n",error->message);
- g_error_free(error);
- return;
- }
gboolean is_present = xfpm_hal_get_bool_info(priv->hal,
udi,
"battery.present",
@@ -953,8 +1082,42 @@
XFPM_DEBUG("%s:\n",error->message);
g_error_free(error);
return;
- }
+ }
+
+ guint percentage;
+ if (xfpm_hal_device_have_key(priv->hal,udi,"battery.charge_level.persentage"))
+ {
+ if ( error )
+ {
+ XFPM_DEBUG("%s:\n",error->message);
+ g_error_free(error);
+ return;
+ }
+ percentage = xfpm_hal_get_int_info(priv->hal,
+ udi,
+ "battery.charge_level.percentage",
+ &error);
+ }
+ else
+ {
+ percentage = _get_battery_percentage(last_full,current);
+ }
+ gint32 remaining_time = 0 ;
+ if (xfpm_hal_device_have_key(priv->hal,udi,"battery.remaining_time"))
+ {
+ if ( error )
+ {
+ XFPM_DEBUG("%s:\n",error->message);
+ g_error_free(error);
+ return;
+ }
+ remaining_time = xfpm_hal_get_int_info(priv->hal,
+ udi,
+ "battery.remaining_time",
+ &error);
+ }
+
XfpmBatteryType type =
xfpm_battery_get_battery_type(battery_type);
if ( battery_type )
@@ -965,16 +1128,20 @@
type,
batt->critical_level,
TRUE);
+
#ifdef HAVE_LIBNOTIFY
g_object_set(batt_icon,"systray-notify",batt->notify_enabled,NULL);
#endif
+
xfpm_battery_icon_set_state(XFPM_BATTERY_ICON(batt_icon),
current,
percentage,
+ remaining_time,
is_present,
is_charging,
is_discharging,
batt->ac_adapter_present);
+
g_signal_connect(batt_icon,"notify",G_CALLBACK(xfpm_battery_state_change_cb),batt);
g_signal_connect(batt_icon,"popup-menu",G_CALLBACK(xfpm_battery_popup_tray_icon_menu),batt);
@@ -1063,26 +1230,25 @@
}
icon = NULL;
}
- xfpm_notify_simple("Xfce power manager",
- error,
- 14000,
- NOTIFY_URGENCY_CRITICAL,
- icon != NULL ? GTK_STATUS_ICON(icon) : NULL,
- icon_name,
- 0);
+ NotifyNotification *n =
+ xfpm_notify_new("Xfce power manager",
+ error,
+ 14000,
+ NOTIFY_URGENCY_CRITICAL,
+ icon != NULL ? GTK_STATUS_ICON(icon) : NULL,
+ icon_name);
+ xfpm_notify_show_notification(n,0);
}
#endif
void
-xfpm_battery_set_sleep_info(XfpmBattery *batt,
- gboolean can_suspend,
- gboolean can_hibernate)
+xfpm_battery_set_power_info(XfpmBattery *batt,guint8 power_management)
{
g_return_if_fail(XFPM_IS_BATTERY(batt));
XfpmBatteryPrivate *priv;
priv = XFPM_BATTERY_GET_PRIVATE(batt);
- priv->can_hibernate = can_hibernate;
- priv->can_suspend = can_suspend;
+
+ priv->power_management = power_management;
}
Modified: xfce4-power-manager/trunk/src/xfpm-battery.h
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-battery.h 2008-10-18 18:05:53 UTC (rev 5680)
+++ xfce4-power-manager/trunk/src/xfpm-battery.h 2008-10-18 18:26:20 UTC (rev 5681)
@@ -76,9 +76,8 @@
const gchar *icon_name,
const gchar *error);
#endif
-void xfpm_battery_set_sleep_info(XfpmBattery *batt,
- gboolean can_suspend,
- gboolean can_hibernate);
+void xfpm_battery_set_power_info(XfpmBattery *batt,
+ guint8 power_management);
G_END_DECLS
#endif
Modified: xfce4-power-manager/trunk/src/xfpm-button.c
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-button.c 2008-10-18 18:05:53 UTC (rev 5680)
+++ xfce4-power-manager/trunk/src/xfpm-button.c 2008-10-18 18:26:20 UTC (rev 5681)
@@ -100,8 +100,8 @@
gboolean device_found;
- gboolean can_suspend;
- gboolean can_hibernate;
+ guint8 sleep_info;
+
};
G_DEFINE_TYPE(XfpmButton,xfpm_button,G_TYPE_OBJECT)
@@ -183,9 +183,8 @@
priv->have_sleep_bt = FALSE;
priv->sleep_button_has_state= FALSE;
- priv->can_suspend = FALSE;
- priv->can_hibernate = FALSE;
-
+ priv->sleep_info = 0;
+
priv->hal = xfpm_hal_new();
xfpm_button_load_config(bt);
@@ -323,14 +322,10 @@
if ( action == XFPM_DO_SUSPEND )
{
- if (!priv->can_suspend ) return;
-
xfpm_button_do_suspend(bt);
}
else if ( action == XFPM_DO_HIBERNATE )
{
- if (!priv->can_hibernate ) return;
-
xfpm_button_do_hibernate(bt);
}
else if ( action == XFPM_DO_SHUTDOWN )
@@ -664,13 +659,11 @@
}
void
-xfpm_button_set_sleep_info (XfpmButton *button,gboolean can_hibernate,
- gboolean can_suspend)
+xfpm_button_set_sleep_info (XfpmButton *button,guint8 sleep_info)
{
g_return_if_fail(XFPM_IS_BUTTON(button));
XfpmButtonPrivate *priv;
priv = XFPM_BUTTON_GET_PRIVATE(button);
-
- priv->can_suspend = can_suspend;
- priv->can_hibernate = can_hibernate;
+
+ priv->sleep_info = sleep_info;
}
Modified: xfce4-power-manager/trunk/src/xfpm-button.h
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-button.h 2008-10-18 18:05:53 UTC (rev 5680)
+++ xfce4-power-manager/trunk/src/xfpm-button.h 2008-10-18 18:26:20 UTC (rev 5681)
@@ -60,8 +60,7 @@
XfpmButton *xfpm_button_new (void);
guint8 xfpm_button_get_available_buttons (XfpmButton *button);
void xfpm_button_set_sleep_info (XfpmButton *button,
- gboolean can_hibernate,
- gboolean can_suspend);
+ guint8 sleep_info);
G_END_DECLS
#endif
Modified: xfce4-power-manager/trunk/src/xfpm-common.h
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-common.h 2008-10-18 18:05:53 UTC (rev 5680)
+++ xfce4-power-manager/trunk/src/xfpm-common.h 2008-10-18 18:26:20 UTC (rev 5681)
@@ -40,6 +40,7 @@
#define ON_BATT_CPU_GOV_CFG "/xfce4-power-manager/on-batt-cpu-gov"
#define POWER_SAVE_CFG "/xfce4-power-manager/power-save"
+#define CAN_POWER_SAVE "/xfce4-power-manager/can-power-save"
#define LCD_BRIGHTNESS_CFG "/xfce4-power-manager/lcd-brightness"
#define LID_SWITCH_CFG "/xfce4-power-manager/lid-switch-action"
#define SLEEP_SWITCH_CFG "/xfce4-power-manager/sleep-switch-action"
@@ -59,6 +60,15 @@
#define ON_AC_DPMS_TIMEOUTS_CFG "/xfce4-power-manager/on-ac-monitor-dpms-timeouts"
#endif
+typedef enum
+{
+ SYSTEM_CAN_SHUTDOWN = (1<<0),
+ SYSTEM_CAN_HIBERNATE = (1<<2),
+ SYSTEM_CAN_SUSPEND = (1<<3),
+ SYSTEM_CAN_POWER_SAVE = (1<<4)
+
+} SystemPowerManagement;
+
typedef enum
{
SYSTEM_LAPTOP,
Modified: xfce4-power-manager/trunk/src/xfpm-driver.c
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-driver.c 2008-10-18 18:05:53 UTC (rev 5680)
+++ xfce4-power-manager/trunk/src/xfpm-driver.c 2008-10-18 18:26:20 UTC (rev 5681)
@@ -86,6 +86,8 @@
gboolean state_ok,
XfpmDriver *drv);
+static void xfpm_driver_set_power_save(XfpmDriver *drv);
+
static void xfpm_driver_property_changed_cb(XfconfChannel *channel,
gchar *property,
GValue *value,
@@ -114,7 +116,11 @@
gboolean critical,
XfpmDriver *drv);
static void xfpm_driver_load_config(XfpmDriver *drv);
+
+static void xfpm_driver_check_power_management(XfpmDriver *drv);
+static void xfpm_driver_check_power_save(XfpmDriver *drv);
static void xfpm_driver_check(XfpmDriver *drv);
+
static void xfpm_driver_load_all(XfpmDriver *drv);
/* DBus message Filter and replies */
@@ -133,12 +139,13 @@
gboolean dialog_opened;
SystemFormFactor formfactor;
- gboolean can_use_power_management;
- gboolean can_suspend;
- gboolean can_hibernate;
+
+ guint8 power_management;
+
#ifdef HAVE_LIBNOTIFY
gboolean show_power_management_error;
#endif
+ gboolean enable_power_save;
gboolean accept_sleep_request;
@@ -176,14 +183,14 @@
{
XfpmDriverPrivate *priv;
priv = XFPM_DRIVER_GET_PRIVATE(drv);
-
+
+ priv->power_management = 0;
+
priv->dialog_opened = FALSE;
priv->cpufreq_control = FALSE;
priv->buttons_control = FALSE;
+ priv->enable_power_save = FALSE;
priv->lcd_brightness_control = FALSE;
- priv->can_use_power_management = FALSE;
- priv->can_hibernate = FALSE;
- priv->can_suspend = FALSE;
priv->accept_sleep_request = TRUE;
priv->loop = NULL;
priv->cpu = NULL;
@@ -245,6 +252,22 @@
G_OBJECT_CLASS(xfpm_driver_parent_class)->finalize(object);
}
+static void
+xfpm_driver_set_power_save(XfpmDriver *drv)
+{
+ XfpmDriverPrivate *priv;
+ priv = XFPM_DRIVER_GET_PRIVATE(drv);
+
+ GError *error = NULL;
+ xfpm_hal_set_power_save(priv->hal,priv->ac_adapter_present,&error);
+
+ if ( error )
+ {
+ XFPM_DEBUG("Set power save failed: %s\n",error->message);
+ g_error_free(error);
+ }
+}
+
static void xfpm_driver_ac_adapter_state_changed_cb(XfpmAcAdapter *adapter,
gboolean present,
gboolean state_ok,
@@ -265,13 +288,14 @@
if ( visible )
{
- xfpm_notify_simple(_("Xfce power manager"),
- error,
- 12000,
- NOTIFY_URGENCY_CRITICAL,
- GTK_STATUS_ICON(adapter),
- "gpm-ac-adapter",
- 0);
+ NotifyNotification *n =
+ xfpm_notify_new(_("Xfce power manager"),
+ error,
+ 12000,
+ NOTIFY_URGENCY_CRITICAL,
+ GTK_STATUS_ICON(adapter),
+ "gpm-ac-adapter");
+ xfpm_notify_show_notification(n,0);
}
else
{
@@ -295,6 +319,11 @@
{
g_object_set(G_OBJECT(priv->lcd),"on-ac-adapter",priv->ac_adapter_present,NULL);
}
+
+ if ( priv->power_management & SYSTEM_CAN_POWER_SAVE )
+ {
+ xfpm_driver_set_power_save(drv);
+ }
}
static void
@@ -305,16 +334,6 @@
priv->dialog_opened = FALSE;
- gpointer data =
- g_object_get_data(G_OBJECT(drv),"conf-channel");
-
- if ( data )
- {
- XfconfChannel *channel = (XfconfChannel *)data;
- g_object_unref(channel);
- xfconf_shutdown();
- }
-
switch(response)
{
case GTK_RESPONSE_HELP:
@@ -325,9 +344,24 @@
gtk_widget_destroy(GTK_WIDGET(dialog));
break;
}
+
}
static void
+_close_dialog_cb(GtkDialog *dialog,XfpmDriver *drv)
+{
+ gpointer data =
+ g_object_get_data(G_OBJECT(drv),"conf-channel");
+ if ( data )
+ {
+ XfconfChannel *channel = (XfconfChannel *)data;
+ g_object_unref(channel);
+ }
+ xfconf_shutdown();
+
+}
+
+static void
xfpm_driver_property_changed_cb(XfconfChannel *channel,gchar *property,
GValue *value,XfpmDriver *drv)
{
@@ -486,6 +520,14 @@
return;
}
}
+
+ if ( !strcmp(property,POWER_SAVE_CFG) )
+ {
+ gboolean val = g_value_get_boolean(value);
+ priv->enable_power_save = val;
+ xfpm_driver_set_power_save(drv);
+ }
+
}
static gboolean
@@ -557,9 +599,7 @@
dialog = xfpm_settings_new(channel,
priv->formfactor == SYSTEM_LAPTOP ? TRUE : FALSE,
- priv->can_hibernate,
- priv->can_suspend,
- priv->can_use_power_management,
+ priv->power_management,
with_dpms,
gov,
switch_buttons,
@@ -571,6 +611,8 @@
gdk_x11_window_set_user_time(dialog->window,gdk_x11_get_server_time (dialog->window));
g_signal_connect(dialog,"response",G_CALLBACK(_dialog_response_cb),drv);
+ g_signal_connect(dialog,"close",G_CALLBACK(_close_dialog_cb),drv);
+
gtk_widget_show(dialog);
priv->dialog_opened = TRUE;
@@ -589,14 +631,14 @@
if ( adapter_visible )
{
- xfpm_notify_simple("Xfce power manager",
- error,
- 14000,
- NOTIFY_URGENCY_CRITICAL,
- GTK_STATUS_ICON(priv->adapter),
- icon_name,
- 0);
-
+ NotifyNotification *n =
+ xfpm_notify_new("Xfce power manager",
+ error,
+ 14000,
+ NOTIFY_URGENCY_CRITICAL,
+ GTK_STATUS_ICON(priv->adapter),
+ icon_name);
+ xfpm_notify_show_notification(n,0);
}
else /* the battery object will take care */
{
@@ -726,7 +768,7 @@
g_free(content);
#endif
- if ( !priv->can_use_power_management )
+ if ( priv->power_management != 0 )
{
XFPM_DEBUG("We cannot use power management interface\n");
return;
@@ -743,15 +785,16 @@
switch ( action )
{
case XFPM_DO_SUSPEND:
- if (!priv->can_suspend) return;
- xfpm_driver_suspend(drv,critical);
+ if (priv->power_management & SYSTEM_CAN_SUSPEND )
+ xfpm_driver_suspend(drv,critical);
break;
case XFPM_DO_HIBERNATE:
- if (!priv->can_hibernate) return;
- xfpm_driver_hibernate(drv,critical);
+ if (priv->power_management & SYSTEM_CAN_HIBERNATE )
+ xfpm_driver_hibernate(drv,critical);
break;
case XFPM_DO_SHUTDOWN:
- xfpm_driver_shutdown(drv,critical);
+ if ( priv->power_management & SYSTEM_CAN_SHUTDOWN )
+ xfpm_driver_shutdown(drv,critical);
break;
default:
break;
@@ -816,6 +859,7 @@
#ifdef HAVE_LIBNOTIFY
priv->show_power_management_error = TRUE;
#endif
+ priv->enable_power_save = FALSE;
return;
}
XfconfChannel *channel;
@@ -825,6 +869,7 @@
priv->show_power_management_error
= xfconf_channel_get_bool(channel,SHOW_POWER_MANAGEMENT_ERROR,TRUE);
#endif
+ priv->enable_power_save = xfconf_channel_get_bool(channel,POWER_SAVE_CFG,FALSE);
g_object_unref(channel);
xfconf_shutdown();
@@ -835,7 +880,7 @@
static void
_disable_error(NotifyNotification *n,gchar *action,XfpmDriver *drv)
{
- if (strcmp(action,"ok")) return;
+ if (strcmp(action,"confirmed")) return;
GError *g_error = NULL;
if ( !xfconf_init(&g_error) )
@@ -851,7 +896,7 @@
g_object_unref(channel);
xfconf_shutdown();
-
+ g_object_unref(n);
}
#endif
@@ -863,41 +908,45 @@
_("Unable to use power management service, functionalities like hibernate and shutdown will not work "\
"Possible reasons: you don't have permission or "\
"broken connection with the hardware abstract layer or the message bus daemon is not running");
-
- xfpm_notify_with_action(_("Xfce power manager"),
- error,
- 14000,
- NOTIFY_URGENCY_CRITICAL,
- NULL,
- "gpm-ac-adapter",
+ NotifyNotification *n = xfpm_notify_new(_("Xfce power manager"),
+ error,
+ 14000,
+ NOTIFY_URGENCY_CRITICAL,
+ NULL,
+ "gpm-ac-adapter");
+ xfpm_notify_add_action(n,
+ "confirmed",
_("Don't show this message again"),
- 0,
(NotifyActionCallback)_disable_error,
- drv);
+ drv);
+ xfpm_notify_show_notification(n,10);
return FALSE;
}
#endif
+
static void
-xfpm_driver_check(XfpmDriver *drv)
+xfpm_driver_check_power_management(XfpmDriver *drv)
{
+ XFPM_DEBUG("Checking power management\n");
+
XfpmDriverPrivate *priv;
priv = XFPM_DRIVER_GET_PRIVATE(drv);
GError *g_error = NULL;
- priv->can_use_power_management = xfpm_hal_power_management_can_be_used(priv->hal);
- if ( !priv->can_use_power_management )
+ gboolean can_use_power_management = xfpm_hal_power_management_can_be_used(priv->hal);
+ if ( !can_use_power_management )
{
#ifdef HAVE_LIBNOTIFY
g_timeout_add_seconds(8,(GSourceFunc)_show_power_management_error_message,drv);
#endif
XFPM_DEBUG("Unable to use HAL power management services\n");
- /*We do return here, so can_suspend and can_hibernate stay FALSE*/
return;
}
-
- priv->can_suspend = xfpm_hal_get_bool_info(priv->hal,
+ priv->power_management |= SYSTEM_CAN_SHUTDOWN;
+
+ gboolean can_suspend = xfpm_hal_get_bool_info(priv->hal,
HAL_ROOT_COMPUTER,
"power_management.can_suspend",
&g_error);
@@ -908,19 +957,68 @@
g_error = NULL;
}
- priv->can_hibernate = xfpm_hal_get_bool_info(priv->hal,
- HAL_ROOT_COMPUTER,
- "power_management.can_hibernate",
- &g_error);
+ if ( can_suspend ) priv->power_management |= SYSTEM_CAN_SUSPEND;
+
+ gboolean can_hibernate = xfpm_hal_get_bool_info(priv->hal,
+ HAL_ROOT_COMPUTER,
+ "power_management.can_hibernate",
+ &g_error);
if ( g_error )
{
XFPM_DEBUG("%s: \n",g_error->message);
g_error_free(g_error);
- g_error = NULL;
- }
+ }
+
+ if ( can_hibernate ) priv->power_management |= SYSTEM_CAN_HIBERNATE;
}
static void
+xfpm_driver_check_power_save(XfpmDriver *drv)
+{
+ XFPM_DEBUG("Checking power save availability\n");
+ XfpmDriverPrivate *priv;
+ priv = XFPM_DRIVER_GET_PRIVATE(drv);
+
+ GError *error = NULL;
+ gboolean ret = xfpm_hal_get_bool_info(priv->hal,
+ HAL_ROOT_COMPUTER,
+ "power_management.is_powersave_set",
+ &error);
+ if ( error )
+ {
+ XFPM_DEBUG("error getting powersave_set %s\n",error->message);
+ g_error_free(error);
+ return;
+ }
+
+ xfpm_hal_set_power_save(priv->hal,ret,&error);
+
+ if ( error )
+ {
+ XFPM_DEBUG("System doesn't support power save: %s\n",error->message);
+ g_error_free(error);
+ return;
+ }
+
+ if ( ret ) priv->power_management |= SYSTEM_CAN_POWER_SAVE;
+
+}
+
+static void
+xfpm_driver_check(XfpmDriver *drv)
+{
+ XfpmDriverPrivate *priv;
+ priv = XFPM_DRIVER_GET_PRIVATE(drv);
+
+ xfpm_driver_check_power_management(drv);
+
+ if ( priv->power_management != 0 )
+ {
+ xfpm_driver_check_power_save(drv);
+ }
+}
+
+static void
xfpm_driver_load_all(XfpmDriver *drv)
{
XfpmDriverPrivate *priv;
@@ -968,7 +1066,7 @@
else
{
priv->buttons_control = TRUE;
- xfpm_button_set_sleep_info(priv->bt,priv->can_hibernate,priv->can_suspend);
+ xfpm_button_set_sleep_info(priv->bt,priv->power_management);
g_signal_connect(priv->bt,"xfpm-action-request",
G_CALLBACK(xfpm_driver_handle_action_request),drv);
}
@@ -983,14 +1081,14 @@
/*We call the battery object to start monitoring after loading the Ac adapter*/
priv->batt = xfpm_battery_new();
- xfpm_battery_set_sleep_info(priv->batt,priv->can_hibernate,priv->can_suspend);
+ xfpm_battery_set_power_info(priv->batt,priv->power_management);
+
g_signal_connect(priv->batt,"xfpm-action-request",
G_CALLBACK(xfpm_driver_handle_action_request),drv);
g_signal_connect(priv->batt,"xfpm-show-adapter-icon",G_CALLBACK(_show_adapter_icon),drv);
priv->adapter = xfpm_ac_adapter_new(FALSE);
- xfpm_ac_adapter_set_sleep_info(XFPM_AC_ADAPTER(priv->adapter),
- priv->can_hibernate,priv->can_suspend);
+ xfpm_ac_adapter_set_sleep_info(XFPM_AC_ADAPTER(priv->adapter),priv->power_management);
g_signal_connect(priv->adapter,"xfpm-ac-adapter-changed",
G_CALLBACK(xfpm_driver_ac_adapter_state_changed_cb),drv);
@@ -1092,7 +1190,7 @@
{
return FALSE;
}
-
+
xfpm_driver_load_config(drv);
_get_system_form_factor(priv);
@@ -1103,6 +1201,6 @@
g_main_loop_run(priv->loop);
dbus_connection_remove_filter(priv->conn,xfpm_driver_signal_filter,NULL);
- xfconf_shutdown();
+
return TRUE;
}
Modified: xfce4-power-manager/trunk/src/xfpm-hal.c
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-hal.c 2008-10-18 18:05:53 UTC (rev 5680)
+++ xfce4-power-manager/trunk/src/xfpm-hal.c 2008-10-18 18:26:20 UTC (rev 5681)
@@ -374,7 +374,7 @@
}
}
-gint
+gint32
xfpm_hal_get_int_info(XfpmHal *xfpm_hal,const gchar *udi,
const gchar *property,GError **gerror) {
@@ -989,6 +989,13 @@
dbus_error_init(&error);
reply = dbus_connection_send_with_reply_and_block(priv->connection,mess,-1,&error);
dbus_message_unref(mess);
+
+ if ( dbus_error_is_set(&error) )
+ {
+ dbus_set_g_error(gerror,&error);
+ dbus_error_free(&error);
+ return;
+ }
if ( !reply )
{
@@ -1028,6 +1035,13 @@
dbus_error_init(&error);
reply = dbus_connection_send_with_reply_and_block(priv->connection,mess,-1,&error);
dbus_message_unref(mess);
+
+ if ( dbus_error_is_set(&error) )
+ {
+ dbus_set_g_error(gerror,&error);
+ dbus_error_free(&error);
+ return;
+ }
if ( !reply )
{
Modified: xfce4-power-manager/trunk/src/xfpm-hal.h
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-hal.h 2008-10-18 18:05:53 UTC (rev 5680)
+++ xfce4-power-manager/trunk/src/xfpm-hal.h 2008-10-18 18:26:20 UTC (rev 5681)
@@ -90,7 +90,7 @@
const gchar *capability,
gint *num,
GError **gerror);
-gint xfpm_hal_get_int_info (XfpmHal *xfpm_hal,
+gint32 xfpm_hal_get_int_info (XfpmHal *xfpm_hal,
const gchar *udi,
const gchar *property,
GError **gerror);
Modified: xfce4-power-manager/trunk/src/xfpm-lcd-brightness.c
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-lcd-brightness.c 2008-10-18 18:05:53 UTC (rev 5680)
+++ xfce4-power-manager/trunk/src/xfpm-lcd-brightness.c 2008-10-18 18:26:20 UTC (rev 5681)
@@ -260,6 +260,7 @@
if ( lcd->ac_adapter_present )
{
+ XFPM_DEBUG("Setting level on ac adapter\n");
if ( level != priv->max_brightness -1 )
{
xfpm_hal_set_brightness(priv->hal,priv->udi,priv->max_brightness -1,&error);
@@ -273,6 +274,7 @@
}
else
{
+ XFPM_DEBUG("Setting level battery power\n");
xfpm_hal_set_brightness(priv->hal,priv->udi, 1,&error);
if ( error )
{
Modified: xfce4-power-manager/trunk/src/xfpm-notify.c
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-notify.c 2008-10-18 18:05:53 UTC (rev 5680)
+++ xfce4-power-manager/trunk/src/xfpm-notify.c 2008-10-18 18:26:20 UTC (rev 5681)
@@ -24,26 +24,26 @@
#ifdef HAVE_LIBNOTIFY
static NotifyNotification *
-xfpm_notify_new(const char *title,const char *message,
- const gchar *icon_name,GtkStatusIcon *icon)
+xfpm_notify_create_notification(const char *title,const char *message,
+ const gchar *icon_name,GtkStatusIcon *icon)
{
NotifyNotification *n;
if ( icon != NULL )
{
- n = notify_notification_new_with_status_icon(title,message,icon_name,icon);
+ n = notify_notification_new_with_status_icon(title,message,NULL,icon);
}
else
{
n = notify_notification_new(title,message,NULL,NULL);
-
- if ( icon_name != NULL ) {
- GdkPixbuf *pixbuf = xfpm_load_icon(icon_name,60);
- if (pixbuf) {
- notify_notification_set_icon_from_pixbuf(n,pixbuf);
- g_object_unref(G_OBJECT(pixbuf));
- }
- }
}
+ if ( icon_name != NULL ) {
+ GdkPixbuf *pixbuf = xfpm_load_icon(icon_name,48);
+ if (pixbuf)
+ {
+ notify_notification_set_icon_from_pixbuf(n,pixbuf);
+ g_object_unref(G_OBJECT(pixbuf));
+ }
+ }
return n;
}
@@ -52,69 +52,46 @@
{
NotifyNotification *n = data;
notify_notification_show(n,NULL);
- g_object_unref(n);
return FALSE;
}
-static gboolean
-xfpm_notify_send_notification_with_action(gpointer data)
+NotifyNotification *
+xfpm_notify_new(const gchar *title,const gchar *message,
+ guint timeout,NotifyUrgency urgency,
+ GtkStatusIcon *icon,const gchar *icon_name)
{
- NotifyNotification *n = data;
- notify_notification_show(n,NULL);
- /* The action callback should call g_object_unref on NotifyNotification object */
- return FALSE;
-}
-
-void
-xfpm_notify_simple(const gchar *title,const gchar *message,guint timeout,
- NotifyUrgency urgency,GtkStatusIcon *icon,
- const gchar *icon_name,guint8 timeout_to_show)
-{
NotifyNotification *n;
- n = xfpm_notify_new(title,message,icon_name,icon);
+ n = xfpm_notify_create_notification(title,message,icon_name,icon);
notify_notification_set_urgency(n,urgency);
notify_notification_set_timeout(n,timeout);
- if ( timeout_to_show != 0 )
- {
- g_timeout_add_seconds(timeout_to_show,xfpm_notify_send_notification,n);
- }
- else
- {
- xfpm_notify_send_notification(n);
- }
+ return n;
+
}
-void xfpm_notify_with_action(const gchar *title,
- const gchar *message,
- guint timeout,
- NotifyUrgency urgency,
- GtkStatusIcon *icon,
- const gchar *icon_name,
- const gchar *action_label,
- guint8 timeout_to_show,
- NotifyActionCallback notify_callback,
- gpointer user_data) {
-
- NotifyNotification *n;
- n = xfpm_notify_new(title,message,icon_name,icon);
-
- notify_notification_set_urgency(n,urgency);
- notify_notification_set_timeout(n,timeout);
-
- notify_notification_add_action(n,"ok",action_label,
+void xfpm_notify_add_action(NotifyNotification *n,
+ const gchar *action_id,
+ const gchar *action_label,
+ NotifyActionCallback notify_callback,
+ gpointer user_data)
+{
+ notify_notification_add_action(n,action_id,action_label,
(NotifyActionCallback)notify_callback,
user_data,NULL);
-
- if ( timeout_to_show != 0 )
+}
+
+void xfpm_notify_show_notification(NotifyNotification *n,guint timeout_to_show)
+{
+ if ( timeout_to_show != 0 )
{
- g_timeout_add_seconds(timeout_to_show,xfpm_notify_send_notification_with_action,n);
+ g_timeout_add_seconds(timeout_to_show,
+ xfpm_notify_send_notification,
+ n);
}
else
{
- xfpm_notify_send_notification_with_action(n);
- }
-}
-
+ xfpm_notify_send_notification(n);
+ }
+}
#endif
Modified: xfce4-power-manager/trunk/src/xfpm-notify.h
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-notify.h 2008-10-18 18:05:53 UTC (rev 5680)
+++ xfce4-power-manager/trunk/src/xfpm-notify.h 2008-10-18 18:26:20 UTC (rev 5681)
@@ -30,26 +30,22 @@
#include <libnotify/notify.h>
#include <gtk/gtk.h>
-void xfpm_notify_simple(const gchar *title,
- const gchar *message,
- guint timeout,
- NotifyUrgency urgency,
- GtkStatusIcon *icon,
- const gchar *icon_name,
- guint8 timeout_to_show);
-
-void xfpm_notify_with_action(const gchar *title,
- const gchar *message,
- guint timeout,
- NotifyUrgency urgency,
- GtkStatusIcon *icon,
- const gchar *icon_name,
- const gchar *action_label,
- guint8 timeout_to_show,
- NotifyActionCallback notify_callback,
- gpointer user_data);
-
-
+NotifyNotification * xfpm_notify_new(const gchar *title,
+ const gchar *message,
+ guint timeout,
+ NotifyUrgency urgency,
+ GtkStatusIcon *icon,
+ const gchar *icon_name);
+
+void xfpm_notify_add_action(NotifyNotification *n,
+ const gchar *action_id,
+ const gchar *action_label,
+ NotifyActionCallback notify_callback,
+ gpointer user_data) ;
+
+void xfpm_notify_show_notification(NotifyNotification *n,
+ guint timeout_to_show);
+
#endif /* HAVE_LIBNOTIFY */
#endif /*__XFPM_NOTIFY_H */
Modified: xfce4-power-manager/trunk/src/xfpm-settings.c
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-settings.c 2008-10-18 18:05:53 UTC (rev 5680)
+++ xfce4-power-manager/trunk/src/xfpm-settings.c 2008-10-18 18:26:20 UTC (rev 5681)
@@ -141,6 +141,17 @@
}
}
+static void
+set_power_save_cb(GtkWidget *widget,XfconfChannel *channel)
+{
+ gboolean value = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
+
+ if(!xfconf_channel_set_bool(channel,POWER_SAVE_CFG,value))
+ {
+ g_critical("Cannot set value %s\n",POWER_SAVE_CFG);
+ }
+}
+
#ifdef HAVE_LIBNOTIFY
static void
set_battery_state_notification_cb(GtkWidget *widget,XfconfChannel *channel)
@@ -376,22 +387,21 @@
static XfpmActionRequest
_combo_helper_function(XfconfChannel *channel,const gchar *config,
- gboolean can_suspend,gboolean can_hibernate,
- gboolean can_use_power_management,XfpmActionRequest action)
+ guint8 power_management,XfpmActionRequest action)
{
- if( !can_use_power_management && action != XFPM_DO_NOTHING )
+ if( power_management == 0 && action != XFPM_DO_NOTHING )
{
xfconf_channel_set_uint(channel,config,XFPM_DO_NOTHING);
return XFPM_DO_NOTHING;
}
- if( !can_suspend && action == XFPM_DO_SUSPEND )
+ if( !(power_management & SYSTEM_CAN_SUSPEND) && action == XFPM_DO_SUSPEND )
{
xfconf_channel_set_uint(channel,config,XFPM_DO_NOTHING);
return XFPM_DO_NOTHING;
}
- if( !can_hibernate && action == XFPM_DO_HIBERNATE )
+ if( !(power_management & SYSTEM_CAN_HIBERNATE) && action == XFPM_DO_HIBERNATE )
{
xfconf_channel_set_uint(channel,config,XFPM_DO_NOTHING);
return XFPM_DO_NOTHING;
@@ -407,7 +417,7 @@
/// Settings frames ///
static GtkWidget *
-xfpm_settings_battery(XfconfChannel *channel, gboolean can_hibernate,gboolean can_power)
+xfpm_settings_battery(XfconfChannel *channel, guint8 power_management)
{
GtkWidget *table;
GtkWidget *frame,*align;
@@ -429,7 +439,7 @@
xfpm_spin_button_set_suffix(XFPM_SPIN_BUTTON(critical_spin),_(" percent"));
gtk_widget_show(critical_spin);
gtk_spin_button_set_value(GTK_SPIN_BUTTON(critical_spin),
- xfconf_channel_get_uint(channel,CRITICAL_BATT_CFG,12));
+ xfconf_channel_get_uint(channel,CRITICAL_BATT_CFG,8));
g_signal_connect(critical_spin,"value-changed",
G_CALLBACK(set_battery_critical_charge_cb),channel);
gtk_table_attach(GTK_TABLE(table),critical_spin,1,2,0,1,GTK_SHRINK,GTK_SHRINK,0,0);
@@ -440,34 +450,56 @@
action = gtk_combo_box_new_text();
gtk_combo_box_append_text(GTK_COMBO_BOX(action),_("Nothing"));
- if ( can_power )
+ if ( power_management != 0 )
{
gtk_combo_box_append_text(GTK_COMBO_BOX(action),_("Shutdown"));
}
- if ( can_hibernate )
+ if ( power_management & SYSTEM_CAN_HIBERNATE )
{
gtk_combo_box_append_text(GTK_COMBO_BOX(action),_("Hibernate"));
}
guint active = xfconf_channel_get_uint(channel,CRITICAL_BATT_ACTION_CFG,XFPM_DO_NOTHING);
- active = _combo_helper_function(channel,CRITICAL_BATT_ACTION_CFG,FALSE,
- can_hibernate,can_power,active);
+ active = _combo_helper_function(channel,CRITICAL_BATT_ACTION_CFG,power_management,active);
+
gtk_combo_box_set_active(GTK_COMBO_BOX(action),active);
gtk_widget_show(action);
g_signal_connect(action,"changed",G_CALLBACK(set_critical_action_cb),channel);
gtk_table_attach(GTK_TABLE(table),action,1,2,1,2,GTK_SHRINK,GTK_SHRINK,0,0);
+ // Power Save Profile
+ GtkWidget *power_save;
+ label = gtk_label_new(_("Enable power save on battery power"));
+ gtk_widget_show(label);
+ gtk_table_attach_defaults(GTK_TABLE(table),label,0,1,2,3);
+ power_save = gtk_check_button_new();
+ gtk_widget_show(power_save);
+ if ( !(power_management & SYSTEM_CAN_POWER_SAVE) )
+ {
+ gtk_widget_set_tooltip_text(power_save,_("No power save method found in the system"));
+ gtk_widget_set_sensitive(power_save,FALSE);
+ }
+
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(power_save),
+ power_management & SYSTEM_CAN_POWER_SAVE ?
+ xfconf_channel_get_bool(channel,POWER_SAVE_CFG,FALSE)
+ : FALSE);
+
+ g_signal_connect(power_save,"toggled",G_CALLBACK(set_power_save_cb),channel);
+ gtk_table_attach(GTK_TABLE(table),power_save,1,2,2,3,GTK_SHRINK,GTK_SHRINK,0,0);
+
+
#ifdef HAVE_LIBNOTIFY
GtkWidget *notify_bt;
label = gtk_label_new(_("Enable battery state notification"));
gtk_widget_show(label);
- gtk_table_attach_defaults(GTK_TABLE(table),label,0,1,2,3);
+ gtk_table_attach_defaults(GTK_TABLE(table),label,0,1,3,4);
notify_bt = gtk_check_button_new();
gtk_widget_show(notify_bt);
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(notify_bt),
xfconf_channel_get_bool(channel,BATT_STATE_NOTIFICATION_CFG,TRUE));
g_signal_connect(notify_bt,"toggled",G_CALLBACK(set_battery_state_notification_cb),channel);
- gtk_table_attach(GTK_TABLE(table),notify_bt,1,2,2,3,GTK_SHRINK,GTK_SHRINK,0,0);
+ gtk_table_attach(GTK_TABLE(table),notify_bt,1,2,3,4,GTK_SHRINK,GTK_SHRINK,0,0);
#endif
gtk_container_add(GTK_CONTAINER(align),table);
@@ -853,8 +885,10 @@
static GtkWidget *
-xfpm_settings_keys(XfconfChannel *channel,gboolean can_power,gboolean can_hibernate,
- gboolean can_suspend,gboolean laptop,guint8 switch_buttons)
+xfpm_settings_keys(XfconfChannel *channel,
+ gboolean laptop,
+ guint8 power_management,
+ guint8 switch_buttons)
{
GtkWidget *table;
GtkWidget *label;
@@ -878,16 +912,15 @@
GtkWidget *power_button;
power_button = gtk_combo_box_new_text();
gtk_combo_box_append_text(GTK_COMBO_BOX(power_button),_("Nothing"));
- if ( can_suspend )
+ if ( power_management & SYSTEM_CAN_SUSPEND )
gtk_combo_box_append_text(GTK_COMBO_BOX(power_button),_("Suspend"));
- if ( can_hibernate )
+ if ( power_management & SYSTEM_CAN_HIBERNATE )
gtk_combo_box_append_text(GTK_COMBO_BOX(power_button),_("Hibernate"));
- if ( can_power)
+ if ( power_management & SYSTEM_CAN_SHUTDOWN )
gtk_combo_box_append_text(GTK_COMBO_BOX(power_button),_("Shutdown"));
active = xfconf_channel_get_uint(channel,POWER_SWITCH_CFG,0);
- active = _combo_helper_function(channel,POWER_SWITCH_CFG,can_suspend,
- can_hibernate,can_power,active);
+ active = _combo_helper_function(channel,POWER_SWITCH_CFG,power_management,active);
gtk_combo_box_set_active(GTK_COMBO_BOX(power_button),active);
gtk_table_attach(GTK_TABLE(table),power_button,1,2,0,1,GTK_SHRINK,GTK_SHRINK,0,0);
@@ -908,14 +941,13 @@
sleep_button = gtk_combo_box_new_text();
gtk_combo_box_append_text(GTK_COMBO_BOX(sleep_button),_("Nothing"));
- if ( can_suspend )
+ if ( power_management & SYSTEM_CAN_SUSPEND )
gtk_combo_box_append_text(GTK_COMBO_BOX(sleep_button),_("Suspend"));
- if ( can_hibernate )
+ if ( power_management & SYSTEM_CAN_HIBERNATE )
gtk_combo_box_append_text(GTK_COMBO_BOX(sleep_button),_("Hibernate"));
- if ( can_power )
+ if ( power_management & SYSTEM_CAN_SHUTDOWN )
gtk_combo_box_append_text(GTK_COMBO_BOX(sleep_button),_("Shutdown"));
- active = _combo_helper_function(channel,POWER_SWITCH_CFG,can_suspend,
- can_hibernate,can_power,active);
+ active = _combo_helper_function(channel,POWER_SWITCH_CFG,power_management,active);
gtk_combo_box_set_active(GTK_COMBO_BOX(sleep_button),active);
gtk_widget_show(sleep_button);
gtk_table_attach(GTK_TABLE(table),sleep_button,1,2,1,2,GTK_SHRINK,GTK_SHRINK,0,0);
@@ -932,14 +964,13 @@
active = xfconf_channel_get_uint(channel,LID_SWITCH_CFG,0);
lid_button = gtk_combo_box_new_text();
gtk_combo_box_append_text(GTK_COMBO_BOX(lid_button),_("Nothing"));
- if ( can_suspend )
+ if ( power_management & SYSTEM_CAN_SUSPEND )
gtk_combo_box_append_text(GTK_COMBO_BOX(lid_button),_("Suspend"));
- if ( can_hibernate )
+ if ( power_management & SYSTEM_CAN_SUSPEND )
gtk_combo_box_append_text(GTK_COMBO_BOX(lid_button),_("Hibernate"));
- if ( can_power )
+ if ( power_management & SYSTEM_CAN_SHUTDOWN )
gtk_combo_box_append_text(GTK_COMBO_BOX(lid_button),_("Shutdown"));
- active = _combo_helper_function(channel,POWER_SWITCH_CFG,can_suspend,
- can_hibernate,can_power,active);
+ active = _combo_helper_function(channel,POWER_SWITCH_CFG,power_management,active);
gtk_combo_box_set_active(GTK_COMBO_BOX(lid_button),active);
gtk_widget_show(lid_button);
gtk_table_attach(GTK_TABLE(table),lid_button,1,2,2,3,GTK_SHRINK,GTK_SHRINK,0,0);
@@ -1154,11 +1185,13 @@
}
GtkWidget *
-xfpm_settings_new(XfconfChannel *channel,gboolean is_laptop,
- gboolean can_hibernate,gboolean can_suspend,
- gboolean can_power,
- gboolean dpms_capable,guint8 govs,
- guint8 switch_buttons,gboolean lcd)
+xfpm_settings_new(XfconfChannel *channel,
+ gboolean is_laptop,
+ guint8 power_management,
+ gboolean dpms_capable,
+ guint8 govs,
+ guint8 switch_buttons,
+ gboolean lcd)
{
GtkWidget *Dialog; /* Main dialog window */
GtkWidget *mainbox; /* Box to get (Dialog)->vbox */
@@ -1176,7 +1209,7 @@
NULL);
gtk_window_set_icon_name(GTK_WINDOW(Dialog),"gpm-ac-adapter");
- gtk_dialog_set_default_response(GTK_DIALOG(Dialog),GTK_RESPONSE_CANCEL);
+ gtk_dialog_set_default_response(GTK_DIALOG(Dialog),GTK_RESPONSE_CLOSE);
mainbox = GTK_DIALOG(Dialog)->vbox;
@@ -1201,11 +1234,11 @@
gtk_notebook_append_page(GTK_NOTEBOOK(nt),box,NULL);
/// Battery settings
- box = xfpm_settings_battery(channel,can_hibernate,can_power);
+ box = xfpm_settings_battery(channel,power_management);
gtk_notebook_append_page(GTK_NOTEBOOK(nt),box,NULL);
/// Keyboard buttons settings
- box = xfpm_settings_keys(channel,can_power,can_hibernate,can_suspend,is_laptop,switch_buttons);
+ box = xfpm_settings_keys(channel,is_laptop,power_management,switch_buttons);
gtk_notebook_append_page(GTK_NOTEBOOK(nt),box,NULL);
/// Dpms settings && LCD brightness settings DPMS existence is checked above
Modified: xfce4-power-manager/trunk/src/xfpm-settings.h
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-settings.h 2008-10-18 18:05:53 UTC (rev 5680)
+++ xfce4-power-manager/trunk/src/xfpm-settings.h 2008-10-18 18:26:20 UTC (rev 5681)
@@ -22,11 +22,13 @@
#ifndef __XFPM_SETTINGS_H
#define __XFPM_SETTINGS_H
-GtkWidget *xfpm_settings_new(XfconfChannel *channel,gboolean is_laptop,
- gboolean can_hibernate,gboolean can_suspend,
- gboolean can_power,
- gboolean dpms_capable,guint8 govs,
- guint8 switch_buttons,gboolean lcd);
+GtkWidget *xfpm_settings_new(XfconfChannel *channel,
+ gboolean is_laptop,
+ guint8 power_management,
+ gboolean dpms_capable,
+ guint8 govs,
+ guint8 switch_buttons,
+ gboolean lcd);
#endif /* __XFPM_SETTINGS_H */
More information about the Goodies-commits
mailing list