Re: [PATCH] core: add property "StateReason" to NMDevice



On Sun, 2012-01-29 at 22:40 +0100, Thomas Bechtold wrote:
> Remember the NMDeviceStateReason for a NMDeviceState in
> NMDevicePrivate. This allows everybody to get a NMDevice StateReason
> without listen to nm_device_state_changed signals.

Pushed, thanks.

Dan

> ---
>  introspection/nm-device.xml |   17 +++++++++++++++++
>  src/nm-device.c             |   21 +++++++++++++++++++++
>  src/nm-device.h             |    1 +
>  3 files changed, 39 insertions(+), 0 deletions(-)
> 
> diff --git a/introspection/nm-device.xml b/introspection/nm-device.xml
> index 2f3aa8f..4f88d27 100644
> --- a/introspection/nm-device.xml
> +++ b/introspection/nm-device.xml
> @@ -51,6 +51,11 @@
>          The current state of the device.
>        </tp:docstring>
>      </property>
> +    <property name="StateReason" type="(uu)" access="read" tp:type="NM_DEVICE_STATE_REASON_STRUCT">
> +      <tp:docstring>
> +        The current state and state-reason of the device.
> +      </tp:docstring>
> +    </property>
>      <property name="ActiveConnection" type="o" access="read">
>        <tp:docstring>
>          Object path of an ActiveConnection object that "owns" this device during
> @@ -498,5 +503,17 @@
>        </tp:enumvalue>
>      </tp:enum>
>  
> +    <tp:struct name="NM_DEVICE_STATE_REASON_STRUCT">
> +      <tp:member type="u" name="State" tp:type="NM_DEVICE_STATE">
> +        <tp:docstring>
> +          The Device state.
> +        </tp:docstring>
> +      </tp:member>
> +      <tp:member type="u" name="StateReason" tp:type="NM_DEVICE_STATE_REASON">
> +        <tp:docstring>
> +          The Device state reason.
> +        </tp:docstring>
> +      </tp:member>
> +    </tp:struct>
>    </interface>
>  </node>
> diff --git a/src/nm-device.c b/src/nm-device.c
> index e0c8d01..d535f78 100644
> --- a/src/nm-device.c
> +++ b/src/nm-device.c
> @@ -66,6 +66,8 @@ static void impl_device_disconnect (NMDevice *device, DBusGMethodInvocation *con
>  #define PENDING_IP4_CONFIG "pending-ip4-config"
>  #define PENDING_IP6_CONFIG "pending-ip6-config"
>  
> +#define DBUS_G_TYPE_UINT_STRUCT (dbus_g_type_get_struct ("GValueArray", G_TYPE_UINT, G_TYPE_UINT, G_TYPE_INVALID))
> +
>  /***********************************************************/
>  typedef enum {
>  	NM_DEVICE_ERROR_CONNECTION_ACTIVATING = 0,
> @@ -131,6 +133,7 @@ enum {
>  	PROP_IP6_CONFIG,
>  	PROP_DHCP6_CONFIG,
>  	PROP_STATE,
> +	PROP_STATE_REASON,
>  	PROP_ACTIVE_CONNECTION,
>  	PROP_DEVICE_TYPE,
>  	PROP_MANAGED,
> @@ -164,6 +167,7 @@ typedef struct {
>  	gboolean initialized;
>  
>  	NMDeviceState state;
> +	NMDeviceStateReason state_reason;
>  	QueuedState   queued_state;
>  
>  	char *        udi;
> @@ -273,6 +277,7 @@ nm_device_init (NMDevice *self)
>  	priv->type = NM_DEVICE_TYPE_UNKNOWN;
>  	priv->capabilities = NM_DEVICE_CAP_NONE;
>  	priv->state = NM_DEVICE_STATE_UNMANAGED;
> +	priv->state_reason = NM_DEVICE_STATE_REASON_NONE;
>  	priv->dhcp_timeout = 0;
>  	priv->rfkill_type = RFKILL_TYPE_UNKNOWN;
>  }
> @@ -3693,6 +3698,14 @@ get_property (GObject *object, guint prop_id,
>  	case PROP_STATE:
>  		g_value_set_uint (value, priv->state);
>  		break;
> +	case PROP_STATE_REASON:
> +		g_value_set_boxed (value,
> +							dbus_g_type_specialized_construct (DBUS_G_TYPE_UINT_STRUCT));
> +		dbus_g_type_struct_set (value,
> +								0, priv->state,
> +								1, priv->state_reason,
> +								G_MAXUINT);
> +		break;
>  	case PROP_ACTIVE_CONNECTION:
>  		if (priv->act_request)
>  			ac_path = nm_act_request_get_active_connection_path (priv->act_request);
> @@ -3832,6 +3845,13 @@ nm_device_class_init (NMDeviceClass *klass)
>  		                    "State",
>  		                    0, G_MAXUINT32, NM_DEVICE_STATE_UNKNOWN,
>  		                    G_PARAM_READABLE));
> +	g_object_class_install_property
> +		(object_class, PROP_STATE_REASON,
> +		 g_param_spec_boxed (NM_DEVICE_STATE_REASON,
> +							 "StateReason",
> +							 "StateReason",
> +							 DBUS_G_TYPE_UINT_STRUCT,
> +							 G_PARAM_READABLE));
>  
>  	g_object_class_install_property
>  		(object_class, PROP_ACTIVE_CONNECTION,
> @@ -4109,6 +4129,7 @@ nm_device_state_changed (NMDevice *device,
>  
>  	old_state = priv->state;
>  	priv->state = state;
> +	priv->state_reason = reason;
>  
>  	nm_log_info (LOGD_DEVICE, "(%s): device state change: %s -> %s (reason '%s') [%d %d %d]",
>  	             nm_device_get_iface (device),
> diff --git a/src/nm-device.h b/src/nm-device.h
> index 9d3f74b..e69b989 100644
> --- a/src/nm-device.h
> +++ b/src/nm-device.h
> @@ -47,6 +47,7 @@
>  #define NM_DEVICE_IP6_CONFIG       "ip6-config"
>  #define NM_DEVICE_DHCP6_CONFIG     "dhcp6-config"
>  #define NM_DEVICE_STATE            "state"
> +#define NM_DEVICE_STATE_REASON     "state-reason"
>  #define NM_DEVICE_ACTIVE_CONNECTION "active-connection"
>  #define NM_DEVICE_DEVICE_TYPE      "device-type" /* ugh */
>  #define NM_DEVICE_MANAGED          "managed"




[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]