[gnome-control-center] network: Split the mobile broadband device from the .c and .ui file



commit 26b5169beeb7045b77b871cb8aa81d5637c1c025
Author: Richard Hughes <richard hughsie com>
Date:   Fri Jul 20 09:21:57 2012 +0100

    network: Split the mobile broadband device from the .c and .ui file

 panels/network/Makefile.am         |    3 +
 panels/network/cc-network-panel.c  |  343 +---------------------
 panels/network/net-device-mobile.c |  570 ++++++++++++++++++++++++++++++++++++
 panels/network/net-device-mobile.h |   59 ++++
 panels/network/network.ui          |  420 --------------------------
 5 files changed, 636 insertions(+), 759 deletions(-)
---
diff --git a/panels/network/Makefile.am b/panels/network/Makefile.am
index b9f64be..3f29af6 100644
--- a/panels/network/Makefile.am
+++ b/panels/network/Makefile.am
@@ -22,6 +22,8 @@ libnetwork_la_SOURCES =					\
 	net-device.h					\
 	net-device-wired.c				\
 	net-device-wired.h				\
+	net-device-mobile.c				\
+	net-device-mobile.h				\
 	net-vpn.c					\
 	net-vpn.h					\
 	net-proxy.c					\
@@ -45,6 +47,7 @@ dist_ui_DATA =						\
 	network-proxy.ui				\
 	network-vpn.ui					\
 	network-wired.ui				\
+	network-mobile.ui				\
 	network.ui
 
 @INTLTOOL_DESKTOP_RULE@
diff --git a/panels/network/cc-network-panel.c b/panels/network/cc-network-panel.c
index ef64a2a..92aad09 100644
--- a/panels/network/cc-network-panel.c
+++ b/panels/network/cc-network-panel.c
@@ -46,6 +46,7 @@
 #include "net-object.h"
 #include "net-device.h"
 #include "net-device-wired.h"
+#include "net-device-mobile.h"
 #include "net-proxy.h"
 #include "net-vpn.h"
 
@@ -313,108 +314,6 @@ select_tree_iter (CcNetworkPanel *panel, GtkTreeIter *iter)
 }
 
 static void
-panel_device_got_modem_manager_cb (GObject *source_object,
-                                   GAsyncResult *res,
-                                   gpointer user_data)
-{
-        GError *error = NULL;
-        GVariant *result = NULL;
-        GDBusProxy *proxy;
-        NMDevice *device = (NMDevice *) user_data;
-
-        proxy = g_dbus_proxy_new_for_bus_finish (res, &error);
-        if (proxy == NULL) {
-                g_warning ("Error creating ModemManager proxy: %s",
-                           error->message);
-                g_error_free (error);
-                goto out;
-        }
-
-        /* get the IMEI */
-        result = g_dbus_proxy_get_cached_property (proxy,
-                                                   "EquipmentIdentifier");
-
-        /* save */
-        g_object_set_data_full (G_OBJECT (device),
-                                "ControlCenter::EquipmentIdentifier",
-                                g_variant_dup_string (result, NULL),
-                                g_free);
-out:
-        if (result != NULL)
-                g_variant_unref (result);
-        if (proxy != NULL)
-                g_object_unref (proxy);
-}
-
-static void
-panel_get_registration_info_cb (GObject *source_object, GAsyncResult *res, gpointer user_data)
-{
-        gchar *operator_code = NULL;
-        GError *error = NULL;
-        guint registration_status;
-        GVariant *result = NULL;
-        gchar *operator_name = NULL;
-        gchar *operator_name_safe = NULL;
-        NMDevice *device = (NMDevice *) user_data;
-
-        result = g_dbus_proxy_call_finish (G_DBUS_PROXY (source_object), res, &error);
-        if (result == NULL) {
-                g_warning ("Error getting registration info: %s\n",
-                           error->message);
-                g_error_free (error);
-                return;
-        }
-
-        /* get values */
-        g_variant_get (result, "((uss))",
-                       &registration_status,
-                       &operator_code,
-                       &operator_name);
-        if (operator_name != NULL && operator_name[0] != '\0')
-                operator_name_safe = g_strescape (operator_name, NULL);
-
-        /* save */
-        g_object_set_data_full (G_OBJECT (device),
-                                "ControlCenter::OperatorName",
-                                operator_name_safe,
-                                g_free);
-
-        g_free (operator_name);
-        g_free (operator_code);
-        g_variant_unref (result);
-}
-
-static void
-panel_device_got_modem_manager_gsm_cb (GObject *source_object,
-                                       GAsyncResult *res,
-                                       gpointer user_data)
-{
-        GError *error = NULL;
-        GDBusProxy *proxy;
-        NMDevice *device = (NMDevice *) user_data;
-
-        proxy = g_dbus_proxy_new_for_bus_finish (res, &error);
-        if (proxy == NULL) {
-                g_warning ("Error creating ModemManager GSM proxy: %s\n",
-                           error->message);
-                g_error_free (error);
-                goto out;
-        }
-
-        g_dbus_proxy_call (proxy,
-                           "GetRegistrationInfo",
-                           NULL,
-                           G_DBUS_CALL_FLAGS_NONE,
-                           -1,
-                           NULL,
-                           panel_get_registration_info_cb,
-                           device);
-out:
-        if (proxy != NULL)
-                g_object_unref (proxy);
-}
-
-static void
 device_state_notify_changed_cb (NMDevice *device,
                                 GParamSpec *pspec,
                                 CcNetworkPanel *panel)
@@ -553,33 +452,14 @@ panel_add_device (CcNetworkPanel *panel, NMDevice *device)
         g_signal_connect_object (G_OBJECT (device), "notify::state",
                                  (GCallback) device_state_notify_changed_cb, panel, 0);
 
-        /* do we have to get additonal data from ModemManager */
-        if (type == NM_DEVICE_TYPE_MODEM) {
-                g_dbus_proxy_new_for_bus (G_BUS_TYPE_SYSTEM,
-                                          G_DBUS_PROXY_FLAGS_NONE,
-                                          NULL,
-                                          "org.freedesktop.ModemManager",
-                                          nm_device_get_udi (device),
-                                          "org.freedesktop.ModemManager.Modem",
-                                          panel->priv->cancellable,
-                                          panel_device_got_modem_manager_cb,
-                                          device);
-                g_dbus_proxy_new_for_bus (G_BUS_TYPE_SYSTEM,
-                                          G_DBUS_PROXY_FLAGS_NONE,
-                                          NULL,
-                                          "org.freedesktop.ModemManager",
-                                          nm_device_get_udi (device),
-                                          "org.freedesktop.ModemManager.Modem.Gsm.Network",
-                                          panel->priv->cancellable,
-                                          panel_device_got_modem_manager_gsm_cb,
-                                          device);
-        }
-
         /* map the NMDeviceType to the GType */
         switch (type) {
         case NM_DEVICE_TYPE_ETHERNET:
                 device_g_type = NET_TYPE_DEVICE_WIRED;
                 break;
+        case NM_DEVICE_TYPE_MODEM:
+                device_g_type = NET_TYPE_DEVICE_MOBILE;
+                break;
         default:
                 device_g_type = NET_TYPE_DEVICE;
                 break;
@@ -1200,33 +1080,6 @@ wimax_enabled_toggled (NMClient       *client,
         panel->priv->updating_device = FALSE;
 }
 
-static void
-mobilebb_enabled_toggled (NMClient       *client,
-                          GParamSpec     *pspec,
-                          CcNetworkPanel *panel)
-{
-        gboolean enabled;
-        GtkSwitch *sw;
-        NMDevice *device;
-        NetObject *object;
-
-        object = get_selected_object (panel);
-        if (object == NULL)
-                return;
-        device = net_device_get_nm_device (NET_DEVICE (object));
-
-        if (nm_device_get_device_type (device) != NM_DEVICE_TYPE_MODEM)
-                return;
-
-        enabled = nm_client_wwan_get_enabled (client);
-        sw = GTK_SWITCH (gtk_builder_get_object (panel->priv->builder,
-                                                 "device_mobilebb_off_switch"));
-
-        panel->priv->updating_device = TRUE;
-        gtk_switch_set_active (sw, enabled);
-        panel->priv->updating_device = FALSE;
-}
-
 static gboolean
 device_is_hotspot (CcNetworkPanel *panel,
                    NMDevice *device)
@@ -1397,8 +1250,6 @@ refresh_header_ui (CcNetworkPanel *panel, NMDevice *device, const char *page_nam
                 wimax_enabled_toggled (panel->priv->client, NULL, panel);
                 break;
         case NM_DEVICE_TYPE_MODEM:
-                gtk_widget_show (widget);
-                mobilebb_enabled_toggled (panel->priv->client, NULL, panel);
                 break;
         default:
                 gtk_widget_hide (widget);
@@ -1576,101 +1427,6 @@ device_refresh_wimax_ui (CcNetworkPanel *panel, NetDevice *device)
 }
 
 static void
-device_add_device_connections (CcNetworkPanel *panel,
-                               NMDevice *nm_device,
-                               GtkListStore *liststore,
-                               GtkComboBox *combobox)
-{
-        CcNetworkPanelPrivate *priv = panel->priv;
-        GSList *filtered;
-        GSList *list, *l;
-        GtkTreeIter treeiter;
-        NMActiveConnection *active_connection;
-        NMConnection *connection;
-
-        /* get the list of available connections for this device */
-        list = nm_remote_settings_list_connections (panel->priv->remote_settings);
-        filtered = nm_device_filter_connections (nm_device, list);
-        gtk_list_store_clear (liststore);
-        active_connection = nm_device_get_active_connection (nm_device);
-        for (l = filtered; l; l = g_slist_next (l)) {
-                connection = NM_CONNECTION (l->data);
-                gtk_list_store_append (liststore, &treeiter);
-                gtk_list_store_set (liststore,
-                                    &treeiter,
-                                    PANEL_MOBILEBB_COLUMN_ID, nm_connection_get_uuid (connection),
-                                    PANEL_MOBILEBB_COLUMN_TITLE, nm_connection_get_id (connection),
-                                    -1);
-
-                /* is this already activated? */
-                if (active_connection != NULL &&
-                    g_strcmp0 (nm_connection_get_path (connection),
-                               nm_active_connection_get_connection (active_connection)) == 0) {
-                        priv->updating_device = TRUE;
-                        gtk_combo_box_set_active_iter (combobox, &treeiter);
-                        priv->updating_device = FALSE;
-                }
-
-        }
-
-        /* add new connection entry */
-        gtk_list_store_append (liststore, &treeiter);
-        gtk_list_store_set (liststore,
-                            &treeiter,
-                            PANEL_MOBILEBB_COLUMN_ID, NULL,
-                            PANEL_MOBILEBB_COLUMN_TITLE, _("Add new connection"),
-                            -1);
-
-        g_slist_free (list);
-        g_slist_free (filtered);
-}
-
-static void
-device_refresh_modem_ui (CcNetworkPanel *panel, NetDevice *device)
-{
-        CcNetworkPanelPrivate *priv = panel->priv;
-        NMDeviceModemCapabilities caps;
-        NMDevice *nm_device;
-        const char *str;
-        GtkListStore *liststore;
-        GtkWidget *widget;
-
-        nm_device = net_device_get_nm_device (device);
-
-        refresh_header_ui (panel, nm_device, "mobilebb");
-
-        caps = nm_device_modem_get_current_capabilities (NM_DEVICE_MODEM (nm_device));
-
-        if ((caps & NM_DEVICE_MODEM_CAPABILITY_GSM_UMTS) ||
-            (caps & NM_DEVICE_MODEM_CAPABILITY_CDMA_EVDO)) {
-                /* IMEI */
-                str = g_object_get_data (G_OBJECT (nm_device),
-                                         "ControlCenter::EquipmentIdentifier");
-                panel_set_widget_data (panel,
-                                       "mobilebb",
-                                       "imei",
-                                       str);
-
-                /* operator name */
-                str = g_object_get_data (G_OBJECT (nm_device),
-                                         "ControlCenter::OperatorName");
-                panel_set_widget_data (panel,
-                                       "mobilebb",
-                                       "provider",
-                                       str);
-        }
-
-        /* add possible connections to device */
-        liststore = GTK_LIST_STORE (gtk_builder_get_object (priv->builder,
-                                                            "liststore_mobile_connections"));
-        widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "combobox_mobilebb_network"));
-        device_add_device_connections (panel,
-                                       nm_device,
-                                       liststore,
-                                       GTK_COMBO_BOX (widget));
-}
-
-static void
 nm_device_refresh_device_ui (CcNetworkPanel *panel, NetDevice *device)
 {
         CcNetworkPanelPrivate *priv = panel->priv;
@@ -1706,17 +1462,6 @@ nm_device_refresh_device_ui (CcNetworkPanel *panel, NetDevice *device)
                 device_refresh_wimax_ui (panel, device);
                 break;
         case NM_DEVICE_TYPE_MODEM:
-                {
-                        NMDeviceModemCapabilities caps = nm_device_modem_get_current_capabilities (NM_DEVICE_MODEM (nm_device));
-                        if ((caps & NM_DEVICE_MODEM_CAPABILITY_GSM_UMTS) ||
-                            (caps & NM_DEVICE_MODEM_CAPABILITY_CDMA_EVDO)) {
-                                gtk_notebook_set_current_page (GTK_NOTEBOOK (widget), 1);
-                                sub_pane = "mobilebb";
-                                device_refresh_modem_ui (panel, device);
-                        } else {
-                                g_warning ("unknown modem capabilities: %i", caps);
-                        }
-                }
                 break;
         default:
                 g_assert_not_reached ();
@@ -2476,61 +2221,6 @@ connect_to_hidden_network (CcNetworkPanel *panel)
 }
 
 static void
-mobile_connection_changed_cb (GtkComboBox *combo_box, CcNetworkPanel *panel)
-{
-        gboolean ret;
-        gchar *object_path = NULL;
-        GtkTreeIter iter;
-        GtkTreeModel *model;
-        NetObject *object;
-        NMConnection *connection;
-        NMDevice *device;
-
-        if (panel->priv->updating_device)
-                goto out;
-
-        ret = gtk_combo_box_get_active_iter (combo_box, &iter);
-        if (!ret)
-                goto out;
-
-        object = get_selected_object (panel);
-        if (object == NULL)
-                goto out;
-
-        device = net_device_get_nm_device (NET_DEVICE (object));
-        if (device == NULL)
-                goto out;
-
-        /* get entry */
-        model = gtk_combo_box_get_model (GTK_COMBO_BOX (combo_box));
-        gtk_tree_model_get (model, &iter,
-                            PANEL_MOBILEBB_COLUMN_ID, &object_path,
-                            -1);
-        if (g_strcmp0 (object_path, NULL) == 0) {
-                cc_network_panel_connect_to_3g_network (panel,
-                                                        panel->priv->client,
-                                                        panel->priv->remote_settings,
-                                                        device);
-                goto out;
-        }
-
-        /* activate the connection */
-        g_debug ("try to switch to connection %s", object_path);
-        connection = (NMConnection*) nm_remote_settings_get_connection_by_path (panel->priv->remote_settings,
-                                                                                object_path);
-        if (connection != NULL) {
-                nm_device_disconnect (device, NULL, NULL);
-                nm_client_activate_connection (panel->priv->client,
-                                               connection,
-                                               device, NULL,
-                                               connection_activate_cb, panel);
-                goto out;
-        }
-out:
-        g_free (object_path);
-}
-
-static void
 wireless_ap_changed_cb (GtkComboBox *combo_box, CcNetworkPanel *panel)
 {
         const GByteArray *ssid;
@@ -3160,20 +2850,6 @@ cc_network_panel_init (CcNetworkPanel *panel)
         /* add the virtual proxy device */
         panel_add_proxy_device (panel);
 
-        /* setup mobile combobox model */
-        combobox = GTK_COMBO_BOX (gtk_builder_get_object (panel->priv->builder,
-                                                          "combobox_mobilebb_network"));
-        g_signal_connect (combobox, "changed",
-                          G_CALLBACK (mobile_connection_changed_cb),
-                          panel);
-        renderer = gtk_cell_renderer_text_new ();
-        gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combobox),
-                                    renderer,
-                                    FALSE);
-        gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combobox), renderer,
-                                        "text", PANEL_MOBILEBB_COLUMN_TITLE,
-                                        NULL);
-
         /* setup wireless combobox model */
         combobox = GTK_COMBO_BOX (gtk_builder_get_object (panel->priv->builder,
                                                           "combobox_wireless_network_name"));
@@ -3235,17 +2911,11 @@ cc_network_panel_init (CcNetworkPanel *panel)
                                                      "device_wireless_off_switch"));
         g_signal_connect (widget, "notify::active",
                           G_CALLBACK (device_off_toggled), panel);
-        widget = GTK_WIDGET (gtk_builder_get_object (panel->priv->builder,
-                                                     "device_mobilebb_off_switch"));
-        g_signal_connect (widget, "notify::active",
-                          G_CALLBACK (device_off_toggled), panel);
 
         g_signal_connect (panel->priv->client, "notify::wireless-enabled",
                           G_CALLBACK (wireless_enabled_toggled), panel);
         g_signal_connect (panel->priv->client, "notify::wimax-enabled",
                           G_CALLBACK (wimax_enabled_toggled), panel);
-        g_signal_connect (panel->priv->client, "notify::wwan-enabled",
-                          G_CALLBACK (mobilebb_enabled_toggled), panel);
 
         widget = GTK_WIDGET (gtk_builder_get_object (panel->priv->builder,
                                                      "start_hotspot_button"));
@@ -3262,11 +2932,6 @@ cc_network_panel_init (CcNetworkPanel *panel)
                           G_CALLBACK (edit_connection), panel);
 
         widget = GTK_WIDGET (gtk_builder_get_object (panel->priv->builder,
-                                                     "button_mobilebb_options"));
-        g_signal_connect (widget, "clicked",
-                          G_CALLBACK (edit_connection), panel);
-
-        widget = GTK_WIDGET (gtk_builder_get_object (panel->priv->builder,
                                                      "add_toolbutton"));
         g_signal_connect (widget, "clicked",
                           G_CALLBACK (add_connection_cb), panel);
diff --git a/panels/network/net-device-mobile.c b/panels/network/net-device-mobile.c
new file mode 100644
index 0000000..9c08a3c
--- /dev/null
+++ b/panels/network/net-device-mobile.c
@@ -0,0 +1,570 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2011-2012 Richard Hughes <richard hughsie com>
+ *
+ * Licensed under the GNU General Public License Version 2
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+#include "config.h"
+
+#include <glib-object.h>
+#include <glib/gi18n.h>
+
+#include <nm-client.h>
+#include <nm-device.h>
+#include <nm-device-modem.h>
+#include <nm-remote-connection.h>
+
+#include "panel-common.h"
+
+#include "net-device-mobile.h"
+
+#define NET_DEVICE_MOBILE_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NET_TYPE_DEVICE_MOBILE, NetDeviceMobilePrivate))
+
+static void nm_device_mobile_refresh_ui (NetDeviceMobile *device_mobile);
+
+struct _NetDeviceMobilePrivate
+{
+        GtkBuilder              *builder;
+        gboolean                 updating_device;
+};
+
+enum {
+        COLUMN_ID,
+        COLUMN_TITLE,
+        COLUMN_LAST
+};
+
+G_DEFINE_TYPE (NetDeviceMobile, net_device_mobile, NET_TYPE_DEVICE)
+
+static GtkWidget *
+device_mobile_proxy_add_to_notebook (NetObject *object,
+                                     GtkNotebook *notebook,
+                                     GtkSizeGroup *heading_size_group)
+{
+        GtkWidget *widget;
+        GtkWindow *window;
+        NetDeviceMobile *device_mobile = NET_DEVICE_MOBILE (object);
+
+        /* add widgets to size group */
+        widget = GTK_WIDGET (gtk_builder_get_object (device_mobile->priv->builder,
+                                                     "heading_imei"));
+        gtk_size_group_add_widget (heading_size_group, widget);
+        widget = GTK_WIDGET (gtk_builder_get_object (device_mobile->priv->builder,
+                                                     "heading_network"));
+        gtk_size_group_add_widget (heading_size_group, widget);
+
+        /* reparent */
+        window = GTK_WINDOW (gtk_builder_get_object (device_mobile->priv->builder,
+                                                     "window_tmp"));
+        widget = GTK_WIDGET (gtk_builder_get_object (device_mobile->priv->builder,
+                                                     "vbox7"));
+        g_object_ref (widget);
+        gtk_container_remove (GTK_CONTAINER (window), widget);
+        gtk_notebook_append_page (notebook, widget, NULL);
+        g_object_unref (widget);
+        return widget;
+}
+
+static void
+connection_activate_cb (NMClient *client,
+                        NMActiveConnection *connection,
+                        GError *error,
+                        gpointer user_data)
+{
+        NetDeviceMobile *device_mobile = NET_DEVICE_MOBILE (user_data);
+
+        if (connection == NULL) {
+                /* failed to activate */
+                nm_device_mobile_refresh_ui (device_mobile);
+        }
+}
+
+static void
+mobile_connection_changed_cb (GtkComboBox *combo_box, NetDeviceMobile *device_mobile)
+{
+        gboolean ret;
+        gchar *object_path = NULL;
+        GtkTreeIter iter;
+        GtkTreeModel *model;
+        NMConnection *connection;
+        NMDevice *device;
+        NMClient *client;
+        NMRemoteSettings *remote_settings;
+
+        if (device_mobile->priv->updating_device)
+                goto out;
+
+        ret = gtk_combo_box_get_active_iter (combo_box, &iter);
+        if (!ret)
+                goto out;
+
+        device = net_device_get_nm_device (NET_DEVICE (device_mobile));
+        if (device == NULL)
+                goto out;
+        client = net_object_get_client (NET_OBJECT (device_mobile));
+        remote_settings = net_object_get_remote_settings (NET_OBJECT (device_mobile));
+
+        /* get entry */
+        model = gtk_combo_box_get_model (GTK_COMBO_BOX (combo_box));
+        gtk_tree_model_get (model, &iter,
+                            COLUMN_ID, &object_path,
+                            -1);
+        if (g_strcmp0 (object_path, NULL) == 0) {
+#if 0
+                cc_network_panel_connect_to_3g_network (panel,
+                                                        client,
+                                                        remote_settings,
+                                                        device);
+#endif
+                goto out;
+        }
+
+        /* activate the connection */
+        g_debug ("try to switch to connection %s", object_path);
+        connection = (NMConnection*) nm_remote_settings_get_connection_by_path (remote_settings,
+                                                                                object_path);
+        if (connection != NULL) {
+                nm_device_disconnect (device, NULL, NULL);
+                nm_client_activate_connection (client,
+                                               connection,
+                                               device, NULL,
+                                               connection_activate_cb,
+                                               device_mobile);
+                goto out;
+        }
+out:
+        g_free (object_path);
+}
+
+static void
+mobilebb_enabled_toggled (NMClient       *client,
+                          GParamSpec     *pspec,
+                          NetDeviceMobile *device_mobile)
+{
+        gboolean enabled;
+        GtkSwitch *sw;
+        NMDevice *device;
+
+        device = net_device_get_nm_device (NET_DEVICE (device_mobile));
+        if (nm_device_get_device_type (device) != NM_DEVICE_TYPE_MODEM)
+                return;
+
+        enabled = nm_client_wwan_get_enabled (client);
+        sw = GTK_SWITCH (gtk_builder_get_object (device_mobile->priv->builder,
+                                                 "device_off_switch"));
+
+        device_mobile->priv->updating_device = TRUE;
+        gtk_switch_set_active (sw, enabled);
+        device_mobile->priv->updating_device = FALSE;
+}
+
+static void
+device_add_device_connections (NetDeviceMobile *device_mobile,
+                               NMDevice *nm_device,
+                               GtkListStore *liststore,
+                               GtkComboBox *combobox)
+{
+        NetDeviceMobilePrivate *priv = device_mobile->priv;
+        GSList *filtered;
+        GSList *list, *l;
+        GtkTreeIter treeiter;
+        NMActiveConnection *active_connection;
+        NMConnection *connection;
+        NMRemoteSettings *remote_settings;
+
+        /* get the list of available connections for this device */
+        remote_settings = net_object_get_remote_settings (NET_OBJECT (device_mobile));
+        g_assert (remote_settings != NULL);
+        list = nm_remote_settings_list_connections (remote_settings);
+        filtered = nm_device_filter_connections (nm_device, list);
+        gtk_list_store_clear (liststore);
+        active_connection = nm_device_get_active_connection (nm_device);
+        for (l = filtered; l; l = g_slist_next (l)) {
+                connection = NM_CONNECTION (l->data);
+                gtk_list_store_append (liststore, &treeiter);
+                gtk_list_store_set (liststore,
+                                    &treeiter,
+                                    COLUMN_ID, nm_connection_get_uuid (connection),
+                                    COLUMN_TITLE, nm_connection_get_id (connection),
+                                    -1);
+
+                /* is this already activated? */
+                if (active_connection != NULL &&
+                    g_strcmp0 (nm_connection_get_path (connection),
+                               nm_active_connection_get_connection (active_connection)) == 0) {
+                        priv->updating_device = TRUE;
+                        gtk_combo_box_set_active_iter (combobox, &treeiter);
+                        priv->updating_device = FALSE;
+                }
+        }
+
+        /* add new connection entry */
+        gtk_list_store_append (liststore, &treeiter);
+        gtk_list_store_set (liststore,
+                            &treeiter,
+                            COLUMN_ID, NULL,
+                            COLUMN_TITLE, _("Add new connection"),
+                            -1);
+
+        g_slist_free (list);
+        g_slist_free (filtered);
+}
+
+static void
+nm_device_mobile_refresh_ui (NetDeviceMobile *device_mobile)
+{
+        const char *str;
+        gboolean is_connected;
+        GString *status;
+        GtkListStore *liststore;
+        GtkWidget *widget;
+        guint speed = 0;
+        NetDeviceMobilePrivate *priv = device_mobile->priv;
+        NMClient *client;
+        NMDeviceModemCapabilities caps;
+        NMDevice *nm_device;
+
+        /* set device kind */
+        nm_device = net_device_get_nm_device (NET_DEVICE (device_mobile));
+        widget = GTK_WIDGET (gtk_builder_get_object (device_mobile->priv->builder, "label_device"));
+        gtk_label_set_label (GTK_LABEL (widget),
+                             panel_device_to_localized_string (nm_device));
+
+        /* set up the device on/off switch */
+        widget = GTK_WIDGET (gtk_builder_get_object (device_mobile->priv->builder, "device_off_switch"));
+        gtk_widget_show (widget);
+        client = net_object_get_client (NET_OBJECT (device_mobile));
+        mobilebb_enabled_toggled (client, NULL, device_mobile);
+
+        /* set device state, with status and optionally speed */
+        widget = GTK_WIDGET (gtk_builder_get_object (device_mobile->priv->builder, "label_status"));
+        status = g_string_new (panel_device_state_to_localized_string (nm_device));
+        if (speed  > 0) {
+                g_string_append (status, " - ");
+                /* Translators: network device speed */
+                g_string_append_printf (status, _("%d Mb/s"), speed);
+        }
+        gtk_label_set_label (GTK_LABEL (widget), status->str);
+        g_string_free (status, TRUE);
+        gtk_widget_set_tooltip_text (widget, panel_device_state_reason_to_localized_string (nm_device));
+
+        /* sensitive for other connection types if the device is currently connected */
+        widget = GTK_WIDGET (gtk_builder_get_object (device_mobile->priv->builder,
+                                                     "button_options"));
+        is_connected = net_device_get_find_connection (NET_DEVICE (device_mobile)) != NULL;
+        gtk_widget_set_sensitive (widget, is_connected);
+
+        caps = nm_device_modem_get_current_capabilities (NM_DEVICE_MODEM (nm_device));
+        if ((caps & NM_DEVICE_MODEM_CAPABILITY_GSM_UMTS) ||
+            (caps & NM_DEVICE_MODEM_CAPABILITY_CDMA_EVDO)) {
+                /* IMEI */
+                str = g_object_get_data (G_OBJECT (nm_device),
+                                         "ControlCenter::EquipmentIdentifier");
+                panel_set_device_widget_details (device_mobile->priv->builder,
+                                                 "imei",
+                                                 str);
+
+                /* operator name */
+                str = g_object_get_data (G_OBJECT (nm_device),
+                                         "ControlCenter::OperatorName");
+                panel_set_device_widget_details (device_mobile->priv->builder,
+                                                 "provider",
+                                                 str);
+        }
+
+        /* add possible connections to device */
+        liststore = GTK_LIST_STORE (gtk_builder_get_object (priv->builder,
+                                                            "liststore_mobile_connections"));
+        widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "combobox_network"));
+        device_add_device_connections (device_mobile,
+                                       nm_device,
+                                       liststore,
+                                       GTK_COMBO_BOX (widget));
+
+        /* set IP entries */
+        panel_set_device_widgets (priv->builder, nm_device);
+}
+
+static void
+device_mobile_refresh (NetObject *object)
+{
+        NetDeviceMobile *device_mobile = NET_DEVICE_MOBILE (object);
+        nm_device_mobile_refresh_ui (device_mobile);
+}
+
+static void
+device_off_toggled (GtkSwitch *sw,
+                    GParamSpec *pspec,
+                    NetDeviceMobile *device_mobile)
+{
+        const gchar *path;
+        const GPtrArray *acs;
+        gboolean active;
+        gint i;
+        NMActiveConnection *a;
+        NMConnection *connection;
+        NMClient *client;
+
+        if (device_mobile->priv->updating_device)
+                return;
+
+        active = gtk_switch_get_active (sw);
+        if (active) {
+                client = net_object_get_client (NET_OBJECT (device_mobile));
+                connection = net_device_get_find_connection (NET_DEVICE (device_mobile));
+                if (connection == NULL)
+                        return;
+                nm_client_activate_connection (client,
+                                               connection, NULL, NULL,
+                                               NULL, NULL);
+        } else {
+                connection = net_device_get_find_connection (NET_DEVICE (device_mobile));
+                if (connection == NULL)
+                        return;
+                path = nm_connection_get_path (connection);
+                client = net_object_get_client (NET_OBJECT (device_mobile));
+                acs = nm_client_get_active_connections (client);
+                for (i = 0; i < acs->len; i++) {
+                        a = (NMActiveConnection*)acs->pdata[i];
+                        if (strcmp (nm_active_connection_get_connection (a), path) == 0) {
+                                nm_client_deactivate_connection (client, a);
+                                break;
+                        }
+                }
+        }
+}
+
+static void
+edit_connection (GtkButton *button, NetDeviceMobile *device_mobile)
+{
+        net_object_edit (NET_OBJECT (device_mobile));
+}
+
+static void
+device_mobile_device_got_modem_manager_cb (GObject *source_object,
+                                   GAsyncResult *res,
+                                   gpointer user_data)
+{
+        GError *error = NULL;
+        GVariant *result = NULL;
+        GDBusProxy *proxy;
+        NMDevice *device = (NMDevice *) user_data;
+
+        proxy = g_dbus_proxy_new_for_bus_finish (res, &error);
+        if (proxy == NULL) {
+                g_warning ("Error creating ModemManager proxy: %s",
+                           error->message);
+                g_error_free (error);
+                goto out;
+        }
+
+        /* get the IMEI */
+        result = g_dbus_proxy_get_cached_property (proxy,
+                                                   "EquipmentIdentifier");
+
+        /* save */
+        g_object_set_data_full (G_OBJECT (device),
+                                "ControlCenter::EquipmentIdentifier",
+                                g_variant_dup_string (result, NULL),
+                                g_free);
+out:
+        if (result != NULL)
+                g_variant_unref (result);
+        if (proxy != NULL)
+                g_object_unref (proxy);
+}
+
+static void
+device_mobile_get_registration_info_cb (GObject *source_object, GAsyncResult *res, gpointer user_data)
+{
+        gchar *operator_code = NULL;
+        GError *error = NULL;
+        guint registration_status;
+        GVariant *result = NULL;
+        gchar *operator_name = NULL;
+        gchar *operator_name_safe = NULL;
+        NMDevice *device = (NMDevice *) user_data;
+
+        result = g_dbus_proxy_call_finish (G_DBUS_PROXY (source_object), res, &error);
+        if (result == NULL) {
+                g_warning ("Error getting registration info: %s\n",
+                           error->message);
+                g_error_free (error);
+                return;
+        }
+
+        /* get values */
+        g_variant_get (result, "((uss))",
+                       &registration_status,
+                       &operator_code,
+                       &operator_name);
+        if (operator_name != NULL && operator_name[0] != '\0')
+                operator_name_safe = g_strescape (operator_name, NULL);
+
+        /* save */
+        g_object_set_data_full (G_OBJECT (device),
+                                "ControlCenter::OperatorName",
+                                operator_name_safe,
+                                g_free);
+
+        g_free (operator_name);
+        g_free (operator_code);
+        g_variant_unref (result);
+}
+
+static void
+device_mobile_device_got_modem_manager_gsm_cb (GObject *source_object,
+                                       GAsyncResult *res,
+                                       gpointer user_data)
+{
+        GError *error = NULL;
+        GDBusProxy *proxy;
+        NMDevice *device = (NMDevice *) user_data;
+
+        proxy = g_dbus_proxy_new_for_bus_finish (res, &error);
+        if (proxy == NULL) {
+                g_warning ("Error creating ModemManager GSM proxy: %s\n",
+                           error->message);
+                g_error_free (error);
+                goto out;
+        }
+
+        g_dbus_proxy_call (proxy,
+                           "GetRegistrationInfo",
+                           NULL,
+                           G_DBUS_CALL_FLAGS_NONE,
+                           -1,
+                           NULL,
+                           device_mobile_get_registration_info_cb,
+                           device);
+out:
+        if (proxy != NULL)
+                g_object_unref (proxy);
+}
+
+static void
+net_device_mobile_constructed (GObject *object)
+{
+        GCancellable *cancellable;
+        NetDeviceMobile *device_mobile = NET_DEVICE_MOBILE (object);
+        NMClient *client;
+        NMDevice *device;
+
+        G_OBJECT_CLASS (net_device_mobile_parent_class)->constructed (object);
+
+        device = net_device_get_nm_device (NET_DEVICE (device_mobile));
+        cancellable = net_object_get_cancellable (NET_OBJECT (device_mobile));
+        g_dbus_proxy_new_for_bus (G_BUS_TYPE_SYSTEM,
+                                  G_DBUS_PROXY_FLAGS_NONE,
+                                  NULL,
+                                  "org.freedesktop.ModemManager",
+                                  nm_device_get_udi (device),
+                                  "org.freedesktop.ModemManager.Modem",
+                                  cancellable,
+                                  device_mobile_device_got_modem_manager_cb,
+                                  device);
+        g_dbus_proxy_new_for_bus (G_BUS_TYPE_SYSTEM,
+                                  G_DBUS_PROXY_FLAGS_NONE,
+                                  NULL,
+                                  "org.freedesktop.ModemManager",
+                                  nm_device_get_udi (device),
+                                  "org.freedesktop.ModemManager.Modem.Gsm.Network",
+                                  cancellable,
+                                  device_mobile_device_got_modem_manager_gsm_cb,
+                                  device);
+
+        client = net_object_get_client (NET_OBJECT (device_mobile));
+        g_signal_connect (client, "notify::wwan-enabled",
+                          G_CALLBACK (mobilebb_enabled_toggled),
+                          device_mobile);
+        nm_device_mobile_refresh_ui (device_mobile);
+}
+
+static void
+net_device_mobile_finalize (GObject *object)
+{
+        NetDeviceMobile *device_mobile = NET_DEVICE_MOBILE (object);
+        NetDeviceMobilePrivate *priv = device_mobile->priv;
+
+        g_object_unref (priv->builder);
+
+        G_OBJECT_CLASS (net_device_mobile_parent_class)->finalize (object);
+}
+
+static void
+net_device_mobile_class_init (NetDeviceMobileClass *klass)
+{
+        GObjectClass *object_class = G_OBJECT_CLASS (klass);
+        NetObjectClass *parent_class = NET_OBJECT_CLASS (klass);
+
+        object_class->finalize = net_device_mobile_finalize;
+        object_class->constructed = net_device_mobile_constructed;
+        parent_class->add_to_notebook = device_mobile_proxy_add_to_notebook;
+        parent_class->refresh = device_mobile_refresh;
+        g_type_class_add_private (klass, sizeof (NetDeviceMobilePrivate));
+}
+
+static void
+net_device_mobile_init (NetDeviceMobile *device_mobile)
+{
+        GError *error = NULL;
+        GtkWidget *widget;
+        GtkCellRenderer *renderer;
+        GtkComboBox *combobox;
+
+        device_mobile->priv = NET_DEVICE_MOBILE_GET_PRIVATE (device_mobile);
+
+        device_mobile->priv->builder = gtk_builder_new ();
+        gtk_builder_add_from_file (device_mobile->priv->builder,
+                                   GNOMECC_UI_DIR "/network-mobile.ui",
+                                   &error);
+        if (error != NULL) {
+                g_warning ("Could not load interface file: %s", error->message);
+                g_error_free (error);
+                return;
+        }
+
+        /* setup mobile combobox model */
+        combobox = GTK_COMBO_BOX (gtk_builder_get_object (device_mobile->priv->builder,
+                                                          "combobox_network"));
+        g_signal_connect (combobox, "changed",
+                          G_CALLBACK (mobile_connection_changed_cb),
+                          device_mobile);
+        renderer = gtk_cell_renderer_text_new ();
+        gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combobox),
+                                    renderer,
+                                    FALSE);
+        gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combobox), renderer,
+                                        "text", COLUMN_TITLE,
+                                        NULL);
+
+        widget = GTK_WIDGET (gtk_builder_get_object (device_mobile->priv->builder,
+                                                     "device_off_switch"));
+        g_signal_connect (widget, "notify::active",
+                          G_CALLBACK (device_off_toggled), device_mobile);
+
+        widget = GTK_WIDGET (gtk_builder_get_object (device_mobile->priv->builder,
+                                                     "button_options"));
+        g_signal_connect (widget, "clicked",
+                          G_CALLBACK (edit_connection), device_mobile);
+
+        widget = GTK_WIDGET (gtk_builder_get_object (device_mobile->priv->builder,
+                                                     "device_off_switch"));
+        g_signal_connect (widget, "notify::active",
+                          G_CALLBACK (device_off_toggled), device_mobile);
+}
diff --git a/panels/network/net-device-mobile.h b/panels/network/net-device-mobile.h
new file mode 100644
index 0000000..9b24fdb
--- /dev/null
+++ b/panels/network/net-device-mobile.h
@@ -0,0 +1,59 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2011-2012 Richard Hughes <richard hughsie com>
+ *
+ * Licensed under the GNU General Public License Version 2
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+#ifndef __NET_DEVICE_MOBILE_H
+#define __NET_DEVICE_MOBILE_H
+
+#include <glib-object.h>
+
+#include "net-device.h"
+#include "nm-connection.h"
+
+G_BEGIN_DECLS
+
+#define NET_TYPE_DEVICE_MOBILE          (net_device_mobile_get_type ())
+#define NET_DEVICE_MOBILE(o)            (G_TYPE_CHECK_INSTANCE_CAST ((o), NET_TYPE_DEVICE_MOBILE, NetDeviceMobile))
+#define NET_DEVICE_MOBILE_CLASS(k)      (G_TYPE_CHECK_CLASS_CAST((k), NET_TYPE_DEVICE_MOBILE, NetDeviceMobileClass))
+#define NET_IS_DEVICE_MOBILE(o)         (G_TYPE_CHECK_INSTANCE_TYPE ((o), NET_TYPE_DEVICE_MOBILE))
+#define NET_IS_DEVICE_MOBILE_CLASS(k)   (G_TYPE_CHECK_CLASS_TYPE ((k), NET_TYPE_DEVICE_MOBILE))
+#define NET_DEVICE_MOBILE_GET_CLASS(o)  (G_TYPE_INSTANCE_GET_CLASS ((o), NET_TYPE_DEVICE_MOBILE, NetDeviceMobileClass))
+
+typedef struct _NetDeviceMobilePrivate         NetDeviceMobilePrivate;
+typedef struct _NetDeviceMobile                NetDeviceMobile;
+typedef struct _NetDeviceMobileClass           NetDeviceMobileClass;
+
+struct _NetDeviceMobile
+{
+         NetDevice                       parent;
+         NetDeviceMobilePrivate         *priv;
+};
+
+struct _NetDeviceMobileClass
+{
+        NetDeviceClass                   parent_class;
+};
+
+GType            net_device_mobile_get_type             (void);
+
+G_END_DECLS
+
+#endif /* __NET_DEVICE_MOBILE_H */
+
diff --git a/panels/network/network.ui b/panels/network/network.ui
index 2b435f0..b083dac 100644
--- a/panels/network/network.ui
+++ b/panels/network/network.ui
@@ -863,425 +863,6 @@
                         <property name="tab_fill">False</property>
                       </packing>
                     </child>
-                    <child>
-                      <object class="GtkVBox" id="vbox7">
-                        <property name="visible">True</property>
-                        <property name="can_focus">False</property>
-                        <property name="border_width">12</property>
-                        <property name="spacing">6</property>
-                        <child>
-                          <object class="GtkGrid" id="grid3">
-                            <property name="visible">True</property>
-                            <property name="can_focus">False</property>
-                            <property name="valign">start</property>
-                            <property name="row_spacing">10</property>
-                            <property name="column_spacing">6</property>
-                            <child>
-                              <object class="GtkImage" id="image_mobilebb_device">
-                                <property name="visible">True</property>
-                                <property name="can_focus">False</property>
-                                <property name="halign">end</property>
-                                <property name="valign">start</property>
-                                <property name="xalign">1</property>
-                                <property name="pixel_size">48</property>
-                                <property name="icon_name">network-cellular-connected-symbolic</property>
-                                <property name="icon-size">6</property>
-                              </object>
-                              <packing>
-                                <property name="left_attach">0</property>
-                                <property name="top_attach">0</property>
-                                <property name="width">1</property>
-                                <property name="height">1</property>
-                              </packing>
-                            </child>
-                            <child>
-                              <object class="GtkVBox" id="vbox11">
-                                <property name="visible">True</property>
-                                <property name="can_focus">False</property>
-                                <property name="valign">start</property>
-                                <property name="hexpand">True</property>
-                                <property name="spacing">3</property>
-                                <child>
-                                  <object class="GtkLabel" id="label_mobilebb_device">
-                                    <property name="visible">True</property>
-                                    <property name="can_focus">False</property>
-                                    <property name="xalign">0</property>
-                                    <property name="label">Mobile Broadband</property>
-                                    <property name="ellipsize">end</property>
-                                    <attributes>
-                                      <attribute name="weight" value="bold"/>
-                                      <attribute name="scale" value="1.2"/>
-                                    </attributes>
-                                  </object>
-                                  <packing>
-                                    <property name="expand">False</property>
-                                    <property name="fill">False</property>
-                                    <property name="position">0</property>
-                                  </packing>
-                                </child>
-                                <child>
-                                  <object class="GtkLabel" id="label_mobilebb_status">
-                                    <property name="visible">True</property>
-                                    <property name="can_focus">False</property>
-                                    <property name="xalign">0</property>
-                                    <property name="label">Not connected</property>
-                                  </object>
-                                  <packing>
-                                    <property name="expand">False</property>
-                                    <property name="fill">False</property>
-                                    <property name="position">1</property>
-                                  </packing>
-                                </child>
-                              </object>
-                              <packing>
-                                <property name="left_attach">1</property>
-                                <property name="top_attach">0</property>
-                                <property name="width">1</property>
-                                <property name="height">1</property>
-                              </packing>
-                            </child>
-                            <child>
-                              <object class="GtkLabel" id="heading_mobilebb_imei">
-                                <property name="visible">True</property>
-                                <property name="can_focus">False</property>
-                                <property name="xalign">1</property>
-                                <property name="label" translatable="yes">IMEI</property>
-                                <property name="mnemonic_widget">label_mobilebb_imei</property>
-                                <style>
-                                  <class name="dim-label"/>
-                                </style>
-                              </object>
-                              <packing>
-                                <property name="left_attach">0</property>
-                                <property name="top_attach">1</property>
-                                <property name="width">1</property>
-                                <property name="height">1</property>
-                              </packing>
-                            </child>
-                            <child>
-                              <object class="GtkLabel" id="heading_mobilebb_provider">
-                                <property name="visible">True</property>
-                                <property name="can_focus">False</property>
-                                <property name="xalign">1</property>
-                                <property name="label" translatable="yes">Provider</property>
-                                <property name="mnemonic_widget">label_mobilebb_provider</property>
-                                <style>
-                                  <class name="dim-label"/>
-                                </style>
-                              </object>
-                              <packing>
-                                <property name="left_attach">0</property>
-                                <property name="top_attach">3</property>
-                                <property name="width">1</property>
-                                <property name="height">1</property>
-                              </packing>
-                            </child>
-                            <child>
-                              <object class="GtkLabel" id="label_mobilebb_imei">
-                                <property name="visible">True</property>
-                                <property name="can_focus">False</property>
-                                <property name="xalign">0</property>
-                                <property name="label">1234567890</property>
-                                <property name="selectable">True</property>
-                              </object>
-                              <packing>
-                                <property name="left_attach">1</property>
-                                <property name="top_attach">1</property>
-                                <property name="width">2</property>
-                                <property name="height">1</property>
-                              </packing>
-                            </child>
-                            <child>
-                              <object class="GtkLabel" id="label_mobilebb_provider">
-                                <property name="visible">True</property>
-                                <property name="can_focus">False</property>
-                                <property name="xalign">0</property>
-                                <property name="label">SuperTel Supremo	</property>
-                                <property name="selectable">True</property>
-                              </object>
-                              <packing>
-                                <property name="left_attach">1</property>
-                                <property name="top_attach">3</property>
-                                <property name="width">2</property>
-                                <property name="height">1</property>
-                              </packing>
-                            </child>
-                            <child>
-                              <object class="GtkLabel" id="label_mobilebb_ipv4">
-                                <property name="visible">True</property>
-                                <property name="can_focus">False</property>
-                                <property name="xalign">0</property>
-                                <property name="label">127.0.0.1</property>
-                                <property name="selectable">True</property>
-                              </object>
-                              <packing>
-                                <property name="left_attach">1</property>
-                                <property name="top_attach">4</property>
-                                <property name="width">2</property>
-                                <property name="height">1</property>
-                              </packing>
-                            </child>
-                            <child>
-                              <object class="GtkLabel" id="label_mobilebb_ipv6">
-                                <property name="visible">True</property>
-                                <property name="can_focus">False</property>
-                                <property name="xalign">0</property>
-                                <property name="selectable">True</property>
-                              </object>
-                              <packing>
-                                <property name="left_attach">1</property>
-                                <property name="top_attach">5</property>
-                                <property name="width">2</property>
-                                <property name="height">1</property>
-                              </packing>
-                            </child>
-                            <child>
-                              <object class="GtkLabel" id="label_mobilebb_route">
-                                <property name="visible">True</property>
-                                <property name="can_focus">False</property>
-                                <property name="xalign">0</property>
-                                <property name="selectable">True</property>
-                              </object>
-                              <packing>
-                                <property name="left_attach">1</property>
-                                <property name="top_attach">6</property>
-                                <property name="width">2</property>
-                                <property name="height">1</property>
-                              </packing>
-                            </child>
-                            <child>
-                              <object class="GtkLabel" id="label_mobilebb_dns">
-                                <property name="visible">True</property>
-                                <property name="can_focus">False</property>
-                                <property name="xalign">0</property>
-                                <property name="yalign">0</property>
-                                <property name="selectable">True</property>
-                              </object>
-                              <packing>
-                                <property name="left_attach">1</property>
-                                <property name="top_attach">7</property>
-                                <property name="width">2</property>
-                                <property name="height">1</property>
-                              </packing>
-                            </child>
-                            <child>
-                              <object class="GtkAlignment" id="alignment_mobilebb_switch">
-                                <property name="visible">True</property>
-                                <property name="can_focus">False</property>
-                                <property name="halign">end</property>
-                                <property name="valign">start</property>
-                                <child>
-                                  <object class="GtkSwitch" id="device_mobilebb_off_switch">
-                                    <property name="use_action_appearance">False</property>
-                                    <property name="visible">True</property>
-                                    <property name="can_focus">True</property>
-                                    <property name="halign">end</property>
-                                    <property name="valign">start</property>
-                                    <property name="use_action_appearance">False</property>
-                                    <child internal-child="accessible">
-                                      <object class="AtkObject" id="mobilebb_off_a11y">
-                                        <property name="accessible-name" translatable="yes">Device Off</property>
-                                      </object>
-                                    </child>
-                                  </object>
-                                </child>
-                              </object>
-                              <packing>
-                                <property name="left_attach">2</property>
-                                <property name="top_attach">0</property>
-                                <property name="width">1</property>
-                                <property name="height">1</property>
-                              </packing>
-                            </child>
-                            <child>
-                              <object class="GtkLabel" id="heading_mobilebb_ipv4">
-                                <property name="visible">True</property>
-                                <property name="can_focus">False</property>
-                                <property name="xalign">1</property>
-                                <property name="label" translatable="yes">IP Address</property>
-                                <style>
-                                  <class name="dim-label"/>
-                                </style>
-                              </object>
-                              <packing>
-                                <property name="left_attach">0</property>
-                                <property name="top_attach">4</property>
-                                <property name="width">1</property>
-                                <property name="height">1</property>
-                              </packing>
-                            </child>
-                            <child>
-                              <object class="GtkLabel" id="heading_mobilebb_ipv6">
-                                <property name="visible">True</property>
-                                <property name="can_focus">False</property>
-                                <property name="xalign">1</property>
-                                <property name="label" translatable="yes">IPv6 Address</property>
-                                <style>
-                                  <class name="dim-label"/>
-                                </style>
-                              </object>
-                              <packing>
-                                <property name="left_attach">0</property>
-                                <property name="top_attach">5</property>
-                                <property name="width">1</property>
-                                <property name="height">1</property>
-                              </packing>
-                            </child>
-                            <child>
-                              <object class="GtkLabel" id="heading_mobilebb_route">
-                                <property name="visible">True</property>
-                                <property name="can_focus">False</property>
-                                <property name="xalign">1</property>
-                                <property name="label" translatable="yes">Default Route</property>
-                                <style>
-                                  <class name="dim-label"/>
-                                </style>
-                              </object>
-                              <packing>
-                                <property name="left_attach">0</property>
-                                <property name="top_attach">6</property>
-                                <property name="width">1</property>
-                                <property name="height">1</property>
-                              </packing>
-                            </child>
-                            <child>
-                              <object class="GtkLabel" id="heading_mobilebb_dns">
-                                <property name="visible">True</property>
-                                <property name="can_focus">False</property>
-                                <property name="xalign">1</property>
-                                <property name="yalign">0</property>
-                                <property name="label" translatable="yes">DNS</property>
-                                <style>
-                                  <class name="dim-label"/>
-                                </style>
-                              </object>
-                              <packing>
-                                <property name="left_attach">0</property>
-                                <property name="top_attach">7</property>
-                                <property name="width">1</property>
-                                <property name="height">1</property>
-                              </packing>
-                            </child>
-                            <child>
-                              <object class="GtkLabel" id="heading_mobilebb_network">
-                                <property name="visible">True</property>
-                                <property name="can_focus">False</property>
-                                <property name="xalign">1</property>
-                                <property name="yalign">0.5</property>
-                                <property name="label" translatable="yes">Network</property>
-                                <style>
-                                  <class name="dim-label"/>
-                                </style>
-                              </object>
-                              <packing>
-                                <property name="left_attach">0</property>
-                                <property name="top_attach">2</property>
-                                <property name="width">1</property>
-                                <property name="height">1</property>
-                              </packing>
-                            </child>
-                            <child>
-                              <object class="GtkComboBox" id="combobox_mobilebb_network">
-                                <property name="visible">True</property>
-                                <property name="can_focus">False</property>
-                                <property name="model">liststore_mobile_connections</property>
-                                <property name="entry_text_column">1</property>
-                              </object>
-                              <packing>
-                                <property name="left_attach">1</property>
-                                <property name="top_attach">2</property>
-                                <property name="width">1</property>
-                                <property name="height">1</property>
-                              </packing>
-                            </child>
-                          </object>
-                          <packing>
-                            <property name="expand">False</property>
-                            <property name="fill">True</property>
-                            <property name="position">0</property>
-                          </packing>
-                        </child>
-                        <child>
-                          <object class="GtkAlignment" id="alignment3">
-                            <property name="visible">True</property>
-                            <property name="can_focus">False</property>
-                            <property name="xalign">1</property>
-                            <property name="yalign">1</property>
-                            <property name="xscale">0</property>
-                            <property name="yscale">0</property>
-                            <property name="top_padding">12</property>
-                            <child>
-                              <object class="GtkButton" id="button_mobilebb_options">
-                                <property name="label" translatable="yes">_Options...</property>
-                                <property name="use_action_appearance">False</property>
-                                <property name="visible">True</property>
-                                <property name="can_focus">True</property>
-                                <property name="receives_default">True</property>
-                                <property name="use_action_appearance">False</property>
-                                <property name="use_underline">True</property>
-                              </object>
-                            </child>
-                          </object>
-                          <packing>
-                            <property name="expand">True</property>
-                            <property name="fill">True</property>
-                            <property name="pack_type">end</property>
-                            <property name="position">1</property>
-                          </packing>
-                        </child>
-                      </object>
-                      <packing>
-                        <property name="position">2</property>
-                      </packing>
-                    </child>
-                    <child type="tab">
-                      <object class="GtkLabel" id="label17">
-                        <property name="visible">True</property>
-                        <property name="can_focus">False</property>
-                        <property name="label">mobilebb</property>
-                      </object>
-                      <packing>
-                        <property name="position">2</property>
-                        <property name="tab_fill">False</property>
-                      </packing>
-                    </child>
-                    <child>
-                    </child>
-                    <child type="tab">
-                      <object class="GtkLabel" id="label55">
-                        <property name="visible">True</property>
-                        <property name="can_focus">False</property>
-                        <property name="label">vpn</property>
-                      </object>
-                      <packing>
-                        <property name="position">2</property>
-                        <property name="tab_fill">False</property>
-                      </packing>
-                    </child>
-                    <child>
-                    </child>
-                    <child type="tab">
-                      <object class="GtkLabel" id="label46">
-                        <property name="visible">True</property>
-                        <property name="can_focus">False</property>
-                        <property name="label">proxy</property>
-                      </object>
-                      <packing>
-                        <property name="position">2</property>
-                        <property name="tab_fill">False</property>
-                      </packing>
-                    </child>
-                    <child type="tab">
-                      <object class="GtkLabel" id="label37">
-                        <property name="visible">True</property>
-                        <property name="can_focus">False</property>
-                        <property name="label">other</property>
-                      </object>
-                      <packing>
-                        <property name="position">2</property>
-                        <property name="tab_fill">False</property>
-                      </packing>
-                    </child>
                   </object>
                   <packing>
                     <property name="expand">True</property>
@@ -1309,7 +890,6 @@
   <object class="GtkSizeGroup" id="sizegroup1">
     <widgets>
       <widget name="heading_wireless_mac"/>
-      <widget name="heading_mobilebb_imei"/>
     </widgets>
   </object>
 </interface>



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