[network-manager-netbook] Hook up 3G enable/disable button.



commit 63db0db202f6789167e86e38fb835ed71427e4ac
Author: Tambet Ingo <tambet gmail com>
Date:   Tue May 26 12:44:00 2009 +0300

    Hook up 3G enable/disable button.
---
 TODO                     |    1 -
 src/nmn-applet.c         |   22 ++++++++++--
 src/nmn-item.c           |    9 ++---
 src/nmn-serial-handler.c |   80 ++++++++++++++++++++++++++++++++++++++++++++++
 4 files changed, 102 insertions(+), 10 deletions(-)

diff --git a/TODO b/TODO
index f728bc0..afa6424 100644
--- a/TODO
+++ b/TODO
@@ -1,5 +1,4 @@
 * Networks/AP lists are not sorted, in random order.
 * Ethernet switch doesn't work.
-* 3G 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 9812482..134c7d1 100644
--- a/src/nmn-applet.c
+++ b/src/nmn-applet.c
@@ -79,7 +79,7 @@ wireless_state_changed (NMClient *client,
 
     g_signal_handlers_block_by_func (priv->enable_wifi, enable_wifi_toggled, user_data);
     nbtk_gtk_light_switch_set_active (NBTK_GTK_LIGHT_SWITCH (priv->enable_wifi),
-                                 nm_client_wireless_get_enabled (client));
+                                      nm_client_wireless_get_enabled (client));
 
     g_signal_handlers_unblock_by_func (priv->enable_wifi, enable_wifi_toggled, user_data);
 }
@@ -148,6 +148,21 @@ enable_3g_toggled (NbtkGtkLightSwitch *w,
                    gboolean active,
                    gpointer user_data)
 {
+    NmnAppletPrivate *priv = GET_PRIVATE (user_data);
+
+    nmn_nm_data_modems_toggled (priv->nm_data, active);
+}
+
+static void
+modems_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_3g_toggled, user_data);
+    nbtk_gtk_light_switch_set_active (NBTK_GTK_LIGHT_SWITCH (priv->enable_3g), active);
+    g_signal_handlers_unblock_by_func (priv->nm_data, enable_3g_toggled, user_data);
 }
 
 static void
@@ -164,9 +179,8 @@ enable_3g_setup (NmnApplet *applet)
     g_signal_connect (priv->enable_3g, "switch-flipped", G_CALLBACK (enable_3g_toggled), applet);
     gtk_widget_show (priv->enable_3g);
 
-    /* FIXME: Enable/disable 3G is not supported yet */
-    nbtk_gtk_light_switch_set_active (NBTK_GTK_LIGHT_SWITCH (priv->enable_3g), TRUE);
-    gtk_widget_set_sensitive (priv->enable_3g, FALSE);
+    g_signal_connect (priv->nm_data, "modems-toggled", G_CALLBACK (modems_toggled), applet);
+    modems_toggled (priv->nm_data, nmn_nm_data_modems_get_active (priv->nm_data), applet);
 }
 
 /* enable/disable Fligh mode button */
diff --git a/src/nmn-item.c b/src/nmn-item.c
index 976714d..9a69697 100644
--- a/src/nmn-item.c
+++ b/src/nmn-item.c
@@ -158,6 +158,7 @@ nmn_item_connect_request (NmnItem *self)
 {
     g_return_if_fail (NMN_IS_ITEM (self));
 
+    NMN_ITEM_GET_CLASS (self)->connect (self);
     g_signal_emit (self, signals[CONNECT_REQUESTED], 0);
 }
 
@@ -166,6 +167,7 @@ nmn_item_disconnect_request (NmnItem *self)
 {
     g_return_if_fail (NMN_IS_ITEM (self));
 
+    NMN_ITEM_GET_CLASS (self)->disconnect (self);
     g_signal_emit (self, signals[DISCONNECT_REQUESTED], 0);
 }
 
@@ -195,13 +197,10 @@ connect_clicked (GtkButton *button, gpointer user_data)
     NmnItem *item = NMN_ITEM (user_data);
     NmnItemPrivate *priv = NMN_ITEM_GET_PRIVATE (item);
 
-    if (priv->status == NMN_ITEM_STATUS_DISCONNECTED) {
-        NMN_ITEM_GET_CLASS (item)->connect (item);
+    if (priv->status == NMN_ITEM_STATUS_DISCONNECTED)
         nmn_item_connect_request (item);
-    } else {
-        NMN_ITEM_GET_CLASS (item)->disconnect (item);
+    else
         nmn_item_disconnect_request (item);
-    }
 }
 
 static void
diff --git a/src/nmn-serial-handler.c b/src/nmn-serial-handler.c
index 0219172..59202d8 100644
--- a/src/nmn-serial-handler.c
+++ b/src/nmn-serial-handler.c
@@ -7,6 +7,14 @@
 
 G_DEFINE_TYPE (NmnSerialHandler, nmn_serial_handler, NMN_TYPE_DEVICE_HANDLER)
 
+#define GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), NMN_TYPE_SERIAL_HANDLER, NmnSerialHandlerPrivate))
+
+typedef struct {
+    gulong modems_toggled_id;
+
+    gboolean disposed;
+} NmnSerialHandlerPrivate;
+
 NmnDeviceHandler *
 nmn_serial_handler_new (NmnNMData *nm_data,
                         NMSerialDevice *device)
@@ -40,14 +48,86 @@ connection_added (NmnDeviceHandler *handler,
 }
 
 static void
+modems_toggled (NmnNMData *nm_data,
+                gboolean active,
+                gpointer user_data)
+{
+    NmnDeviceHandler *handler = NMN_DEVICE_HANDLER (user_data);
+    GSList *list;
+    GSList *iter;
+
+    if (active) {
+        list = nmn_device_handler_get_connections (handler);
+        for (iter = list; iter; iter = iter->next)
+            connection_added (handler, NM_EXPORTED_CONNECTION (iter->data));
+
+        g_slist_free (list);
+    } else {
+        list = nmn_device_handler_get_items (handler);
+        for (iter = list; iter; iter = iter->next) {
+            NmnItem *item = NMN_ITEM (iter->data);
+
+            nmn_item_disconnect_request (item);
+            nmn_item_remove_request (item);
+        }
+    }
+}
+
+static void
 nmn_serial_handler_init (NmnSerialHandler *handler)
 {
 }
 
+static GObject*
+constructor (GType type,
+             guint n_construct_params,
+             GObjectConstructParam *construct_params)
+{
+    GObject *object;
+    NmnNMData *nm_data;
+    NmnSerialHandlerPrivate *priv;
+
+    object = G_OBJECT_CLASS (nmn_serial_handler_parent_class)->constructor
+        (type, n_construct_params, construct_params);
+
+    if (!object)
+        return NULL;
+
+    priv = GET_PRIVATE (object);
+
+    nm_data = nmn_device_handler_get_nm_data (NMN_DEVICE_HANDLER (object));
+    priv->modems_toggled_id = g_signal_connect (nm_data, "modems-toggled", G_CALLBACK (modems_toggled), object);
+
+    return object;
+}
+
+static void
+dispose (GObject *object)
+{
+    NmnSerialHandlerPrivate *priv = GET_PRIVATE (object);
+    NmnNMData *nm_data;
+
+    if (priv->disposed)
+        return;
+
+    nm_data = nmn_device_handler_get_nm_data (NMN_DEVICE_HANDLER (object));
+    g_signal_handler_disconnect (nm_data, priv->modems_toggled_id);
+
+    priv->disposed = TRUE;
+
+    G_OBJECT_CLASS (nmn_serial_handler_parent_class)->dispose (object);
+}
+
 static void
 nmn_serial_handler_class_init (NmnSerialHandlerClass *class)
 {
+    GObjectClass *object_class = G_OBJECT_CLASS (class);
     NmnDeviceHandlerClass *handler_class = NMN_DEVICE_HANDLER_CLASS (class);
 
+    g_type_class_add_private (object_class, sizeof (NmnSerialHandlerPrivate));
+
+    object_class->constructor = constructor;
+    object_class->dispose = dispose;
+
     handler_class->connection_added = connection_added;
 }



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