[network-manager-netbook/MplPanelClient] Add a hack to enable/disable ethernet devices when the switch state changes



commit 5d7c4fc72245c02a180da75f3d4e09196c63b40d
Author: Tambet Ingo <tambet gmail com>
Date:   Wed Dec 2 10:53:14 2009 +0200

    Add a hack to enable/disable ethernet devices when the switch state changes
    
    This is required because NM does not allow disabling ethernet devices.

 src/nmn-model.c |   33 +++++++++++++++++++++++++++++++++
 1 files changed, 33 insertions(+), 0 deletions(-)
---
diff --git a/src/nmn-model.c b/src/nmn-model.c
index 0e14490..1cd0b8e 100644
--- a/src/nmn-model.c
+++ b/src/nmn-model.c
@@ -107,6 +107,38 @@ nmn_model_ethernet_get_active (NmnModel *self)
     return GET_PRIVATE (self)->ethernet_active;
 }
 
+static void
+ethernet_set_active (NmnModel *self,
+                     gboolean active)
+{
+    GtkTreeModel *child_model;
+    GtkTreeIter iter;
+    gboolean valid;
+
+    child_model = gtk_tree_model_filter_get_model (GTK_TREE_MODEL_FILTER (self));
+
+    valid = gtk_tree_model_get_iter_first (child_model, &iter);
+    while (valid) {
+        NMListItem *item = NULL;
+
+        gtk_tree_model_get (child_model, &iter, NM_LIST_MODEL_COL_ITEM, &item, -1);
+        if (item) {
+            if (NM_IS_ETHERNET_ITEM (item)) {
+                gboolean disconnected = nm_list_item_get_status (item) == NM_LIST_ITEM_STATUS_DISCONNECTED;
+
+                if (active && disconnected)
+                    nm_list_item_connect (item);
+                else if (!active && !disconnected)
+                    nm_list_item_disconnect (item);
+            }
+
+            g_object_unref (item);
+        }
+
+        valid = gtk_tree_model_iter_next (child_model, &iter);
+    }
+}
+
 void
 nmn_model_ethernet_toggled (NmnModel *self,
                             gboolean active)
@@ -120,6 +152,7 @@ nmn_model_ethernet_toggled (NmnModel *self,
         /* FIXME: Save in gconf? */
         priv->ethernet_active = active;
         gtk_tree_model_filter_refilter (GTK_TREE_MODEL_FILTER (self));
+        ethernet_set_active (self, active);
 
         g_signal_emit (self, signals[ETHERNET_TOGGLED], 0, active);
     }



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