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

Reply via email to