[Pkg-xfce-devel] Bug#755234: a more complete patch for xfce4-power-manager 1.2.0-5, a problem with refreshing of battery status

Rafal fatwildcat at gmail.com
Fri Aug 8 15:24:18 UTC 2014


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);



More information about the Pkg-xfce-devel mailing list