summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Drake <dsd@laptop.org>2009-07-15 13:44:06 -0400
committerDan Williams <dcbw@redhat.com>2009-07-15 13:44:06 -0400
commit14bc75edaad5fbe5615977b3c52c29e0bbb9d713 (patch)
treeb7f50a9b7e59f4a2b63b40fd7f4db9a7b268c282
parentb35aa0a022ae30d96d629e1c6c3dbc85f10a9a44 (diff)
wifi: add 'scanning' property which is TRUE while device is scanning
-rw-r--r--src/nm-device-wifi.c34
-rw-r--r--src/nm-device-wifi.h1
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