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"


_______________________________________________
networkmanager-list mailing list
[email protected]
http://mail.gnome.org/mailman/listinfo/networkmanager-list

Reply via email to