[Goodies-commits] r5632 - xfce4-power-manager/trunk/src
Ali Abdallah
aliov at xfce.org
Wed Oct 15 15:51:11 CEST 2008
Author: aliov
Date: 2008-10-15 13:51:10 +0000 (Wed, 15 Oct 2008)
New Revision: 5632
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.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-driver.c
xfce4-power-manager/trunk/src/xfpm-enums.h
xfce4-power-manager/trunk/src/xfpm-hal.c
xfce4-power-manager/trunk/src/xfpm-marshal.list
Log:
Filter Dbus errors,optimization,synchronize suspend/hibernate
Modified: xfce4-power-manager/trunk/src/xfpm-ac-adapter.c
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-ac-adapter.c 2008-10-15 07:48:17 UTC (rev 5631)
+++ xfce4-power-manager/trunk/src/xfpm-ac-adapter.c 2008-10-15 13:51:10 UTC (rev 5632)
@@ -54,6 +54,9 @@
#include "xfpm-hal.h"
#include "xfpm-driver.h"
#include "xfpm-ac-adapter.h"
+#include "xfpm-marshal.h"
+#include "xfpm-enums.h"
+#include "xfpm-enum-types.h"
#include "xfpm-notify.h"
#include "xfpm-debug.h"
@@ -83,7 +86,10 @@
gboolean is_removed,
gboolean is_added,
XfpmAcAdapter *adapter);
-
+static void xfpm_ac_adapter_hibernate_callback(GtkWidget *widget,
+ XfpmAcAdapter *adapter);
+static void xfpm_ac_adapter_suspend_callback(GtkWidget *widget,
+ XfpmAcAdapter *adapter);
static void xfpm_ac_adapter_popup_menu(GtkStatusIcon *tray_icon,
guint button,
guint activate_time,
@@ -106,6 +112,7 @@
enum
{
XFPM_AC_ADAPTER_CHANGED,
+ XFPM_ACTION_REQUEST,
LAST_SIGNAL
};
@@ -128,6 +135,15 @@
g_cclosure_marshal_VOID__BOOLEAN,
G_TYPE_NONE,1,G_TYPE_BOOLEAN);
+ signals[XFPM_ACTION_REQUEST] = g_signal_new("xfpm-action-request",
+ XFPM_TYPE_AC_ADAPTER,
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET(XfpmAcAdapterClass,adapter_action_request),
+ NULL,NULL,
+ _xfpm_marshal_VOID__ENUM_BOOLEAN ,
+ G_TYPE_NONE,2,
+ XFPM_TYPE_ACTION_REQUEST,G_TYPE_BOOLEAN);
+
g_type_class_add_private(klass,sizeof(XfpmAcAdapterPrivate));
}
@@ -187,6 +203,11 @@
static gboolean
xfpm_ac_adapter_size_changed_cb(GtkStatusIcon *adapter,gint size,gpointer data)
{
+ if ( size > 128 )
+ {
+ size = 48;
+ }
+
GdkPixbuf *icon;
icon = xfpm_load_icon("gpm-ac-adapter",size);
@@ -205,7 +226,7 @@
XfpmAcAdapterPrivate *priv;
priv = XFPM_AC_ADAPTER_GET_PRIVATE(adapter);
- /* then the ac kernel module is not loaded */
+ /* then most probably the ac kernel module is not loaded */
if ( priv->factor == SYSTEM_LAPTOP )
{
priv->present = TRUE; /* assuming present */
@@ -359,41 +380,6 @@
}
static void
-xfpm_ac_adapter_report_sleep_errors(XfpmAcAdapter *adapter,const gchar *error,
- const gchar *icon_name)
-{
-#ifdef HAVE_LIBNOTIFY
- xfpm_notify_simple("Xfce power manager",
- error,
- 14000,
- NOTIFY_URGENCY_CRITICAL,
- GTK_STATUS_ICON(adapter),
- icon_name,
- 0);
-#endif
-}
-
-static gboolean
-xfpm_ac_adapter_do_hibernate(XfpmAcAdapter *adapter)
-{
- XfpmAcAdapterPrivate *priv;
- priv = XFPM_AC_ADAPTER_GET_PRIVATE(adapter);
-
- GError *error = NULL;
- guint8 critical;
- gboolean ret =
- xfpm_hal_hibernate(priv->hal,&error,&critical);
-
- if ( !ret && critical == 1) {
- xfpm_ac_adapter_report_sleep_errors(adapter,error->message,"gpm-hibernate");
- g_error_free(error);
- }
-
- return FALSE;
-
-}
-
-static void
xfpm_ac_adapter_hibernate_callback(GtkWidget *widget,XfpmAcAdapter *adapter)
{
gboolean ret =
@@ -403,31 +389,10 @@
if ( ret )
{
- xfpm_lock_screen();
- g_timeout_add_seconds(4,(GSourceFunc)xfpm_ac_adapter_do_hibernate,adapter);
+ g_signal_emit(G_OBJECT(adapter),signals[XFPM_ACTION_REQUEST],0,XFPM_DO_HIBERNATE,FALSE);
}
}
-static gboolean
-xfpm_ac_adapter_do_suspend(XfpmAcAdapter *adapter)
-{
- XfpmAcAdapterPrivate *priv;
- priv = XFPM_AC_ADAPTER_GET_PRIVATE(adapter);
-
- GError *error = NULL;
- guint8 critical = 0;
- gboolean ret =
- xfpm_hal_suspend(priv->hal,&error,&critical);
-
- if ( !ret && critical == 1 )
- {
- xfpm_ac_adapter_report_sleep_errors(adapter,error->message,"gpm-suspend");
- g_error_free(error);
- }
-
- return FALSE;
-}
-
static void
xfpm_ac_adapter_suspend_callback(GtkWidget *widget,XfpmAcAdapter *adapter)
{
@@ -438,8 +403,7 @@
if ( ret )
{
- xfpm_lock_screen();
- g_timeout_add_seconds(3,(GSourceFunc)xfpm_ac_adapter_do_suspend,adapter);
+ g_signal_emit(G_OBJECT(adapter),signals[XFPM_ACTION_REQUEST],0,XFPM_DO_SUSPEND,FALSE);
}
}
Modified: xfce4-power-manager/trunk/src/xfpm-ac-adapter.h
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-ac-adapter.h 2008-10-15 07:48:17 UTC (rev 5631)
+++ xfce4-power-manager/trunk/src/xfpm-ac-adapter.h 2008-10-15 13:51:10 UTC (rev 5632)
@@ -27,6 +27,7 @@
#define XFPM_TYPE_AC_ADAPTER (xfpm_ac_adapter_get_type())
#define XFPM_AC_ADAPTER(o) (G_TYPE_CHECK_INSTANCE_CAST(o,XFPM_TYPE_AC_ADAPTER,XfpmAcAdapter))
+#define XFPM_IS_AC_ADAPTER(o) (G_TYPE_CHECK_INSTANCE_TYPE(o,XFPM_TYPE_AC_ADAPTER))
typedef struct XfpmAcAdapterPrivate XfpmAcAdapterPrivate;
@@ -44,6 +45,9 @@
/* signals */
void (*ac_adapter_changed) (XfpmAcAdapter *xfpm_adapter,
gboolean present);
+ void (*adapter_action_request) (XfpmAcAdapter *adapter,
+ XfpmActionRequest action,
+ gboolean critical);
} XfpmAcAdapterClass;
GType xfpm_ac_adapter_get_type(void) G_GNUC_CONST;
Modified: xfce4-power-manager/trunk/src/xfpm-battery-icon.c
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-battery-icon.c 2008-10-15 07:48:17 UTC (rev 5631)
+++ xfce4-power-manager/trunk/src/xfpm-battery-icon.c 2008-10-15 13:51:10 UTC (rev 5632)
@@ -237,6 +237,11 @@
xfpm_battery_icon_size_change_cb(XfpmBatteryIcon *battery_icon,gint size,gpointer data)
{
XFPM_DEBUG("size change event %d\n",size);
+ if ( size > 128 )
+ {
+ /* Reduce the size until we get the correct size of the system tray */
+ size = 48;
+ }
gchar *icon_name;
g_object_get(G_OBJECT(battery_icon),"icon-name",&icon_name,NULL);
Modified: xfce4-power-manager/trunk/src/xfpm-battery.c
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-battery.c 2008-10-15 07:48:17 UTC (rev 5631)
+++ xfce4-power-manager/trunk/src/xfpm-battery.c 2008-10-15 13:51:10 UTC (rev 5632)
@@ -55,6 +55,7 @@
#include "xfpm-common.h"
#include "xfpm-enum-types.h"
#include "xfpm-notify.h"
+#include "xfpm-marshal.h"
#define XFPM_BATTERY_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE(o,XFPM_TYPE_BATTERY,XfpmBatteryPrivate))
@@ -108,11 +109,8 @@
static gboolean xfpm_battery_check(XfpmBattery *batt,
const gchar *udi);
-static gboolean xfpm_battery_do_hibernate(XfpmBattery *batt);
static void xfpm_battery_hibernate_callback(GtkWidget *widget,
XfpmBattery *batt);
-static gboolean xfpm_battery_do_suspend(XfpmBattery *batt);
-
static void xfpm_battery_suspend_callback(GtkWidget *widget,
XfpmBattery *batt);
static void xfpm_battery_popup_tray_icon_menu(GtkStatusIcon *tray_icon,
@@ -135,6 +133,7 @@
enum
{
XFPM_SHOW_ADAPTER_ICON,
+ XFPM_ACTION_REQUEST,
LAST_SIGNAL
};
@@ -170,7 +169,16 @@
NULL,NULL,
g_cclosure_marshal_VOID__BOOLEAN,
G_TYPE_NONE,1,G_TYPE_BOOLEAN);
-
+
+ signals[XFPM_ACTION_REQUEST] = g_signal_new("xfpm-action-request",
+ XFPM_TYPE_BATTERY,
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET(XfpmBatteryClass,battery_action_request),
+ NULL,NULL,
+ _xfpm_marshal_VOID__ENUM_BOOLEAN ,
+ G_TYPE_NONE,2,
+ XFPM_TYPE_ACTION_REQUEST,G_TYPE_BOOLEAN);
+
g_object_class_install_property(gobject_class,
PROP_AC_ADAPTER,
g_param_spec_boolean("on-ac-adapter",
@@ -194,8 +202,8 @@
g_param_spec_enum("critical-action",
"Critical action",
"Battery critical charge action",
- XFPM_TYPE_CRITICAL_ACTION,
- 0,
+ XFPM_TYPE_ACTION_REQUEST,
+ XFPM_DO_NOTHING,
G_PARAM_READWRITE));
#ifdef HAVE_LIBNOTIFY
@@ -570,7 +578,7 @@
XFPM_DEBUG("Using default values\n");
g_error_free(g_error);
batt->critical_level = 10;
- batt->critical_action = NOTHING;
+ batt->critical_action = XFPM_DO_NOTHING;
#ifdef HAVE_LIBNOTIFY
batt->notify_enabled = TRUE;
#endif
@@ -583,7 +591,7 @@
channel = xfconf_channel_new(XFPM_CHANNEL_CFG);
batt->critical_level = xfconf_channel_get_uint(channel,CRITICAL_BATT_CFG,10);
- batt->critical_action = xfconf_channel_get_uint(channel,CRITICAL_BATT_ACTION_CFG,NOTHING);
+ batt->critical_action = xfconf_channel_get_uint(channel,CRITICAL_BATT_ACTION_CFG,XFPM_DO_NOTHING);
batt->show_tray = xfconf_channel_get_uint(channel,SHOW_TRAY_ICON_CFG,ALWAYS);
batt->power_save = xfconf_channel_get_bool(channel,POWER_SAVE_CFG,FALSE);
#ifdef HAVE_LIBNOTIFY
@@ -759,7 +767,7 @@
XFPM_DEBUG("param:%s value:%s\n",arg1->name,content);
g_free(content);
#endif
- if ( batt->critical_action == NOTHING )
+ if ( batt->critical_action == XFPM_DO_NOTHING )
{
return;
}
@@ -772,122 +780,21 @@
{
return;
}
- if ( batt->critical_action == HIBERNATE )
+ if ( batt->critical_action == XFPM_DO_HIBERNATE )
{
- XFPM_DEBUG("Hibernating the system\n");
- g_timeout_add_seconds(4,(GSourceFunc)xfpm_battery_do_hibernate,batt);
+ 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 == SHUTDOWN )
+ if ( batt->critical_action == XFPM_DO_SHUTDOWN )
{
- XfpmBatteryPrivate *priv;
- priv = XFPM_BATTERY_GET_PRIVATE(batt);
- g_timeout_add_seconds(4,(GSourceFunc)xfpm_hal_shutdown,priv->hal);
+ g_signal_emit(G_OBJECT(batt),signals[XFPM_ACTION_REQUEST],0,XFPM_DO_SHUTDOWN,TRUE);
}
}
}
}
-#ifdef HAVE_LIBNOTIFY
static void
-set_sleep_errors(NotifyNotification *n,gchar *action,XfpmBattery *batt)
-{
- if ( strcmp(action,"ok") )
- {
- g_object_unref(n);
- return;
- }
-
- g_object_unref(n);
-
- XfconfChannel *channel;
- GError *g_error = NULL;
- if ( !xfconf_init(&g_error) )
- {
- g_critical("xfconf init failed: %s\n",g_error->message);
- g_error_free(g_error);
- return;
- }
-
- channel = xfconf_channel_new(XFPM_CHANNEL_CFG);
-
- if ( !xfconf_channel_set_bool(channel,SHOW_SLEEP_ERRORS_CFG,FALSE) )
- {
- g_critical("Cannot set property %s\n",SHOW_SLEEP_ERRORS_CFG);
- }
- batt->show_sleep_errors = FALSE;
- g_object_unref(channel);
- xfconf_shutdown();
-}
-#endif
-
-static void
-xfpm_battery_report_sleep_errors(XfpmBattery *batt,const gchar *error,
- const gchar *icon_name, gboolean simple)
-{
-#ifdef HAVE_LIBNOTIFY
- XfpmBatteryPrivate *priv;
- priv = XFPM_BATTERY_GET_PRIVATE(batt);
-
- GtkStatusIcon *icon = NULL;
-
- GList *icons_list;
- int i=0;
- icons_list = g_hash_table_get_values(priv->batteries);
- for ( i = 0 ; i < g_list_length(icons_list) ; i++ )
- {
- icon = g_list_nth_data(icons_list,i);
- if ( icon ) break;
- }
- if ( simple )
- {
- xfpm_notify_simple("Xfce power manager",
- error,
- 14000,
- NOTIFY_URGENCY_CRITICAL,
- icon != NULL ? GTK_STATUS_ICON(icon) : NULL,
- icon_name,
- 0);
- }
- /* we don't show message than have been disabled from the user*/
- else if ( batt->show_sleep_errors )
- {
- XFPM_DEBUG("Notify with action\n");
- xfpm_notify_with_action("Xfce power manager",
- error,
- 14000,
- NOTIFY_URGENCY_CRITICAL,
- icon != NULL ? GTK_STATUS_ICON(icon) : NULL,
- icon_name,
- _("don't show this message again"),
- 0,
- (NotifyActionCallback)set_sleep_errors,
- batt);
- }
-#endif
-}
-
-static gboolean
-xfpm_battery_do_hibernate(XfpmBattery *batt)
-{
- XfpmBatteryPrivate *priv;
- priv = XFPM_BATTERY_GET_PRIVATE(batt);
-
- GError *error = NULL;
- guint8 critical;
- gboolean ret =
- xfpm_hal_hibernate(priv->hal,&error,&critical);
-
- if ( !ret ) {
- xfpm_battery_report_sleep_errors(batt,error->message,"gpm-hibernate",critical == 1 ? TRUE : FALSE);
- g_error_free(error);
- }
-
- return FALSE;
-
-}
-
-static void
xfpm_battery_hibernate_callback(GtkWidget *widget,XfpmBattery *batt)
{
gboolean ret =
@@ -897,30 +804,10 @@
if ( ret )
{
- xfpm_lock_screen();
- g_timeout_add_seconds(4,(GSourceFunc)xfpm_battery_do_hibernate,batt);
+ g_signal_emit(G_OBJECT(batt),signals[XFPM_ACTION_REQUEST],0,XFPM_DO_HIBERNATE,FALSE);
}
}
-static gboolean
-xfpm_battery_do_suspend(XfpmBattery *batt)
-{
- XfpmBatteryPrivate *priv;
- priv = XFPM_BATTERY_GET_PRIVATE(batt);
-
- GError *error = NULL;
- guint8 critical = 0;
- gboolean ret =
- xfpm_hal_suspend(priv->hal,&error,&critical);
-
- if ( !ret )
- {
- xfpm_battery_report_sleep_errors(batt,error->message,"gpm-suspend",critical == 1 ? TRUE : FALSE );
- g_error_free(error);
- }
-
- return FALSE;
-}
static void
xfpm_battery_suspend_callback(GtkWidget *widget,XfpmBattery *batt)
@@ -932,8 +819,7 @@
if ( ret )
{
- xfpm_lock_screen();
- g_timeout_add_seconds(3,(GSourceFunc)xfpm_battery_do_suspend,batt);
+ g_signal_emit(G_OBJECT(batt),signals[XFPM_ACTION_REQUEST],0,XFPM_DO_SUSPEND,FALSE);
}
}
@@ -1201,3 +1087,34 @@
xfpm_battery_get_devices(batt);
xfpm_battery_refresh(batt);
}
+
+
+#ifdef HAVE_LIBNOTIFY
+void xfpm_battery_show_error(XfpmBattery *batt,
+ const gchar *icon_name,
+ const gchar *error)
+{
+ g_return_if_fail(XFPM_IS_BATTERY(batt));
+
+ XfpmBatteryPrivate *priv;
+ priv = XFPM_BATTERY_GET_PRIVATE(batt);
+
+ GtkStatusIcon *icon = NULL;
+
+ GList *icons_list;
+ int i=0;
+ icons_list = g_hash_table_get_values(priv->batteries);
+ for ( i = 0 ; i < g_list_length(icons_list) ; i++ )
+ {
+ icon = g_list_nth_data(icons_list,i);
+ if ( icon ) break;
+ }
+ xfpm_notify_simple("Xfce power manager",
+ error,
+ 14000,
+ NOTIFY_URGENCY_CRITICAL,
+ icon != NULL ? GTK_STATUS_ICON(icon) : NULL,
+ icon_name,
+ 0);
+}
+#endif
Modified: xfce4-power-manager/trunk/src/xfpm-battery.h
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-battery.h 2008-10-15 07:48:17 UTC (rev 5631)
+++ xfce4-power-manager/trunk/src/xfpm-battery.h 2008-10-15 13:51:10 UTC (rev 5632)
@@ -34,6 +34,7 @@
#define XFPM_TYPE_BATTERY (xfpm_battery_get_type())
#define XFPM_BATTERY(o) (G_TYPE_CHECK_INSTANCE_CAST(o,XFPM_TYPE_BATTERY,XfpmBattery))
+#define XFPM_IS_BATTERY(o) (G_TYPE_CHECK_INSTANCE_TYPE(o,XFPM_TYPE_BATTERY))
typedef struct XfpmBatteryPrivate XfpmBatteryPrivate;
@@ -44,12 +45,11 @@
gboolean ac_adapter_present;
guint critical_level;
- XfpmCriticalAction critical_action;
+ XfpmActionRequest critical_action;
XfpmShowIcon show_tray;
gboolean can_hibernate;
gboolean can_suspend;
- gboolean show_sleep_errors;
gboolean power_save;
#ifdef HAVE_LIBNOTIFY
@@ -62,9 +62,12 @@
{
GObjectClass parent_class;
- /* signal */
- void (*show_adapter_icon) (XfpmBattery *batt,
- gboolean show);
+ /* signals */
+ void (*show_adapter_icon) (XfpmBattery *batt,
+ gboolean show);
+ void (*battery_action_request) (XfpmBattery *batt,
+ XfpmActionRequest action,
+ gboolean critical);
} XfpmBatteryClass;
@@ -72,6 +75,11 @@
XfpmBattery *xfpm_battery_new (void);
void xfpm_battery_monitor (XfpmBattery *batt);
+#ifdef HAVE_LIBNOTIFY
+void xfpm_battery_show_error(XfpmBattery *batt,
+ const gchar *icon_name,
+ const gchar *error);
+#endif
G_END_DECLS
#endif
Modified: xfce4-power-manager/trunk/src/xfpm-button.c
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-button.c 2008-10-15 07:48:17 UTC (rev 5631)
+++ xfce4-power-manager/trunk/src/xfpm-button.c 2008-10-15 13:51:10 UTC (rev 5632)
@@ -48,7 +48,9 @@
#include "xfpm-debug.h"
#include "xfpm-common.h"
#include "xfpm-notify.h"
+#include "xfpm-enums.h"
#include "xfpm-enum-types.h"
+#include "xfpm-marshal.h"
#define XFPM_BUTTON_GET_PRIVATE(o) \
(G_TYPE_INSTANCE_GET_PRIVATE(o,XFPM_TYPE_BUTTON,XfpmButtonPrivate))
@@ -65,10 +67,9 @@
guint prop_id,
GValue *value,
GParamSpec *pspec);
+
static void xfpm_button_do_suspend(XfpmButton *bt);
static void xfpm_button_do_hibernate(XfpmButton *bt);
-static gboolean xfpm_button_hibernate(XfpmButton *bt);
-static gboolean xfpm_button_suspend(XfpmButton *bt);
static void xfpm_button_lid_pressed(XfpmButton *bt,const gchar *udi);
static void xfpm_button_power_pressed(XfpmButton *bt,const gchar *udi);
@@ -102,6 +103,14 @@
G_DEFINE_TYPE(XfpmButton,xfpm_button,G_TYPE_OBJECT)
+enum
+{
+ XFPM_ACTION_REQUEST,
+ LAST_SIGNAL
+};
+
+static guint signals[LAST_SIGNAL] = { 0,};
+
enum
{
PROP_0,
@@ -118,13 +127,22 @@
gobject_class->set_property = xfpm_button_set_property;
gobject_class->get_property = xfpm_button_get_property;
+ signals[XFPM_ACTION_REQUEST] = g_signal_new("xfpm-action-request",
+ XFPM_TYPE_BUTTON,
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET(XfpmButtonClass,button_action_request),
+ NULL,NULL,
+ _xfpm_marshal_VOID__ENUM_BOOLEAN ,
+ G_TYPE_NONE,2,
+ XFPM_TYPE_ACTION_REQUEST,G_TYPE_BOOLEAN);
+
g_object_class_install_property(gobject_class,
PROP_LID_ACTION,
g_param_spec_enum("lid-switch-action",
"lid switch action",
"lid switch action",
- XFPM_TYPE_BUTTON_ACTION,
- BUTTON_DO_NOTHING,
+ XFPM_TYPE_ACTION_REQUEST,
+ XFPM_DO_NOTHING,
G_PARAM_READWRITE));
g_object_class_install_property(gobject_class,
@@ -132,16 +150,16 @@
g_param_spec_enum("sleep-switch-action",
"sleep switch action",
"sleep switch action",
- XFPM_TYPE_BUTTON_ACTION,
- BUTTON_DO_NOTHING,
+ XFPM_TYPE_ACTION_REQUEST,
+ XFPM_DO_NOTHING,
G_PARAM_READWRITE));
g_object_class_install_property(gobject_class,
PROP_LID_ACTION,
g_param_spec_enum("power-switch-action",
"power switch action",
"power switch action",
- XFPM_TYPE_BUTTON_ACTION,
- BUTTON_DO_NOTHING,
+ XFPM_TYPE_ACTION_REQUEST,
+ XFPM_DO_NOTHING,
G_PARAM_READWRITE));
g_type_class_add_private(klass,sizeof(XfpmButtonPrivate));
@@ -264,67 +282,45 @@
return FALSE;
}
-static gboolean
-xfpm_button_suspend(XfpmButton *bt)
+static void
+xfpm_button_do_hibernate(XfpmButton *bt)
{
XfpmButtonPrivate *priv;
priv = XFPM_BUTTON_GET_PRIVATE(bt);
- guint8 critical;
-
- xfpm_hal_suspend(priv->hal,NULL,&critical);
- g_timeout_add(10,(GSourceFunc)_unblock_handler,priv);
+ g_signal_handler_block(priv->hal,priv->handler_id);
- return FALSE;
-}
-
-static gboolean
-xfpm_button_hibernate(XfpmButton *bt)
-{
- XfpmButtonPrivate *priv;
- priv = XFPM_BUTTON_GET_PRIVATE(bt);
- guint8 critical;
+ g_signal_emit(G_OBJECT(bt),signals[XFPM_ACTION_REQUEST],0,XFPM_DO_HIBERNATE,FALSE);
- xfpm_hal_hibernate(priv->hal,NULL,&critical);
g_timeout_add(10,(GSourceFunc)_unblock_handler,priv);
- return FALSE;
}
static void
-xfpm_button_do_hibernate(XfpmButton *bt)
-{
- XfpmButtonPrivate *priv;
- priv = XFPM_BUTTON_GET_PRIVATE(bt);
-
- g_signal_handler_block(priv->hal,priv->handler_id);
- g_timeout_add_seconds(2,(GSourceFunc)xfpm_button_hibernate,bt);
-}
-
-static void
xfpm_button_do_suspend(XfpmButton *bt)
{
XfpmButtonPrivate *priv;
priv = XFPM_BUTTON_GET_PRIVATE(bt);
g_signal_handler_block(priv->hal,priv->handler_id);
- g_timeout_add_seconds(2,(GSourceFunc)xfpm_button_suspend,bt);
+
+ g_signal_emit(G_OBJECT(bt),signals[XFPM_ACTION_REQUEST],0,XFPM_DO_SUSPEND,FALSE);
+
+ g_timeout_add(10,(GSourceFunc)_unblock_handler,priv);
}
static void
-_proccess_action(XfpmButton *bt,XfpmButtonAction action)
+_proccess_action(XfpmButton *bt,XfpmActionRequest action)
{
- if ( action == BUTTON_DO_SUSPEND )
+ if ( action == XFPM_DO_SUSPEND )
{
- xfpm_lock_screen();
xfpm_button_do_suspend(bt);
}
- else if ( action == BUTTON_DO_HIBERNATE )
+ else if ( action == XFPM_DO_HIBERNATE )
{
- xfpm_lock_screen();
xfpm_button_do_hibernate(bt);
}
- else if ( action == BUTTON_DO_SHUTDOWN )
+ else if ( action == XFPM_DO_SHUTDOWN )
{
XfpmButtonPrivate *priv;
priv = XFPM_BUTTON_GET_PRIVATE(bt);
@@ -338,7 +334,7 @@
static void
xfpm_button_lid_pressed(XfpmButton *bt,const gchar *udi)
{
- if ( bt->lid_action == BUTTON_DO_NOTHING )
+ if ( bt->lid_action == XFPM_DO_NOTHING )
{
return;
}
@@ -374,7 +370,7 @@
static void
xfpm_button_power_pressed(XfpmButton *bt,const gchar *udi)
{
- if ( bt->power_action == BUTTON_DO_NOTHING )
+ if ( bt->power_action == XFPM_DO_NOTHING )
{
return;
}
@@ -413,7 +409,7 @@
XfpmButtonPrivate *priv;
priv = XFPM_BUTTON_GET_PRIVATE(bt);
- if ( bt->sleep_action == BUTTON_DO_NOTHING )
+ if ( bt->sleep_action == XFPM_DO_NOTHING )
{
return;
}
@@ -487,18 +483,18 @@
g_critical("xfconf init failed: %s\n",g_error->message);
XFPM_DEBUG("Using default values\n");
g_error_free(g_error);
- bt->lid_action = BUTTON_DO_NOTHING;
- bt->sleep_action = BUTTON_DO_NOTHING;
- bt->power_action = BUTTON_DO_NOTHING;
+ bt->lid_action = XFPM_DO_NOTHING;
+ bt->sleep_action = XFPM_DO_NOTHING;
+ bt->power_action = XFPM_DO_NOTHING;
return;
}
XfconfChannel *channel;
channel = xfconf_channel_new(XFPM_CHANNEL_CFG);
- bt->lid_action = xfconf_channel_get_uint(channel,LID_SWITCH_CFG,BUTTON_DO_NOTHING);
- bt->sleep_action = xfconf_channel_get_uint(channel,SLEEP_SWITCH_CFG,BUTTON_DO_NOTHING);
- bt->power_action = xfconf_channel_get_uint(channel,POWER_SWITCH_CFG,BUTTON_DO_NOTHING);
+ bt->lid_action = xfconf_channel_get_uint(channel,LID_SWITCH_CFG,XFPM_DO_NOTHING);
+ bt->sleep_action = xfconf_channel_get_uint(channel,SLEEP_SWITCH_CFG,XFPM_DO_NOTHING);
+ bt->power_action = xfconf_channel_get_uint(channel,POWER_SWITCH_CFG,XFPM_DO_NOTHING);
g_object_unref(channel);
xfconf_shutdown();
Modified: xfce4-power-manager/trunk/src/xfpm-button.h
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-button.h 2008-10-15 07:48:17 UTC (rev 5631)
+++ xfce4-power-manager/trunk/src/xfpm-button.h 2008-10-15 13:51:10 UTC (rev 5632)
@@ -39,9 +39,9 @@
GObject parent;
XfpmButtonPrivate *priv;
- XfpmButtonAction lid_action;
- XfpmButtonAction power_action;
- XfpmButtonAction sleep_action;
+ XfpmActionRequest lid_action;
+ XfpmActionRequest power_action;
+ XfpmActionRequest sleep_action;
} XfpmButton;
@@ -50,6 +50,10 @@
{
GObjectClass parent_class;
+ void (*button_action_request) (XfpmButton *bt,
+ XfpmActionRequest action,
+ gboolean critical);
+
} XfpmButtonClass;
GType xfpm_button_get_type(void) G_GNUC_CONST;
Modified: xfce4-power-manager/trunk/src/xfpm-driver.c
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-driver.c 2008-10-15 07:48:17 UTC (rev 5631)
+++ xfce4-power-manager/trunk/src/xfpm-driver.c 2008-10-15 13:51:10 UTC (rev 5632)
@@ -91,6 +91,21 @@
static gboolean xfpm_driver_show_options_dialog(XfpmDriver *drv);
+/* Function that receives events suspend/hibernate,shutdown for all
+ * Xfce power manager componenents and syncronize them
+ */
+#ifdef HAVE_LIBNOTIFY
+static void xfpm_driver_report_sleep_errors(XfpmDriver *driver,
+ const gchar *icon_name,
+ const gchar *error);
+#endif
+static gboolean xfpm_driver_do_suspend(gpointer data);
+static gboolean xfpm_driver_do_hibernate(gpointer data);
+static void xfpm_driver_handle_action_request(GObject *object,
+ guint action,
+ gboolean critical,
+ XfpmDriver *drv);
+
/* DBus message Filter and replies */
static void xfpm_driver_send_reply(DBusConnection *conn,DBusMessage *mess);
static DBusHandlerResult xfpm_driver_signal_filter
@@ -110,6 +125,8 @@
gboolean can_suspend;
gboolean can_hibernate;
+ gboolean accept_sleep_request;
+
gboolean cpufreq_control;
gboolean buttons_control;
gboolean lcd_brightness_control;
@@ -148,6 +165,7 @@
priv->cpufreq_control = FALSE;
priv->buttons_control = FALSE;
priv->lcd_brightness_control = FALSE;
+ priv->accept_sleep_request = TRUE;
priv->loop = NULL;
priv->cpu = NULL;
priv->adapter = NULL;
@@ -519,7 +537,135 @@
return FALSE;
}
+#ifdef HAVE_LIBNOTIFY
static void
+xfpm_driver_report_sleep_errors(XfpmDriver *driver,const gchar *icon_name,const gchar *error)
+{
+ XfpmDriverPrivate *priv;
+ priv = XFPM_DRIVER_GET_PRIVATE(driver);
+
+ gboolean adapter_visible;
+ g_object_get(G_OBJECT(priv->adapter),"visible",&adapter_visible,NULL);
+
+ if ( adapter_visible )
+ {
+ xfpm_notify_simple("Xfce power manager",
+ error,
+ 14000,
+ NOTIFY_URGENCY_CRITICAL,
+ GTK_STATUS_ICON(priv->adapter),
+ icon_name,
+ 0);
+
+ }
+ else /* the battery object will take care */
+ {
+ xfpm_battery_show_error(priv->batt,icon_name,error);
+ }
+
+}
+#endif
+
+static gboolean
+xfpm_driver_do_suspend(gpointer data)
+{
+ XfpmDriver *drv = XFPM_DRIVER(data);
+ XfpmDriverPrivate *priv;
+ GError *error = NULL;
+ guint8 critical;
+
+ priv = XFPM_DRIVER_GET_PRIVATE(drv);
+
+ xfpm_hal_suspend(priv->hal,&error,&critical);
+ if ( error )
+ {
+ XFPM_DEBUG("error suspend: %s\n",error->message);
+ if ( critical == 1)
+ xfpm_driver_report_sleep_errors(drv,"gpm-suspend",error->message);
+ g_error_free(error);
+ }
+
+ priv->accept_sleep_request = TRUE;
+
+ return FALSE;
+
+}
+
+static gboolean
+xfpm_driver_do_hibernate(gpointer data)
+{
+ XfpmDriver *drv = XFPM_DRIVER(data);
+ XfpmDriverPrivate *priv;
+ GError *error = NULL;
+ guint8 critical;
+
+ priv = XFPM_DRIVER_GET_PRIVATE(drv);
+
+ xfpm_hal_hibernate(priv->hal,&error,&critical);
+
+ if ( error )
+ {
+ XFPM_DEBUG("error hibernate: %s\n",error->message);
+ if ( critical == 1)
+ xfpm_driver_report_sleep_errors(drv,"gpm-hibernate",error->message);
+ g_error_free(error);
+ }
+
+ priv->accept_sleep_request = TRUE;
+ return FALSE;
+
+}
+
+static void
+xfpm_driver_handle_action_request(GObject *object,XfpmActionRequest action,
+ gboolean critical,XfpmDriver *drv)
+{
+ g_return_if_fail(XFPM_IS_DRIVER(drv));
+
+ XfpmDriverPrivate *priv;
+ priv = XFPM_DRIVER_GET_PRIVATE(drv);
+#ifdef DEBUG
+ gchar *content;
+ GValue value = { 0, };
+ g_value_init(&value,XFPM_TYPE_ACTION_REQUEST);
+ g_value_set_enum(&value,action);
+ content = g_strdup_value_contents(&value);
+
+ if ( XFPM_IS_BATTERY(object) ) XFPM_DEBUG("Action %s request from the Battery object\n",content);
+ if ( XFPM_IS_AC_ADAPTER(object) ) XFPM_DEBUG("Action %s request from the adapter object\n",content);
+ if ( XFPM_IS_BUTTON(object) ) XFPM_DEBUG("Action %s request from the Button object\n",content);
+
+ g_free(content);
+
+#endif
+ if ( !priv->accept_sleep_request )
+ {
+ XFPM_DEBUG("Ignoring sleep request\n");
+ return;
+ }
+
+ /* Block any other event here */
+ priv->accept_sleep_request = FALSE;
+
+ switch ( action )
+ {
+ case XFPM_DO_SUSPEND:
+ //xfpm_lock_screen();
+ g_timeout_add_seconds(2,(GSourceFunc)xfpm_driver_do_suspend,drv);
+ break;
+ case XFPM_DO_HIBERNATE:
+ //xfpm_lock_screen();
+ g_timeout_add_seconds(2,(GSourceFunc)xfpm_driver_do_hibernate,drv);
+ break;
+ case XFPM_DO_SHUTDOWN:
+ break;
+ default:
+ break;
+ }
+
+}
+
+static void
xfpm_driver_send_reply(DBusConnection *conn,DBusMessage *mess)
{
DBusMessage *reply;
@@ -708,6 +854,8 @@
else
{
priv->buttons_control = TRUE;
+ g_signal_connect(priv->bt,"xfpm-action-request",
+ G_CALLBACK(xfpm_driver_handle_action_request),drv);
}
priv->lcd = xfpm_lcd_brightness_new();
@@ -720,11 +868,15 @@
priv->batt = xfpm_battery_new();
g_signal_connect(priv->batt,"xfpm-show-adapter-icon",G_CALLBACK(_show_adapter_icon),drv);
-
+ g_signal_connect(priv->batt,"xfpm-action-request",
+ G_CALLBACK(xfpm_driver_handle_action_request),drv);
+
priv->adapter = xfpm_ac_adapter_new(FALSE);
g_signal_connect(priv->adapter,"xfpm-ac-adapter-changed",
G_CALLBACK(xfpm_driver_ac_adapter_state_changed_cb),drv);
-
+ g_signal_connect(priv->adapter,"xfpm-action-request",
+ G_CALLBACK(xfpm_driver_handle_action_request),drv);
+
/* This will give a signal concerning the AC adapter presence,
* so we get the callback and then we set up the ac adapter
* status for dpms and cpu lcd,...
Modified: xfce4-power-manager/trunk/src/xfpm-enums.h
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-enums.h 2008-10-15 07:48:17 UTC (rev 5631)
+++ xfce4-power-manager/trunk/src/xfpm-enums.h 2008-10-15 13:51:10 UTC (rev 5632)
@@ -5,13 +5,14 @@
#include <config.h>
#endif
-/* Action to taken when battery charge level is critical */
typedef enum
{
- NOTHING,
- SHUTDOWN,
- HIBERNATE
-} XfpmCriticalAction;
+ XFPM_DO_NOTHING,
+ XFPM_DO_SUSPEND,
+ XFPM_DO_HIBERNATE,
+ XFPM_DO_SHUTDOWN
+
+} XfpmActionRequest;
/* Icon tray */
typedef enum
@@ -55,15 +56,4 @@
} XfpmCpuGovernor;
-
-/* button switch control */
-typedef enum
-{
- BUTTON_DO_NOTHING,
- BUTTON_DO_SUSPEND,
- BUTTON_DO_HIBERNATE,
- BUTTON_DO_SHUTDOWN
-
-} XfpmButtonAction;
-
#endif
Modified: xfce4-power-manager/trunk/src/xfpm-hal.c
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-hal.c 2008-10-15 07:48:17 UTC (rev 5631)
+++ xfce4-power-manager/trunk/src/xfpm-hal.c 2008-10-15 13:51:10 UTC (rev 5632)
@@ -504,12 +504,33 @@
return TRUE;
}
+static gboolean
+_filter_error_message(const gchar *error)
+{
+ if(!strcmp("No back-end for your operating system",error))
+ {
+ return TRUE;
+ }
+ else if (!strcmp("No hibernate script found",error) )
+ {
+ return TRUE;
+ }
+ else if (!strcmp("No suspend method found",error) )
+ {
+ return TRUE;
+ }
+ else if (!strcmp("No hibernate method found",error))
+ {
+ return TRUE;
+ }
+ return FALSE;
+}
gboolean
xfpm_hal_hibernate(XfpmHal *xfpm_hal,GError **gerror,guint8 *critical)
{
g_return_val_if_fail(XFPM_IS_HAL(xfpm_hal),FALSE);
-
+
XfpmHalPrivate *priv;
priv = XFPM_HAL_GET_PRIVATE(xfpm_hal);
@@ -518,7 +539,7 @@
DBusMessage *mess,*reply;
DBusError error;
gint exit_code;
-
+
mess = xfpm_dbus_new_message(HAL_DBUS_SERVICE,
HAL_ROOT_COMPUTER,
HAL_DBUS_INTERFACE_POWER,
@@ -531,19 +552,26 @@
}
dbus_error_init(&error);
+
reply = dbus_connection_send_with_reply_and_block(priv->connection,
mess,
SLEEP_TIMEOUT,
&error);
-
dbus_message_unref(mess);
if ( dbus_error_is_set(&error) )
{
XFPM_DEBUG("error=%s\n",error.message);
dbus_set_g_error(gerror,&error);
+ if ( _filter_error_message(error.message) )
+ {
+ *critical = 1;
+ }
+ else
+ {
+ *critical = 0;
+ }
dbus_error_free(&error);
- *critical = 0;
return FALSE;
}
@@ -571,7 +599,7 @@
}
if ( exit_code > 1 )
{
- g_set_error(gerror,0,0,_("Failed to hibernate"));
+ g_set_error(gerror,0,0,_("System failed to hibernate"));
return FALSE;
}
break;
@@ -616,7 +644,6 @@
dbus_message_append_args(mess,DBUS_TYPE_INT32,&seconds,DBUS_TYPE_INVALID);
dbus_error_init(&error);
-
reply = dbus_connection_send_with_reply_and_block(priv->connection,
mess,
SLEEP_TIMEOUT,
@@ -627,8 +654,15 @@
{
XFPM_DEBUG("error=%s\n",error.message);
dbus_set_g_error(gerror,&error);
+ if ( _filter_error_message(error.message) )
+ {
+ *critical = 1;
+ }
+ else
+ {
+ *critical = 0;
+ }
dbus_error_free(&error);
- *critical = 0;
return FALSE;
}
@@ -656,7 +690,7 @@
}
if ( exit_code > 1 )
{
- g_set_error(gerror,0,0,_("Failed to suspend"));
+ g_set_error(gerror,0,0,_("System failed to suspend"));
return FALSE;
}
break;
Modified: xfce4-power-manager/trunk/src/xfpm-marshal.list
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-marshal.list 2008-10-15 07:48:17 UTC (rev 5631)
+++ xfce4-power-manager/trunk/src/xfpm-marshal.list 2008-10-15 13:51:10 UTC (rev 5632)
@@ -2,3 +2,5 @@
VOID:STRING,STRING
VOID:STRING,STRING,STRING
VOID:STRING,STRING,BOOLEAN,BOOLEAN
+VOID:ENUM,BOOLEAN
+
More information about the Goodies-commits
mailing list