diff options
-rw-r--r-- | src/connectivity-monitor.c | 46 |
1 files changed, 25 insertions, 21 deletions
diff --git a/src/connectivity-monitor.c b/src/connectivity-monitor.c index 0756d5a9..8ab03f7d 100644 --- a/src/connectivity-monitor.c +++ b/src/connectivity-monitor.c @@ -83,20 +83,32 @@ static McdConnectivityMonitor *connectivity_monitor_singleton = NULL; G_DEFINE_TYPE (McdConnectivityMonitor, mcd_connectivity_monitor, G_TYPE_OBJECT); static void -connectivity_monitor_change_state (McdConnectivityMonitor *connectivity_monitor, - gboolean new_state) +connectivity_monitor_change_states ( + McdConnectivityMonitor *self, + gboolean connected, + gboolean awake) { - McdConnectivityMonitorPrivate *priv; - - priv = connectivity_monitor->priv; + McdConnectivityMonitorPrivate *priv = self->priv; + gboolean old_total = priv->connected && priv->awake; + gboolean new_total = connected && awake; - if (priv->connected == new_state) + if (priv->connected == connected && + priv->awake == awake) return; - priv->connected = new_state; + priv->connected = connected; + priv->awake = awake; + + if (old_total != new_total) + g_signal_emit (self, signals[STATE_CHANGE], 0, new_total); +} - g_signal_emit (connectivity_monitor, signals[STATE_CHANGE], 0, - priv->connected && priv->awake); +static void +connectivity_monitor_set_connected ( + McdConnectivityMonitor *self, + gboolean connected) +{ + connectivity_monitor_change_states (self, connected, self->priv->awake); } static void @@ -104,15 +116,7 @@ connectivity_monitor_set_awake ( McdConnectivityMonitor *self, gboolean awake) { - McdConnectivityMonitorPrivate *priv = self->priv; - - if (priv->awake == awake) - return; - - priv->awake = awake; - - g_signal_emit (self, signals[STATE_CHANGE], 0, - priv->connected && priv->awake); + connectivity_monitor_change_states (self, self->priv->connected, awake); } #ifdef HAVE_NM @@ -146,7 +150,7 @@ connectivity_monitor_nm_state_change_cb (NMClient *client, DEBUG ("New NetworkManager network state %d (connected: %s)", state, new_nm_connected ? "true" : "false"); - connectivity_monitor_change_state (connectivity_monitor, new_nm_connected); + connectivity_monitor_set_connected (connectivity_monitor, new_nm_connected); } #endif @@ -168,7 +172,7 @@ connectivity_monitor_connman_state_changed_cb (DBusGProxy *proxy, DEBUG ("New ConnMan network state %s", new_state); - connectivity_monitor_change_state (connectivity_monitor, new_connected); + connectivity_monitor_set_connected (connectivity_monitor, new_connected); } static void @@ -499,7 +503,7 @@ mcd_connectivity_monitor_set_use_conn (McdConnectivityMonitor *connectivity_moni else #endif { - connectivity_monitor_change_state (connectivity_monitor, TRUE); + connectivity_monitor_set_connected (connectivity_monitor, TRUE); } g_object_notify (G_OBJECT (connectivity_monitor), "use-conn"); |