My previous patch fixes only updates of battery charge level. But, for
example, when AC cord is plugged in, the power manager still insists
that computer is on battery (although states also that battery is
charged). The patch below fixes the problem. It fixes also a problem
with messages like
(xfce4-power-manager:31539): GLib-CRITICAL **: Source ID 73 was not
found when attempting to remove it
The patch:
diff -Naur xfce4-power-manager-1.2.0.orig/src/xfpm-battery.c
xfce4-power-manager-1.2.0/src/xfpm-battery.c
--- xfce4-power-manager-1.2.0.orig/src/xfpm-battery.c 2014-07-26
18:45:42.000000000 +0000
+++ xfce4-power-manager-1.2.0/src/xfpm-battery.c 2014-08-08
14:59:01.705087814 +0000
@@ -603,7 +603,8 @@
}
static void
-xfpm_battery_changed_cb (DBusGProxy *proxy, XfpmBattery *battery)
+xfpm_battery_changed_cb (DBusGProxy *proxy, gchar *arg1,
+ GHashTable *arg2, GStrv arg3, XfpmBattery *battery)
{
GHashTable *props;
@@ -773,7 +774,7 @@
if (battery->priv->notify_idle != 0)
g_source_remove (battery->priv->notify_idle);
- dbus_g_proxy_disconnect_signal (battery->priv->proxy, "Changed",
+ dbus_g_proxy_disconnect_signal (battery->priv->proxy_prop,
"PropertiesChanged",
G_CALLBACK (xfpm_battery_changed_cb), battery);
if ( g_signal_handler_is_connected (battery->priv->conf,
battery->priv->sig ) )
@@ -877,16 +878,18 @@
battery->priv->icon_prefix =
xfpm_battery_get_icon_prefix_device_enum_type (device_type);
battery->priv->battery_name = xfpm_battery_get_name (device_type);
-
- dbus_g_proxy_add_signal (proxy, "Changed", G_TYPE_INVALID);
- dbus_g_proxy_connect_signal (proxy, "Changed",
+ dbus_g_proxy_add_signal (proxy_prop, "PropertiesChanged",
+ G_TYPE_STRING,
+ dbus_g_type_get_map("GHashTable", G_TYPE_STRING, G_TYPE_VALUE),
+ G_TYPE_STRV, G_TYPE_INVALID);
+ dbus_g_proxy_connect_signal (proxy_prop, "PropertiesChanged",
G_CALLBACK (xfpm_battery_changed_cb), battery, NULL);
g_object_set (G_OBJECT (battery),
"has-tooltip", TRUE,
NULL);
- xfpm_battery_changed_cb (proxy, battery);
+ xfpm_battery_changed_cb (proxy, NULL, NULL, NULL, battery);
}
XfpmDeviceType xfpm_battery_get_device_type (XfpmBattery *battery)
diff -Naur xfce4-power-manager-1.2.0.orig/src/xfpm-notify.c
xfce4-power-manager-1.2.0/src/xfpm-notify.c
--- xfce4-power-manager-1.2.0.orig/src/xfpm-notify.c 2014-07-26
18:45:42.000000000 +0000
+++ xfce4-power-manager-1.2.0/src/xfpm-notify.c 2014-08-08
14:55:40.504090112 +0000
@@ -273,7 +273,8 @@
{
if (notify->priv->notify_id != 0)
{
- g_source_remove (notify->priv->notify_id);
+ if(g_main_context_find_source_by_id(NULL,
notify->priv->notify_id) != NULL)
+ g_source_remove (notify->priv->notify_id);
notify->priv->notify_id = 0;
}
@@ -387,7 +388,8 @@
if (notify->priv->critical_id != 0)
{
- g_source_remove (notify->priv->critical_id);
+ if(g_main_context_find_source_by_id(NULL,
notify->priv->critical_id) != NULL)
+ g_source_remove (notify->priv->critical_id);
notify->priv->critical_id = 0;
}
diff -Naur xfce4-power-manager-1.2.0.orig/src/xfpm-power.c
xfce4-power-manager-1.2.0/src/xfpm-power.c
--- xfce4-power-manager-1.2.0.orig/src/xfpm-power.c 2014-07-26
18:45:42.000000000 +0000
+++ xfce4-power-manager-1.2.0/src/xfpm-power.c 2014-08-08
14:59:19.953178302 +0000
@@ -1116,7 +1116,8 @@
}
static void
-xfpm_power_changed_cb (DBusGProxy *proxy, XfpmPower *power)
+xfpm_power_changed_cb (DBusGProxy *proxy, gchar *arg1,
+ GHashTable *arg2, GStrv arg3, XfpmPower *power)
{
xfpm_power_get_properties (power);
xfpm_power_refresh_adaptor_visible (power);
@@ -1344,6 +1345,37 @@
xfpm_power_dbus_class_init (klass);
}
+static void propertiesChangedMarshal(GClosure *closure,
+ GValue *return_value G_GNUC_UNUSED,
+ guint n_param_values,
+ const GValue *param_values,
+ gpointer invocation_hint G_GNUC_UNUSED,
+ gpointer marshal_data)
+{
+ typedef void (*MarshalFunc) (gpointer, gchar*, GHashTable*,
+ GStrv, gpointer);
+ MarshalFunc callback;
+ gpointer data1, data2;
+
+ g_return_if_fail (n_param_values == 4);
+ if (G_CCLOSURE_SWAP_DATA (closure)) {
+ data1 = closure->data;
+ data2 = g_value_peek_pointer(param_values);
+ } else {
+ data1 = g_value_peek_pointer(param_values);
+ data2 = closure->data;
+ }
+ callback = (MarshalFunc)(marshal_data ? marshal_data :
+ ((GCClosure*)closure)->callback);
+
+ callback (data1,
+ g_value_peek_pointer(param_values+1),
+ g_value_peek_pointer(param_values+2),
+ g_value_peek_pointer(param_values+3),
+ data2);
+}
+
+
static void
xfpm_power_init (XfpmPower *power)
{
@@ -1417,18 +1449,25 @@
LOGIND_IFACE);
#endif
+ dbus_g_object_register_marshaller(propertiesChangedMarshal,
+ G_TYPE_NONE, G_TYPE_STRING,
+ dbus_g_type_get_map("GHashTable", G_TYPE_STRING, G_TYPE_VALUE),
+ G_TYPE_STRV, G_TYPE_INVALID);
xfpm_power_get_power_devices (power);
xfpm_power_get_properties (power);
#ifdef ENABLE_POLKIT
xfpm_power_check_polkit_auth (power);
#endif
- dbus_g_proxy_add_signal (power->priv->proxy, "Changed",
G_TYPE_INVALID);
- dbus_g_proxy_add_signal (power->priv->proxy, "DeviceAdded",
G_TYPE_STRING, G_TYPE_INVALID);
- dbus_g_proxy_add_signal (power->priv->proxy, "DeviceRemoved",
G_TYPE_STRING, G_TYPE_INVALID);
+ dbus_g_proxy_add_signal (power->priv->proxy_prop, "PropertiesChanged",
+ G_TYPE_STRING,
+ dbus_g_type_get_map("GHashTable", G_TYPE_STRING, G_TYPE_VALUE),
+ G_TYPE_STRV, G_TYPE_INVALID);
+ dbus_g_proxy_add_signal (power->priv->proxy, "DeviceAdded",
DBUS_TYPE_G_OBJECT_PATH, G_TYPE_INVALID);
+ dbus_g_proxy_add_signal (power->priv->proxy, "DeviceRemoved",
DBUS_TYPE_G_OBJECT_PATH, G_TYPE_INVALID);
dbus_g_proxy_add_signal (power->priv->proxy, "DeviceChanged",
G_TYPE_STRING, G_TYPE_INVALID);
- dbus_g_proxy_connect_signal (power->priv->proxy, "Changed",
+ dbus_g_proxy_connect_signal (power->priv->proxy_prop,
"PropertiesChanged",
G_CALLBACK (xfpm_power_changed_cb), power, NULL);
dbus_g_proxy_connect_signal (power->priv->proxy, "DeviceRemoved",
G_CALLBACK (xfpm_power_device_removed_cb), power, NULL);
@@ -1504,7 +1543,7 @@
if ( power->priv->proxy )
{
- dbus_g_proxy_disconnect_signal (power->priv->proxy, "Changed",
+ dbus_g_proxy_disconnect_signal (power->priv->proxy_prop,
"PropertiesChanged",
G_CALLBACK (xfpm_power_changed_cb), power);
dbus_g_proxy_disconnect_signal (power->priv->proxy, "DeviceRemoved",
G_CALLBACK (xfpm_power_device_removed_cb), power);
--
To UNSUBSCRIBE, email to debian-bugs-dist-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org