mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-03-28 02:20:04 +01:00
Merge branch 'master' into 'master'
gnetworkmonitornm: Fix network available detection See merge request GNOME/glib!781
This commit is contained in:
commit
8482318208
@ -52,6 +52,19 @@ typedef enum {
|
|||||||
NM_CONNECTIVITY_FULL
|
NM_CONNECTIVITY_FULL
|
||||||
} NMConnectivityState;
|
} NMConnectivityState;
|
||||||
|
|
||||||
|
/* Copied from https://developer.gnome.org/libnm-util/stable/libnm-util-NetworkManager.html#NMState;
|
||||||
|
* used inline to avoid a NetworkManager dependency from GLib. */
|
||||||
|
typedef enum {
|
||||||
|
NM_STATE_UNKNOWN = 0,
|
||||||
|
NM_STATE_ASLEEP = 10,
|
||||||
|
NM_STATE_DISCONNECTED = 20,
|
||||||
|
NM_STATE_DISCONNECTING = 30,
|
||||||
|
NM_STATE_CONNECTING = 40,
|
||||||
|
NM_STATE_CONNECTED_LOCAL = 50,
|
||||||
|
NM_STATE_CONNECTED_SITE = 60,
|
||||||
|
NM_STATE_CONNECTED_GLOBAL = 70,
|
||||||
|
} NMState;
|
||||||
|
|
||||||
struct _GNetworkMonitorNMPrivate
|
struct _GNetworkMonitorNMPrivate
|
||||||
{
|
{
|
||||||
GDBusProxy *proxy;
|
GDBusProxy *proxy;
|
||||||
@ -155,11 +168,19 @@ sync_properties (GNetworkMonitorNM *nm,
|
|||||||
gboolean emit_signals)
|
gboolean emit_signals)
|
||||||
{
|
{
|
||||||
GVariant *v;
|
GVariant *v;
|
||||||
|
NMState nm_state;
|
||||||
NMConnectivityState nm_connectivity;
|
NMConnectivityState nm_connectivity;
|
||||||
gboolean new_network_available;
|
gboolean new_network_available;
|
||||||
gboolean new_network_metered;
|
gboolean new_network_metered;
|
||||||
GNetworkConnectivity new_connectivity;
|
GNetworkConnectivity new_connectivity;
|
||||||
|
|
||||||
|
v = g_dbus_proxy_get_cached_property (nm->priv->proxy, "State");
|
||||||
|
if (!v)
|
||||||
|
return;
|
||||||
|
|
||||||
|
nm_state = g_variant_get_uint32 (v);
|
||||||
|
g_variant_unref (v);
|
||||||
|
|
||||||
v = g_dbus_proxy_get_cached_property (nm->priv->proxy, "Connectivity");
|
v = g_dbus_proxy_get_cached_property (nm->priv->proxy, "Connectivity");
|
||||||
if (!v)
|
if (!v)
|
||||||
return;
|
return;
|
||||||
@ -167,14 +188,26 @@ sync_properties (GNetworkMonitorNM *nm,
|
|||||||
nm_connectivity = g_variant_get_uint32 (v);
|
nm_connectivity = g_variant_get_uint32 (v);
|
||||||
g_variant_unref (v);
|
g_variant_unref (v);
|
||||||
|
|
||||||
if (nm_connectivity == NM_CONNECTIVITY_UNKNOWN ||
|
if (nm_state <= NM_STATE_CONNECTED_LOCAL)
|
||||||
nm_connectivity == NM_CONNECTIVITY_NONE)
|
|
||||||
{
|
{
|
||||||
new_network_available = FALSE;
|
new_network_available = FALSE;
|
||||||
new_network_metered = FALSE;
|
new_network_metered = FALSE;
|
||||||
new_connectivity = G_NETWORK_CONNECTIVITY_LOCAL;
|
new_connectivity = G_NETWORK_CONNECTIVITY_LOCAL;
|
||||||
}
|
}
|
||||||
|
else if (nm_state <= NM_STATE_CONNECTED_SITE)
|
||||||
|
{
|
||||||
|
new_network_available = FALSE;
|
||||||
|
new_network_metered = FALSE;
|
||||||
|
if (nm_connectivity == NM_CONNECTIVITY_PORTAL)
|
||||||
|
{
|
||||||
|
new_connectivity = G_NETWORK_CONNECTIVITY_PORTAL;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
|
new_connectivity = G_NETWORK_CONNECTIVITY_LIMITED;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else /* nm_state == NM_STATE_CONNECTED_FULL */
|
||||||
{
|
{
|
||||||
|
|
||||||
/* this is only available post NM 1.0 */
|
/* this is only available post NM 1.0 */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user