summaryrefslogtreecommitdiff
path: root/libpurple/network.c
diff options
context:
space:
mode:
authorDan Williams <dcbw@redhat.com>2011-12-22 00:50:40 +0000
committerDan Williams <dcbw@redhat.com>2011-12-22 00:50:40 +0000
commit94a0e39d3eef2afdd3e9f6948ec92fe09d737f62 (patch)
tree9afb9e21ac6deed4187e287082d9ae3e13903227 /libpurple/network.c
parent17d7d3171690db36eb5533f2347275db1a4ef055 (diff)
downloadpidgin-94a0e39d3eef2afdd3e9f6948ec92fe09d737f62.tar.gz
Support new connection states and signals for NetworkManager 0.9+.
Fixes #13859. committer: Elliott Sales de Andrade <qulogic@pidgin.im>
Diffstat (limited to 'libpurple/network.c')
-rw-r--r--libpurple/network.c22
1 files changed, 20 insertions, 2 deletions
diff --git a/libpurple/network.c b/libpurple/network.c
index 4e30d17f20..f0e4508477 100644
--- a/libpurple/network.c
+++ b/libpurple/network.c
@@ -811,8 +811,20 @@ purple_network_is_available(void)
purple_debug_warning("network", "NetworkManager not active. Assuming connection exists.\n");
}
- if (nm_state == NM_STATE_UNKNOWN || nm_state == NM_STATE_CONNECTED)
- return TRUE;
+ switch (nm_state)
+ {
+ case NM_STATE_UNKNOWN:
+#if NM_CHECK_VERSION(0,8,992)
+ case NM_STATE_CONNECTED_LOCAL:
+ case NM_STATE_CONNECTED_SITE:
+ case NM_STATE_CONNECTED_GLOBAL:
+#else
+ case NM_STATE_CONNECTED:
+#endif
+ return TRUE;
+ default:
+ break;
+ }
return FALSE;
@@ -1149,9 +1161,14 @@ purple_network_init(void)
NM_DBUS_SERVICE,
NM_DBUS_PATH,
NM_DBUS_INTERFACE);
+ /* NM 0.6 signal */
dbus_g_proxy_add_signal(nm_proxy, "StateChange", G_TYPE_UINT, G_TYPE_INVALID);
dbus_g_proxy_connect_signal(nm_proxy, "StateChange",
G_CALLBACK(nm_state_change_cb), NULL, NULL);
+ /* NM 0.7 and later signal */
+ dbus_g_proxy_add_signal(nm_proxy, "StateChanged", G_TYPE_UINT, G_TYPE_INVALID);
+ dbus_g_proxy_connect_signal(nm_proxy, "StateChanged",
+ G_CALLBACK(nm_state_change_cb), NULL, NULL);
dbus_proxy = dbus_g_proxy_new_for_name(nm_conn,
DBUS_SERVICE_DBUS,
@@ -1186,6 +1203,7 @@ purple_network_uninit(void)
#ifdef HAVE_NETWORKMANAGER
if (nm_proxy) {
dbus_g_proxy_disconnect_signal(nm_proxy, "StateChange", G_CALLBACK(nm_state_change_cb), NULL);
+ dbus_g_proxy_disconnect_signal(nm_proxy, "StateChanged", G_CALLBACK(nm_state_change_cb), NULL);
g_object_unref(G_OBJECT(nm_proxy));
}
if (dbus_proxy) {