[network-manager-netbook] Implement Ethernet enabling/disabling.
- From: Tambet Ingo <tambeti src gnome org>
- To: svn-commits-list gnome org
- Subject: [network-manager-netbook] Implement Ethernet enabling/disabling.
- Date: Wed, 27 May 2009 07:45:00 -0400 (EDT)
commit 2fb6c047076b187f3d1e8a6a9158b1937f8de0ce
Author: Tambet Ingo <tambet gmail com>
Date: Wed May 27 14:42:16 2009 +0300
Implement Ethernet enabling/disabling.
---
TODO | 1 -
src/nmn-applet.c | 20 ++++++++++++--
src/nmn-ethernet-handler.c | 61 ++++++++++++++++++++++++++++++++++++++------
3 files changed, 70 insertions(+), 12 deletions(-)
diff --git a/TODO b/TODO
index afa6424..6aad066 100644
--- a/TODO
+++ b/TODO
@@ -1,4 +1,3 @@
* Networks/AP lists are not sorted, in random order.
-* Ethernet switch doesn't work.
* "Advanced" button doesn't do anything, used for specifying static IP, manual DNS, etc.
* Hidden APs are not supported at all.
diff --git a/src/nmn-applet.c b/src/nmn-applet.c
index 134c7d1..4773726 100644
--- a/src/nmn-applet.c
+++ b/src/nmn-applet.c
@@ -119,6 +119,21 @@ enable_ethernet_toggled (NbtkGtkLightSwitch *w,
gboolean active,
gpointer user_data)
{
+ NmnAppletPrivate *priv = GET_PRIVATE (user_data);
+
+ nmn_nm_data_ethernet_toggled (priv->nm_data, active);
+}
+
+static void
+ethernet_toggled (NmnNMData *nm_data,
+ gboolean active,
+ gpointer user_data)
+{
+ NmnAppletPrivate *priv = GET_PRIVATE (user_data);
+
+ g_signal_handlers_block_by_func (priv->nm_data, enable_ethernet_toggled, user_data);
+ nbtk_gtk_light_switch_set_active (NBTK_GTK_LIGHT_SWITCH (priv->enable_ethernet), active);
+ g_signal_handlers_unblock_by_func (priv->nm_data, enable_ethernet_toggled, user_data);
}
static void
@@ -136,9 +151,8 @@ enable_ethernet_setup (NmnApplet *applet)
g_signal_connect (priv->enable_ethernet, "switch-flipped", G_CALLBACK (enable_ethernet_toggled), applet);
gtk_widget_show (priv->enable_wifi);
- /* FIXME: Enable/disable ethernet is not supported yet */
- nbtk_gtk_light_switch_set_active (NBTK_GTK_LIGHT_SWITCH (priv->enable_ethernet), TRUE);
- gtk_widget_set_sensitive (priv->enable_ethernet, FALSE);
+ g_signal_connect (priv->nm_data, "ethernet-toggled", G_CALLBACK (ethernet_toggled), applet);
+ ethernet_toggled (priv->nm_data, nmn_nm_data_ethernet_get_active (priv->nm_data), applet);
}
/* enable/disable 3G button */
diff --git a/src/nmn-ethernet-handler.c b/src/nmn-ethernet-handler.c
index bd2b00a..57bcf88 100644
--- a/src/nmn-ethernet-handler.c
+++ b/src/nmn-ethernet-handler.c
@@ -12,6 +12,7 @@ G_DEFINE_TYPE (NmnEthernetHandler, nmn_ethernet_handler, NMN_TYPE_DEVICE_HANDLER
typedef struct {
gulong carrier_changed_id;
+ gulong ethernet_toggled_id;
gboolean disposed;
} NmnEthernetHandlerPrivate;
@@ -50,15 +51,12 @@ connection_added (NmnDeviceHandler *handler,
}
static void
-carrier_changed (NMDeviceEthernet *device,
- GParamSpec *pspec,
- gpointer user_data)
+state_changed (NmnDeviceHandler *handler, gboolean active)
{
- NmnDeviceHandler *handler = NMN_DEVICE_HANDLER (user_data);
GSList *list;
GSList *iter;
- if (nm_device_ethernet_get_carrier (device)) {
+ if (active) {
list = nmn_device_handler_get_connections (handler);
for (iter = list; iter; iter = iter->next)
connection_added (handler, NM_EXPORTED_CONNECTION (iter->data));
@@ -66,8 +64,46 @@ carrier_changed (NMDeviceEthernet *device,
g_slist_free (list);
} else {
list = nmn_device_handler_get_items (handler);
- for (iter = list; iter; iter = iter->next)
- nmn_item_remove_request (NMN_ITEM (iter->data));
+ for (iter = list; iter; iter = iter->next) {
+ NmnItem *item = NMN_ITEM (iter->data);
+
+ if (nmn_item_get_status (item) != NMN_ITEM_STATUS_DISCONNECTED)
+ nmn_item_disconnect_request (item);
+
+ nmn_item_remove_request (item);
+ }
+ }
+}
+
+static void
+carrier_changed (NMDeviceEthernet *device,
+ GParamSpec *pspec,
+ gpointer user_data)
+{
+ state_changed (NMN_DEVICE_HANDLER (user_data), nm_device_ethernet_get_carrier (device));
+}
+
+static void
+ethernet_toggled (NmnNMData *nm_data,
+ gboolean active,
+ gpointer user_data)
+{
+ NmnDeviceHandler *handler = NMN_DEVICE_HANDLER (user_data);
+
+ state_changed (handler, active);
+
+ /* When ethernet is enabled, it means we really want it enabled */
+ if (active) {
+ GSList *list;
+ GSList *iter;
+
+ list = nmn_device_handler_get_items (handler);
+ for (iter = list; iter; iter = iter->next) {
+ NmnItem *item = NMN_ITEM (iter->data);
+
+ if (nmn_item_get_status (item) == NMN_ITEM_STATUS_DISCONNECTED)
+ nmn_item_connect_request (item);
+ }
}
}
@@ -77,8 +113,9 @@ constructor (GType type,
GObjectConstructParam *construct_params)
{
GObject *object;
- NMDeviceEthernet *device;
NmnEthernetHandlerPrivate *priv;
+ NMDeviceEthernet *device;
+ NmnNMData *nm_data;
object = G_OBJECT_CLASS (nmn_ethernet_handler_parent_class)->constructor
(type, n_construct_params, construct_params);
@@ -92,6 +129,10 @@ constructor (GType type,
priv->carrier_changed_id = g_signal_connect (device, "notify::" NM_DEVICE_ETHERNET_CARRIER,
G_CALLBACK (carrier_changed), object);
+ nm_data = nmn_device_handler_get_nm_data (NMN_DEVICE_HANDLER (object));
+ priv->ethernet_toggled_id = g_signal_connect (nm_data, "ethernet-toggled",
+ G_CALLBACK (ethernet_toggled), object);
+
return object;
}
@@ -105,6 +146,7 @@ dispose (GObject *object)
{
NmnEthernetHandlerPrivate *priv = GET_PRIVATE (object);
NMDevice *device;
+ NmnNMData *nm_data;
if (priv->disposed)
return;
@@ -112,6 +154,9 @@ dispose (GObject *object)
device = nmn_device_handler_get_device (NMN_DEVICE_HANDLER (object));
g_signal_handler_disconnect (device, priv->carrier_changed_id);
+ nm_data = nmn_device_handler_get_nm_data (NMN_DEVICE_HANDLER (object));
+ g_signal_handler_disconnect (nm_data, priv->ethernet_toggled_id);
+
priv->disposed = TRUE;
G_OBJECT_CLASS (nmn_ethernet_handler_parent_class)->dispose (object);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]