[Goodies-commits] r6940 - in xfce4-power-manager/trunk: . libxfpm
Ali Abdallah
aliov at xfce.org
Wed Mar 18 09:30:14 CET 2009
Author: aliov
Date: 2009-03-18 08:30:14 +0000 (Wed, 18 Mar 2009)
New Revision: 6940
Modified:
xfce4-power-manager/trunk/ChangeLog
xfce4-power-manager/trunk/libxfpm/hal-power.c
Log:
Check carefully if a new added device is a new battery device(hald always duplicated udi for devices)
Modified: xfce4-power-manager/trunk/ChangeLog
===================================================================
--- xfce4-power-manager/trunk/ChangeLog 2009-03-18 07:48:02 UTC (rev 6939)
+++ xfce4-power-manager/trunk/ChangeLog 2009-03-18 08:30:14 UTC (rev 6940)
@@ -1,4 +1,7 @@
+2009-03-18 9:30 Ali aliov at xfce.org
+ * : Check carefully if a new added device is a new battery device(hald always duplicated udi for devices)
+
2009-03-18 8:47 Ali aliov at xfce.org
* : Added Inhibit interface+monitor ScreenSaver Inhibit messages to catch inhibition and inhibit xfpm
Modified: xfce4-power-manager/trunk/libxfpm/hal-power.c
===================================================================
--- xfce4-power-manager/trunk/libxfpm/hal-power.c 2009-03-18 07:48:02 UTC (rev 6939)
+++ xfce4-power-manager/trunk/libxfpm/hal-power.c 2009-03-18 08:30:14 UTC (rev 6940)
@@ -73,6 +73,47 @@
return FALSE;
}
+/*
+ * Check if the device added is actually a new non-moniotred device
+ * Hald duplicates udi when running udevadm trigger
+ */
+static gboolean
+hal_power_is_battery_new (HalPower *power, HalDevice *device)
+{
+ GList *list = NULL;
+ gboolean new_device = TRUE;
+ gint is_new = 0;
+ HalDevice *hash_device;
+ int i;
+
+ list = g_hash_table_get_values (power->priv->hash);
+ if ( !list )
+ return new_device;
+
+ if ( g_list_length(list) == 0 )
+ return new_device;
+
+ for ( i = 0; i < g_list_length(list); i++ )
+ {
+ hash_device = (HalDevice *) g_list_nth_data (list, i);
+
+ if ( hal_device_get_property_int (hash_device, "battery.charge_level.current") !=
+ hal_device_get_property_int (device, "battery.charge_level.current") &&
+ hal_device_get_property_int (hash_device, "battery.charge_level.last_full") !=
+ hal_device_get_property_int (device, "battery.charge_level.last_full") )
+ is_new++;
+ }
+
+ /* Device doesn't match to any one in the hash*/
+ if ( is_new == g_list_length (list) )
+ new_device = TRUE;
+ else
+ new_device = FALSE;
+
+ g_list_free (list);
+ return new_device;
+}
+
static HalBattery *
hal_power_add_battery (HalPower *power, const gchar *udi)
{
@@ -113,10 +154,16 @@
if ( hal_device_has_capability (device, "battery") )
{
+ if ( !hal_power_check_battery (power, device) )
+ goto out;
+
+ if ( !hal_power_is_battery_new (power, device) )
+ goto out;
+
HalBattery *battery = hal_power_add_battery (power, udi);
g_signal_emit (G_OBJECT(power), signals[BATTERY_ADDED], 0, battery);
}
-
+out:
g_object_unref (device);
}
@@ -176,8 +223,11 @@
hal_device_set_udi (device, batteries[i]);
if (!hal_power_check_battery(power, device))
- continue;
+ continue;
+ if ( !hal_power_is_battery_new (power, device) )
+ continue;
+
hal_power_add_battery (power, batteries[i]);
}
hal_manager_free_string_array (batteries);
More information about the Goodies-commits
mailing list