summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMaxim Mikityanskiy <maxtram95@gmail.com>2022-10-01 14:08:45 +0300
committerCarlos Garnacho <carlosg@gnome.org>2023-04-18 09:26:18 +0000
commit2a139f0646b1412f9b40bc558f0b71a51656ecf4 (patch)
tree3d9431a7a2207ca56b96eace893cbdd2f96eefcc
parentad062551ff7fbe0fde06b2fe0308d684b12d2800 (diff)
downloadgnome-settings-daemon-2a139f0646b1412f9b40bc558f0b71a51656ecf4.tar.gz
rfkill: Monitor WwanEnabled property changes properly
g-signal is not fired on property changes, so nm_signal is never called, and all changes of NetworkManager's WwanEnabled property are missed. That leads to an inability to disable the airplane mode on laptops with WWAN after the airplane mode was once enabled by button. Fix this by subscribing to g-properties-changed to actually listen to the updates of WwanEnabled. It also makes the code simpler. The bug was caused by a breaking change in NetworkManager [1] when it deprecated the custom signal in favor of the standard PropertiesChanged on org.freedesktop.DBus.Properties, and gnome-settings-daemon still used the old one. The standard one is supported since NetworkManager 1.2.0, as noted here [2]. [1]: https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/853 [2]: https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/commit/6fb917178aa19c61e909957f5146aa4565e0cb2f Fixes: d74b6de142a2 ("rfkill: watch and set NetworkManager wwan-enabled")
-rw-r--r--plugins/rfkill/gsd-rfkill-manager.c29
1 files changed, 11 insertions, 18 deletions
diff --git a/plugins/rfkill/gsd-rfkill-manager.c b/plugins/rfkill/gsd-rfkill-manager.c
index 5c8b6906..ed684466 100644
--- a/plugins/rfkill/gsd-rfkill-manager.c
+++ b/plugins/rfkill/gsd-rfkill-manager.c
@@ -679,27 +679,20 @@ sync_wwan_enabled (GsdRfkillManager *manager)
}
static void
-nm_signal (GDBusProxy *proxy,
- char *sender_name,
- char *signal_name,
- GVariant *parameters,
- gpointer user_data)
+nm_properties_changed (GDBusProxy *proxy,
+ GVariant *changed,
+ gchar **invalidated,
+ gpointer user_data)
{
GsdRfkillManager *manager = user_data;
- GVariant *changed;
GVariant *property;
- if (g_strcmp0 (signal_name, "PropertiesChanged") == 0) {
- changed = g_variant_get_child_value (parameters, 0);
- property = g_variant_lookup_value (changed, "WwanEnabled", G_VARIANT_TYPE ("b"));
- g_dbus_proxy_set_cached_property (proxy, "WwanEnabled", property);
+ property = g_variant_lookup_value (changed, "WwanEnabled", G_VARIANT_TYPE ("b"));
+ g_dbus_proxy_set_cached_property (proxy, "WwanEnabled", property);
- if (property != NULL) {
- sync_wwan_enabled (manager);
- g_variant_unref (property);
- }
-
- g_variant_unref (changed);
+ if (property != NULL) {
+ sync_wwan_enabled (manager);
+ g_variant_unref (property);
}
}
@@ -726,8 +719,8 @@ on_nm_proxy_gotten (GObject *source,
manager->nm_client = proxy;
- g_signal_connect (manager->nm_client, "g-signal",
- G_CALLBACK (nm_signal), manager);
+ g_signal_connect (manager->nm_client, "g-properties-changed",
+ G_CALLBACK (nm_properties_changed), manager);
sync_wwan_enabled (manager);
out: