9bd4d2
From f419966808475cb6c0f0ba2f63967876218ffdaf Mon Sep 17 00:00:00 2001
9bd4d2
From: Julian Andres Klode <julian.klode@canonical.com>
9bd4d2
Date: Tue, 12 Oct 2021 12:01:50 +0200
9bd4d2
Subject: [PATCH 1/2] gnetworkmonitornm: Stop using removed PropertiesChanged
9bd4d2
 signal
9bd4d2
9bd4d2
Use the org.freedesktop.DBus.Properties interface to listen
9bd4d2
to PropertiesChanged signals on /org/freedesktop/NetworkManager.
9bd4d2
9bd4d2
NetworkManager used to provide its own legacy PropertiesChanged
9bd4d2
signal, but that was dropped in
9bd4d2
https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/853
9bd4d2
9bd4d2
This requires NetworkManager >= 1.2 (2016)
9bd4d2
9bd4d2
Fixes: #2505
9bd4d2
Bug-Ubuntu: https://bugs.launchpad.net/bugs/1946196
9bd4d2
---
9bd4d2
 gio/gnetworkmonitornm.c | 29 +++++++----------------------
9bd4d2
 1 file changed, 7 insertions(+), 22 deletions(-)
9bd4d2
9bd4d2
diff --git a/gio/gnetworkmonitornm.c b/gio/gnetworkmonitornm.c
9bd4d2
index 5a36a0ba1..6a6d1d666 100644
9bd4d2
--- a/gio/gnetworkmonitornm.c
9bd4d2
+++ b/gio/gnetworkmonitornm.c
9bd4d2
@@ -267,29 +267,14 @@ update_cached_property (GDBusProxy   *proxy,
9bd4d2
 }
9bd4d2
 
9bd4d2
 static void
9bd4d2
-proxy_signal_cb (GDBusProxy        *proxy,
9bd4d2
-                 const gchar       *sender_name,
9bd4d2
-                 const gchar       *signal_name,
9bd4d2
-                 GVariant          *parameters,
9bd4d2
-                 GNetworkMonitorNM *nm)
9bd4d2
+proxy_properties_changed_cb (GDBusProxy        *proxy,
9bd4d2
+                             GVariant          *changed_properties,
9bd4d2
+                             GStrv              invalidated_properties,
9bd4d2
+                             GNetworkMonitorNM *nm)
9bd4d2
 {
9bd4d2
-  GVariant *asv;
9bd4d2
   GVariantDict *dict;
9bd4d2
 
9bd4d2
-  if (g_strcmp0 (signal_name, "PropertiesChanged") != 0)
9bd4d2
-    return;
9bd4d2
-
9bd4d2
-  g_variant_get (parameters, "(@a{sv})", &asv;;
9bd4d2
-  if (!asv)
9bd4d2
-    return;
9bd4d2
-
9bd4d2
-  dict = g_variant_dict_new (asv);
9bd4d2
-  g_variant_unref (asv);
9bd4d2
-  if (!dict)
9bd4d2
-    {
9bd4d2
-      g_warning ("Failed to handle PropertiesChanged signal from NetworkManager");
9bd4d2
-      return;
9bd4d2
-    }
9bd4d2
+  dict = g_variant_dict_new (changed_properties);
9bd4d2
 
9bd4d2
   update_cached_property (nm->priv->proxy, "Connectivity", dict);
9bd4d2
 
9bd4d2
@@ -361,8 +346,8 @@ g_network_monitor_nm_initable_init (GInitable     *initable,
9bd4d2
       return FALSE;
9bd4d2
     }
9bd4d2
 
9bd4d2
-  nm->priv->signal_id = g_signal_connect (G_OBJECT (proxy), "g-signal",
9bd4d2
-                                          G_CALLBACK (proxy_signal_cb), nm);
9bd4d2
+  nm->priv->signal_id = g_signal_connect (G_OBJECT (proxy), "g-properties-changed",
9bd4d2
+                                          G_CALLBACK (proxy_properties_changed_cb), nm);
9bd4d2
   nm->priv->proxy = proxy;
9bd4d2
   sync_properties (nm, FALSE);
9bd4d2
 
9bd4d2
-- 
9bd4d2
GitLab
9bd4d2
9bd4d2
9bd4d2
From 643fc7ea49e818310f6b3f6e4ebe621c7a4d6bd7 Mon Sep 17 00:00:00 2001
9bd4d2
From: Julian Andres Klode <julian.klode@canonical.com>
9bd4d2
Date: Tue, 12 Oct 2021 17:31:42 +0200
9bd4d2
Subject: [PATCH 2/2] gnetworkmonitornm: Do not re-update cached property
9bd4d2
9bd4d2
GDBusProxy already takes care of updating the cached property
9bd4d2
before emitting the signal, so there is no need to do this
9bd4d2
a second time ourselves.
9bd4d2
---
9bd4d2
 gio/gnetworkmonitornm.c | 22 ----------------------
9bd4d2
 1 file changed, 22 deletions(-)
9bd4d2
9bd4d2
diff --git a/gio/gnetworkmonitornm.c b/gio/gnetworkmonitornm.c
9bd4d2
index 6a6d1d666..a8040fb36 100644
9bd4d2
--- a/gio/gnetworkmonitornm.c
9bd4d2
+++ b/gio/gnetworkmonitornm.c
9bd4d2
@@ -252,34 +252,12 @@ sync_properties (GNetworkMonitorNM *nm,
9bd4d2
     }
9bd4d2
 }
9bd4d2
 
9bd4d2
-static void
9bd4d2
-update_cached_property (GDBusProxy   *proxy,
9bd4d2
-                        const char   *property_name,
9bd4d2
-                        GVariantDict *dict)
9bd4d2
-{
9bd4d2
-  GVariant *v;
9bd4d2
-
9bd4d2
-  v = g_variant_dict_lookup_value (dict, property_name, NULL);
9bd4d2
-  if (!v)
9bd4d2
-    return;
9bd4d2
-  g_dbus_proxy_set_cached_property (proxy, property_name, v);
9bd4d2
-  g_variant_unref (v);
9bd4d2
-}
9bd4d2
-
9bd4d2
 static void
9bd4d2
 proxy_properties_changed_cb (GDBusProxy        *proxy,
9bd4d2
                              GVariant          *changed_properties,
9bd4d2
                              GStrv              invalidated_properties,
9bd4d2
                              GNetworkMonitorNM *nm)
9bd4d2
 {
9bd4d2
-  GVariantDict *dict;
9bd4d2
-
9bd4d2
-  dict = g_variant_dict_new (changed_properties);
9bd4d2
-
9bd4d2
-  update_cached_property (nm->priv->proxy, "Connectivity", dict);
9bd4d2
-
9bd4d2
-  g_variant_dict_unref (dict);
9bd4d2
-
9bd4d2
   sync_properties (nm, TRUE);
9bd4d2
 }
9bd4d2
 
9bd4d2
-- 
9bd4d2
GitLab
9bd4d2