diff options
Diffstat (limited to 'src/nm-active-connection.c')
| -rw-r--r-- | src/nm-active-connection.c | 24 |
1 files changed, 20 insertions, 4 deletions
diff --git a/src/nm-active-connection.c b/src/nm-active-connection.c index f1bb1ede..08037ebe 100644 --- a/src/nm-active-connection.c +++ b/src/nm-active-connection.c @@ -163,6 +163,7 @@ NM_UTILS_FLAGS2STR_DEFINE (_state_flags_to_string, NMActivationStateFlags, NM_UTILS_FLAGS2STR (NM_ACTIVATION_STATE_FLAG_IP6_READY, "ip6-ready"), NM_UTILS_FLAGS2STR (NM_ACTIVATION_STATE_FLAG_MASTER_HAS_SLAVES, "master-has-slaves"), NM_UTILS_FLAGS2STR (NM_ACTIVATION_STATE_FLAG_LIFETIME_BOUND_TO_PROFILE_VISIBILITY, "lifetime-bound-to-profile-visibility"), + NM_UTILS_FLAGS2STR (NM_ACTIVATION_STATE_FLAG_EXTERNAL, "external"), ); /*****************************************************************************/ @@ -340,7 +341,12 @@ nm_active_connection_set_state_fail (NMActiveConnection *self, NMActivationStateFlags nm_active_connection_get_state_flags (NMActiveConnection *self) { - return NM_ACTIVE_CONNECTION_GET_PRIVATE (self)->state_flags; + NMActiveConnectionPrivate *priv = NM_ACTIVE_CONNECTION_GET_PRIVATE (self); + + return priv->state_flags + | ( priv->activation_type == NM_ACTIVATION_TYPE_EXTERNAL + ? NM_ACTIVATION_STATE_FLAG_EXTERNAL + : NM_ACTIVATION_STATE_FLAG_NONE); } void @@ -351,6 +357,8 @@ nm_active_connection_set_state_flags_full (NMActiveConnection *self, NMActiveConnectionPrivate *priv = NM_ACTIVE_CONNECTION_GET_PRIVATE (self); NMActivationStateFlags f; + nm_assert (!NM_FLAGS_HAS (mask, NM_ACTIVATION_STATE_FLAG_EXTERNAL)); + f = (priv->state_flags & ~mask) | (state_flags & mask); if (f != priv->state_flags) { char buf1[_NM_ACTIVATION_STATE_FLAG_TO_STRING_BUFSIZE]; @@ -869,10 +877,14 @@ _set_activation_type (NMActiveConnection *self, NMActivationType activation_type) { NMActiveConnectionPrivate *priv = NM_ACTIVE_CONNECTION_GET_PRIVATE (self); + gboolean state_flags_changed; if (priv->activation_type == activation_type) return; + state_flags_changed = (priv->activation_type == NM_ACTIVATION_TYPE_EXTERNAL) + != (activation_type == NM_ACTIVATION_TYPE_EXTERNAL); + priv->activation_type = activation_type; if (priv->settings_connection.obj) { @@ -881,6 +893,9 @@ _set_activation_type (NMActiveConnection *self, else g_signal_handlers_disconnect_by_func (priv->settings_connection.obj, _settings_connection_flags_changed, self); } + + if (state_flags_changed) + _notify (self, PROP_STATE_FLAGS); } static void @@ -953,7 +968,7 @@ _settings_connection_flags_changed (NMSettingsConnection *settings_connection, nm_assert (NM_ACTIVE_CONNECTION_GET_PRIVATE (self)->settings_connection.obj == settings_connection); if (NM_FLAGS_HAS (nm_settings_connection_get_flags (settings_connection), - NM_SETTINGS_CONNECTION_INT_FLAGS_NM_GENERATED)) + NM_SETTINGS_CONNECTION_INT_FLAGS_EXTERNAL)) return; _set_activation_type_managed (self); @@ -1253,7 +1268,8 @@ static void get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { - NMActiveConnectionPrivate *priv = NM_ACTIVE_CONNECTION_GET_PRIVATE (object); + NMActiveConnection *self = NM_ACTIVE_CONNECTION (object); + NMActiveConnectionPrivate *priv = NM_ACTIVE_CONNECTION_GET_PRIVATE (self); char **strv; NMDevice *master_device = NULL; @@ -1300,7 +1316,7 @@ get_property (GObject *object, guint prop_id, } break; case PROP_STATE_FLAGS: - g_value_set_uint (value, priv->state_flags); + g_value_set_uint (value, nm_active_connection_get_state_flags (self)); break; case PROP_DEFAULT: g_value_set_boolean (value, priv->is_default); |