[Goodies-commits] r5570 - xfce4-power-manager/trunk/src
Ali Abdallah
aliov at xfce.org
Sat Oct 11 20:57:25 CEST 2008
Author: aliov
Date: 2008-10-11 18:57:25 +0000 (Sat, 11 Oct 2008)
New Revision: 5570
Modified:
xfce4-power-manager/trunk/src/xfpm-ac-adapter.c
xfce4-power-manager/trunk/src/xfpm-battery.c
xfce4-power-manager/trunk/src/xfpm-button.c
xfce4-power-manager/trunk/src/xfpm-hal.c
xfce4-power-manager/trunk/src/xfpm-hal.h
Log:
some optimization
Modified: xfce4-power-manager/trunk/src/xfpm-ac-adapter.c
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-ac-adapter.c 2008-10-11 17:08:50 UTC (rev 5569)
+++ xfce4-power-manager/trunk/src/xfpm-ac-adapter.c 2008-10-11 18:57:25 UTC (rev 5570)
@@ -66,11 +66,23 @@
static gboolean xfpm_ac_adapter_size_changed_cb(GtkStatusIcon *adapter,
gint size,
gpointer data);
-static void xfpm_ac_adapter_get_adapter(XfpmAcAdapter *adapter,
- SystemFormFactor factor);
-static void xfpm_ac_adapter_property_changed_cb(XfpmHal *hal,const gchar *udi,
- const gchar *key,gboolean is_removed,
- gboolean is_added,XfpmAcAdapter *adapter);
+static void xfpm_ac_adapter_get_adapter(XfpmAcAdapter *adapter);
+
+static void xfpm_ac_adapter_device_added_cb(XfpmHal *hal,
+ const gchar *udi,
+ XfpmAcAdapter *adapter);
+
+static void xfpm_ac_adapter_device_removed_cb(XfpmHal *hal,
+ const gchar *udi,
+ XfpmAcAdapter *adapter);
+
+static void xfpm_ac_adapter_property_changed_cb(XfpmHal *hal,
+ const gchar *udi,
+ const gchar *key,
+ gboolean is_removed,
+ gboolean is_added,
+ XfpmAcAdapter *adapter);
+
static void xfpm_ac_adapter_popup_menu(GtkStatusIcon *tray_icon,
guint button,
guint activate_time,
@@ -79,6 +91,11 @@
struct XfpmAcAdapterPrivate
{
XfpmHal *hal;
+ SystemFormFactor factor;
+
+ GQuark adapter_udi;
+
+ gboolean adapter_found;
gboolean present;
gboolean can_suspend;
gboolean can_hibernate;
@@ -121,6 +138,7 @@
priv = XFPM_AC_ADAPTER_GET_PRIVATE(adapter);
priv->hal = xfpm_hal_new();
+ priv->adapter_udi = 0 ;
GError *error = NULL;
@@ -180,17 +198,47 @@
}
static void
-xfpm_ac_adapter_get_adapter(XfpmAcAdapter *adapter,SystemFormFactor factor)
+_ac_adapter_not_found(XfpmAcAdapter *adapter)
{
XfpmAcAdapterPrivate *priv;
priv = XFPM_AC_ADAPTER_GET_PRIVATE(adapter);
- if ( factor != SYSTEM_LAPTOP )
+ /* then the ac kernel module is not loaded */
+ if ( priv->factor == SYSTEM_LAPTOP )
{
- priv->present = TRUE;
- goto l1;
+ priv->present = TRUE; /* assuming present */
+ priv->adapter_found = FALSE;
+ gtk_status_icon_set_tooltip(GTK_STATUS_ICON(adapter),
+ _("Unkown adapter status, the power manager will not work properly"));
+#ifdef HAVE_LIBNOTIFY
+ xfpm_notify_simple(_("Xfce power manager"),
+ _("Unkown adapter status, the power manager will not work properly,"\
+ "make sure ac adapter driver is loaded into the kernel"),
+ 10000,
+ NOTIFY_URGENCY_CRITICAL,
+ NULL,
+ "gpm-ac-adapter",
+ 2);
+
+#endif
+ }
+ else
+ {
+ priv->present = TRUE; /* just for eveything to function correctly */
+ priv->adapter_found = FALSE;
}
+ g_signal_emit(G_OBJECT(adapter),signals[XFPM_AC_ADAPTER_CHANGED],0,priv->present);
+}
+
+static void
+xfpm_ac_adapter_get_adapter(XfpmAcAdapter *adapter)
+{
+ XfpmAcAdapterPrivate *priv;
+ priv = XFPM_AC_ADAPTER_GET_PRIVATE(adapter);
+
+ priv->adapter_udi = 0 ;
+
gchar **udi = NULL;
gint num;
GError *error = NULL;
@@ -202,13 +250,21 @@
g_error_free(error);
return;
}
- if ( !udi )
+
+ if ( num == 0 )
{
- /* I think we should have something like g_strange()! */
- XFPM_DEBUG("No AC Adapter found, assuming running on Solar power\n");
priv->present = TRUE;
+ XFPM_DEBUG("No ac adapter device found\n");
+ _ac_adapter_not_found(adapter);
return;
}
+
+ if ( !udi )
+ {
+ _ac_adapter_not_found(adapter);
+ return;
+ }
+
int i;
for ( i = 0 ; udi[i]; i++)
{
@@ -225,19 +281,67 @@
return;
}
XFPM_DEBUG("Getting udi %s\n",udi[i]);
+ priv->adapter_udi = g_quark_from_string(udi[i]);
+ priv->adapter_found = TRUE;
break;
}
}
+
+ gtk_status_icon_set_tooltip(GTK_STATUS_ICON(adapter),
+ priv->present ? _("Adapter is online") : _("Adapter is offline"));
+ g_signal_emit(G_OBJECT(adapter),signals[XFPM_AC_ADAPTER_CHANGED],0,priv->present);
libhal_free_string_array(udi);
- g_signal_connect(priv->hal,"xfpm-device-property-changed",
- G_CALLBACK(xfpm_ac_adapter_property_changed_cb),adapter);
- l1:
+}
+
+static void
+_get_adapter_status(XfpmAcAdapter *adapter,const gchar *udi)
+{
+ XfpmAcAdapterPrivate *priv;
+ priv = XFPM_AC_ADAPTER_GET_PRIVATE(adapter);
+ GError *error = NULL;
+ gboolean ac_adapter =
+ xfpm_hal_get_bool_info(priv->hal,udi,"ac_adapter.present",&error);
+ if ( error )
+ {
+ XFPM_DEBUG("%s\n",error->message);
+ g_error_free(error);
+ return;
+ }
+ XFPM_DEBUG("Ac adapter changed %d\n",ac_adapter);
+ priv->present = ac_adapter;
gtk_status_icon_set_tooltip(GTK_STATUS_ICON(adapter),
- priv->present ? _("Adapter is online") : _("Adapter is offline"));
+ priv->present ? _("Adapter is online") : _("Adapter is offline"));
g_signal_emit(G_OBJECT(adapter),signals[XFPM_AC_ADAPTER_CHANGED],0,priv->present);
}
static void
+xfpm_ac_adapter_device_added_cb(XfpmHal *hal,const gchar *udi,XfpmAcAdapter *adapter)
+{
+ if ( xfpm_hal_device_have_key(hal,udi,"ac_adapter.present"))
+ {
+ XfpmAcAdapterPrivate *priv;
+ priv = XFPM_AC_ADAPTER_GET_PRIVATE(adapter);
+ priv->adapter_found = TRUE;
+ priv->adapter_udi = g_quark_from_string(udi);
+
+ _get_adapter_status(adapter,udi);
+ }
+}
+
+static void
+xfpm_ac_adapter_device_removed_cb(XfpmHal *hal,const gchar *udi,XfpmAcAdapter *adapter)
+{
+ XfpmAcAdapterPrivate *priv;
+ priv = XFPM_AC_ADAPTER_GET_PRIVATE(adapter);
+
+ if ( priv->adapter_udi == g_quark_from_string(udi) )
+ {
+ XFPM_DEBUG("Adapter removed\n");
+ xfpm_ac_adapter_get_adapter(adapter);
+ }
+}
+
+static void
xfpm_ac_adapter_property_changed_cb(XfpmHal *hal,const gchar *udi,
const gchar *key,gboolean is_removed,
gboolean is_added,XfpmAcAdapter *adapter)
@@ -246,24 +350,8 @@
{
XfpmAcAdapterPrivate *priv;
priv = XFPM_AC_ADAPTER_GET_PRIVATE(adapter);
+ _get_adapter_status(adapter,udi);
- GError *error = NULL;
- gboolean ac_adapter =
- xfpm_hal_get_bool_info(hal,udi,"ac_adapter.present",&error);
- if ( error )
- {
- XFPM_DEBUG("%s\n",error->message);
- g_error_free(error);
- return;
- }
- if ( priv->present != ac_adapter )
- {
- XFPM_DEBUG("Ac adapter changed %d\n",ac_adapter);
- priv->present = ac_adapter;
- gtk_status_icon_set_tooltip(GTK_STATUS_ICON(adapter),
- priv->present ? _("Adapter is online") : _("Adapter is offline"));
- g_signal_emit(G_OBJECT(adapter),signals[XFPM_AC_ADAPTER_CHANGED],0,priv->present);
- }
}
}
@@ -424,5 +512,19 @@
void
xfpm_ac_adapter_monitor(XfpmAcAdapter *adapter,SystemFormFactor factor)
{
- xfpm_ac_adapter_get_adapter(adapter,factor);
-}
+ XfpmAcAdapterPrivate *priv;
+ priv = XFPM_AC_ADAPTER_GET_PRIVATE(adapter);
+ priv->factor = factor;
+ xfpm_ac_adapter_get_adapter(adapter);
+
+ if ( factor == SYSTEM_LAPTOP )
+ {
+ xfpm_hal_connect_to_signals(priv->hal,TRUE,TRUE,TRUE,FALSE);
+ g_signal_connect(priv->hal,"xfpm-device-added",
+ G_CALLBACK(xfpm_ac_adapter_device_added_cb),adapter);
+ g_signal_connect(priv->hal,"xfpm-device-removed",
+ G_CALLBACK(xfpm_ac_adapter_device_removed_cb),adapter);
+ g_signal_connect(priv->hal,"xfpm-device-property-changed",
+ G_CALLBACK(xfpm_ac_adapter_property_changed_cb),adapter);
+ }
+}
Modified: xfce4-power-manager/trunk/src/xfpm-battery.c
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-battery.c 2008-10-11 17:08:50 UTC (rev 5569)
+++ xfce4-power-manager/trunk/src/xfpm-battery.c 2008-10-11 18:57:25 UTC (rev 5570)
@@ -250,6 +250,7 @@
g_error_free(error);
}
+ xfpm_hal_connect_to_signals(priv->hal,TRUE,TRUE,TRUE,FALSE);
g_signal_connect(G_OBJECT(priv->hal),"xfpm-device-added",
G_CALLBACK(xfpm_battery_handle_device_added),
Modified: xfce4-power-manager/trunk/src/xfpm-button.c
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-button.c 2008-10-11 17:08:50 UTC (rev 5569)
+++ xfce4-power-manager/trunk/src/xfpm-button.c 2008-10-11 18:57:25 UTC (rev 5570)
@@ -175,6 +175,8 @@
xfpm_button_load_config(bt);
xfpm_button_get_switches(bt);
+ xfpm_hal_connect_to_signals(priv->hal,FALSE,FALSE,FALSE,TRUE);
+
priv->handler_id =
g_signal_connect(priv->hal,"xfpm-device-condition",
G_CALLBACK(xfpm_button_handle_device_condition_cb),bt);
Modified: xfce4-power-manager/trunk/src/xfpm-hal.c
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-hal.c 2008-10-11 17:08:50 UTC (rev 5569)
+++ xfce4-power-manager/trunk/src/xfpm-hal.c 2008-10-11 18:57:25 UTC (rev 5570)
@@ -51,7 +51,7 @@
const gchar *key,
dbus_bool_t is_removed,
dbus_bool_t is_added);
-
+/*
static void xfpm_hal_device_new_capability (LibHalContext *ctx,
const gchar *udi,
const gchar *capability);
@@ -59,7 +59,7 @@
static void xfpm_hal_device_lost_capability (LibHalContext *ctx,
const gchar *udi,
const gchar *capability);
-
+*/
static void xfpm_hal_device_condition (LibHalContext *ctx,
const gchar *udi,
const gchar *condition_name,
@@ -231,6 +231,7 @@
}
+
static void
xfpm_hal_device_property_modified(LibHalContext *ctx,const gchar *udi,
const gchar *key,dbus_bool_t is_removed,
@@ -241,7 +242,8 @@
g_signal_emit(G_OBJECT(xfpm_hal),signals[XFPM_DEVICE_PROPERTY_CHANGED],0,udi,key,is_removed,is_added);
}
-
+
+/*
static void
xfpm_hal_device_new_capability(LibHalContext *ctx,const gchar *udi,const gchar *capability) {
@@ -259,7 +261,7 @@
g_signal_emit(G_OBJECT(xfpm_hal),signals[XFPM_DEVICE_LOST_CAPABILITY],0,udi,capability);
}
-
+*/
static void xfpm_hal_device_condition (LibHalContext *ctx,
const gchar *udi,
const gchar *condition_name,
@@ -298,23 +300,52 @@
return FALSE;
}
- libhal_ctx_set_device_added(priv->ctx,xfpm_hal_device_added);
- libhal_ctx_set_device_removed(priv->ctx,xfpm_hal_device_removed);
- libhal_ctx_set_device_property_modified(priv->ctx,xfpm_hal_device_property_modified);
- libhal_ctx_set_device_new_capability(priv->ctx,xfpm_hal_device_new_capability);
- libhal_ctx_set_device_lost_capability(priv->ctx,xfpm_hal_device_lost_capability);
- libhal_ctx_set_device_condition(priv->ctx,xfpm_hal_device_condition);
+ libhal_ctx_set_user_data(priv->ctx,xfpm_hal);
+ return TRUE;
+}
+
+gboolean xfpm_hal_connect_to_signals(XfpmHal *hal,
+ gboolean device_removed,
+ gboolean device_added,
+ gboolean device_property_changed,
+ gboolean device_condition)
+{
+ g_return_val_if_fail(XFPM_IS_HAL(hal),FALSE);
+ XfpmHalPrivate *priv;
+ DBusError error;
+ priv = XFPM_HAL_GET_PRIVATE(hal);
+ dbus_error_init(&error);
- libhal_device_property_watch_all(priv->ctx,&error);
+ if (device_added )
+ {
+ libhal_ctx_set_device_added(priv->ctx,xfpm_hal_device_added);
+ }
+ if ( device_removed )
+ {
+ libhal_ctx_set_device_removed(priv->ctx,xfpm_hal_device_removed);
+ }
+ if ( device_property_changed )
+ {
+ libhal_ctx_set_device_property_modified(priv->ctx,xfpm_hal_device_property_modified);
+ }
+ if ( device_condition )
+ {
+ libhal_ctx_set_device_condition(priv->ctx,xfpm_hal_device_condition);
+ }
+
+ //libhal_ctx_set_device_new_capability(priv->ctx,xfpm_hal_device_new_capability);
+ //libhal_ctx_set_device_lost_capability(priv->ctx,xfpm_hal_device_lost_capability);
+
+ libhal_device_property_watch_all(priv->ctx,&error);
+
if ( dbus_error_is_set(&error) ) {
g_printerr("Unable to watch device using HAL %s\n",error.message);
return FALSE;
}
- libhal_ctx_set_user_data(priv->ctx,xfpm_hal);
return TRUE;
-}
+}
gchar **
xfpm_hal_get_device_udi_by_capability(XfpmHal *xfpm_hal,const gchar *capability,
Modified: xfce4-power-manager/trunk/src/xfpm-hal.h
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-hal.h 2008-10-11 17:08:50 UTC (rev 5569)
+++ xfce4-power-manager/trunk/src/xfpm-hal.h 2008-10-11 18:57:25 UTC (rev 5570)
@@ -86,6 +86,12 @@
GType xfpm_hal_get_type (void);
XfpmHal *xfpm_hal_new (void);
+gboolean xfpm_hal_connect_to_signals (XfpmHal *hal,
+ gboolean device_removed,
+ gboolean device_added,
+ gboolean device_property_changed,
+ gboolean device_condition);
+
gchar **xfpm_hal_get_device_udi_by_capability (XfpmHal *xfpm_hal,
const gchar *capability,
gint *num,
More information about the Goodies-commits
mailing list