diff options
author | Daniel Drake <dsd@laptop.org> | 2009-07-15 13:44:06 -0400 |
---|---|---|
committer | Dan Williams <dcbw@redhat.com> | 2009-07-15 13:44:06 -0400 |
commit | 14bc75edaad5fbe5615977b3c52c29e0bbb9d713 (patch) | |
tree | b7f50a9b7e59f4a2b63b40fd7f4db9a7b268c282 | |
parent | b35aa0a022ae30d96d629e1c6c3dbc85f10a9a44 (diff) |
wifi: add 'scanning' property which is TRUE while device is scanning
-rw-r--r-- | src/nm-device-wifi.c | 34 | ||||
-rw-r--r-- | src/nm-device-wifi.h | 1 |
2 files changed, 35 insertions, 0 deletions
diff --git a/src/nm-device-wifi.c b/src/nm-device-wifi.c index f2ada10251..3538825276 100644 --- a/src/nm-device-wifi.c +++ b/src/nm-device-wifi.c @@ -79,12 +79,13 @@ enum { PROP_HW_ADDRESS, PROP_MODE, PROP_BITRATE, PROP_ACTIVE_ACCESS_POINT, PROP_CAPABILITIES, PROP_IFINDEX, + PROP_SCANNING, LAST_PROP }; enum { ACCESS_POINT_ADDED, @@ -123,12 +124,13 @@ typedef struct Supplicant { guint iface_error_id; guint iface_state_id; guint iface_scanned_ap_id; guint iface_scan_request_result_id; guint iface_scan_results_id; guint iface_con_state_id; + guint iface_notify_scanning_id; /* Timeouts and idles */ guint iface_con_error_cb_id; guint con_timeout_id; GSList *mgr_tasks; @@ -214,12 +216,16 @@ static void supplicant_iface_scan_results_cb (NMSupplicantInterface * iface, static void supplicant_mgr_state_cb (NMSupplicantInterface * iface, guint32 new_state, guint32 old_state, NMDeviceWifi *self); +static void supplicant_iface_notify_scanning_cb (NMSupplicantInterface * iface, + GParamSpec * pspec, + NMDeviceWifi * self); + static guint32 nm_device_wifi_get_bitrate (NMDeviceWifi *self); static void cull_scan_list (NMDeviceWifi *self); static GQuark nm_wifi_error_quark (void) @@ -610,12 +616,18 @@ supplicant_interface_acquire (NMDeviceWifi *self) id = g_signal_connect (priv->supplicant.iface, "connection-state", G_CALLBACK (supplicant_iface_connection_state_cb), self); priv->supplicant.iface_con_state_id = id; + id = g_signal_connect (priv->supplicant.iface, + "notify::scanning", + G_CALLBACK (supplicant_iface_notify_scanning_cb), + self); + priv->supplicant.iface_notify_scanning_id = id; + return TRUE; } static void finish_supplicant_task (SupplicantStateTask *task, gboolean remove_source) { @@ -701,12 +713,17 @@ supplicant_interface_release (NMDeviceWifi *self) if (priv->supplicant.iface_con_state_id > 0) { g_signal_handler_disconnect (priv->supplicant.iface, priv->supplicant.iface_con_state_id); priv->supplicant.iface_con_state_id = 0; } + if (priv->supplicant.iface_notify_scanning_id > 0) { + g_signal_handler_disconnect (priv->supplicant.iface, priv->supplicant.iface_notify_scanning_id); + priv->supplicant.iface_notify_scanning_id = 0; + } + if (priv->supplicant.iface) { /* Tell the supplicant to disconnect from the current AP */ nm_supplicant_interface_disconnect (priv->supplicant.iface); nm_supplicant_manager_release_iface (priv->supplicant.mgr, priv->supplicant.iface); priv->supplicant.iface = NULL; @@ -2436,12 +2453,20 @@ supplicant_iface_connection_error_cb (NMSupplicantInterface * iface, id = g_idle_add (supplicant_iface_connection_error_cb_handler, cb_data); priv->supplicant.iface_con_error_cb_id = id; } static void +supplicant_iface_notify_scanning_cb (NMSupplicantInterface * iface, + GParamSpec * pspec, + NMDeviceWifi * self) +{ + g_object_notify (G_OBJECT (self), "scanning"); +} + +static void remove_supplicant_connection_timeout (NMDeviceWifi *self) { NMDeviceWifiPrivate *priv; g_return_if_fail (self != NULL); priv = NM_DEVICE_WIFI_GET_PRIVATE (self); @@ -3438,12 +3463,15 @@ get_property (GObject *object, guint prop_id, else g_value_set_boxed (value, "/"); break; case PROP_IFINDEX: g_value_set_uint (value, nm_device_wifi_get_ifindex (device)); break; + case PROP_SCANNING: + g_value_set_boolean (value, nm_supplicant_interface_get_scanning (priv->supplicant.iface)); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; } } @@ -3543,12 +3571,18 @@ nm_device_wifi_class_init (NMDeviceWifiClass *klass) g_param_spec_uint (NM_DEVICE_WIFI_IFINDEX, "Ifindex", "Interface index", 0, G_MAXUINT32, 0, G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); + g_object_class_install_property (object_class, PROP_SCANNING, + g_param_spec_boolean (NM_DEVICE_WIFI_SCANNING, + "Scanning", + "Scanning", + 0, G_PARAM_READABLE)); + /* Signals */ signals[ACCESS_POINT_ADDED] = g_signal_new ("access-point-added", G_OBJECT_CLASS_TYPE (object_class), G_SIGNAL_RUN_FIRST, G_STRUCT_OFFSET (NMDeviceWifiClass, access_point_added), diff --git a/src/nm-device-wifi.h b/src/nm-device-wifi.h index 1b296fb37c..c86a27596a 100644 --- a/src/nm-device-wifi.h +++ b/src/nm-device-wifi.h @@ -45,12 +45,13 @@ G_BEGIN_DECLS #define NM_DEVICE_WIFI_HW_ADDRESS "hw-address" #define NM_DEVICE_WIFI_MODE "mode" #define NM_DEVICE_WIFI_BITRATE "bitrate" #define NM_DEVICE_WIFI_ACTIVE_ACCESS_POINT "active-access-point" #define NM_DEVICE_WIFI_CAPABILITIES "wireless-capabilities" #define NM_DEVICE_WIFI_IFINDEX "ifindex" +#define NM_DEVICE_WIFI_SCANNING "scanning" #ifndef NM_DEVICE_WIFI_DEFINED #define NM_DEVICE_WIFI_DEFINED typedef struct _NMDeviceWifi NMDeviceWifi; #endif |