[gnome-initial-setup] network: Handled disabled states better



commit a0dd979ddfa7b6a4516291984f0f1533e08baf37
Author: Matthias Clasen <mclasen redhat com>
Date:   Thu May 28 21:43:24 2015 -0400

    network: Handled disabled states better
    
    If wireless is turned off, don't show a spinner forever.
    Instead, offer the user a switch to turn it on.

 .../pages/network/gis-network-page.c               |   35 +++++++++++++++++--
 .../pages/network/gis-network-page.ui              |   29 ++++++++++++++++
 2 files changed, 60 insertions(+), 4 deletions(-)
---
diff --git a/gnome-initial-setup/pages/network/gis-network-page.c 
b/gnome-initial-setup/pages/network/gis-network-page.c
index ddd1c87..168be4e 100644
--- a/gnome-initial-setup/pages/network/gis-network-page.c
+++ b/gnome-initial-setup/pages/network/gis-network-page.c
@@ -53,6 +53,8 @@ struct _GisNetworkPagePrivate {
   GtkWidget *scrolled_window;
   GtkWidget *no_network_label;
   GtkWidget *no_network_spinner;
+  GtkWidget *turn_on_label;
+  GtkWidget *turn_on_switch;
 
   NMClient *nm_client;
   NMRemoteSettings *nm_settings;
@@ -355,16 +357,35 @@ refresh_wireless_list (GisNetworkPage *page)
   aps = nm_device_wifi_get_access_points (NM_DEVICE_WIFI (priv->nm_device));
 
   if (aps == NULL || aps->len == 0) {
-    gtk_label_set_text (GTK_LABEL (priv->no_network_label), _("Checking for available wireless networks"));
-    gtk_widget_show (priv->no_network_spinner);
-    gtk_widget_show (priv->no_network_label);
+    gboolean enabled, hw_enabled;
+
+    enabled = nm_client_wireless_get_enabled (priv->nm_client);
+    hw_enabled = nm_client_wireless_hardware_get_enabled (priv->nm_client);
+
+    if (!enabled || !hw_enabled) {
+      gtk_label_set_text (GTK_LABEL (priv->no_network_label), _("Wireless networking is disabled"));
+      gtk_widget_show (priv->no_network_label);
+      gtk_widget_hide (priv->no_network_spinner);
+
+      gtk_widget_set_visible (priv->turn_on_label, hw_enabled);
+      gtk_widget_set_visible (priv->turn_on_switch, hw_enabled);
+    } else {
+      gtk_label_set_text (GTK_LABEL (priv->no_network_label), _("Checking for available wireless networks"));
+      gtk_widget_show (priv->no_network_spinner);
+      gtk_widget_show (priv->no_network_label);
+      gtk_widget_hide (priv->turn_on_label);
+      gtk_widget_hide (priv->turn_on_switch);
+    }
+
     gtk_widget_hide (priv->scrolled_window);
     priv->refresh_timeout_id = g_timeout_add_seconds (1, refresh_again, page);
-
     goto out;
+
   } else {
     gtk_widget_hide (priv->no_network_spinner);
     gtk_widget_hide (priv->no_network_label);
+    gtk_widget_hide (priv->turn_on_label);
+    gtk_widget_hide (priv->turn_on_switch);
     gtk_widget_show (priv->scrolled_window);
   }
 
@@ -539,6 +560,10 @@ gis_network_page_constructed (GObject *object)
 
   priv->nm_client = nm_client_new ();
 
+  g_object_bind_property (priv->nm_client, "wireless-enabled",
+                          priv->turn_on_switch, "active",
+                          G_BINDING_BIDIRECTIONAL | G_BINDING_SYNC_CREATE);
+
   devices = nm_client_get_devices (priv->nm_client);
   if (devices) {
     for (i = 0; i < devices->len; i++) {
@@ -626,6 +651,8 @@ gis_network_page_class_init (GisNetworkPageClass *klass)
   gtk_widget_class_bind_template_child_private (GTK_WIDGET_CLASS (klass), GisNetworkPage, scrolled_window);
   gtk_widget_class_bind_template_child_private (GTK_WIDGET_CLASS (klass), GisNetworkPage, no_network_label);
   gtk_widget_class_bind_template_child_private (GTK_WIDGET_CLASS (klass), GisNetworkPage, 
no_network_spinner);
+  gtk_widget_class_bind_template_child_private (GTK_WIDGET_CLASS (klass), GisNetworkPage, turn_on_label);
+  gtk_widget_class_bind_template_child_private (GTK_WIDGET_CLASS (klass), GisNetworkPage, turn_on_switch);
 
   page_class->page_id = PAGE_ID;
   page_class->locale_changed = gis_network_page_locale_changed;
diff --git a/gnome-initial-setup/pages/network/gis-network-page.ui 
b/gnome-initial-setup/pages/network/gis-network-page.ui
index 4db31be..b4df70d 100644
--- a/gnome-initial-setup/pages/network/gis-network-page.ui
+++ b/gnome-initial-setup/pages/network/gis-network-page.ui
@@ -76,6 +76,7 @@
             <property name="margin_top">18</property>
             <property name="halign">center</property>
             <property name="valign">start</property>
+            <property name="row-spacing">10</property>
             <child>
               <object class="GtkSpinner" id="no_network_spinner">
                 <property name="visible">True</property>
@@ -104,6 +105,34 @@
               <packing>
                 <property name="left_attach">1</property>
                 <property name="top_attach">0</property>
+                <property name="width">2</property>
+                <property name="height">1</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="turn_on_label">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="halign">start</property>
+                <property name="valign">center</property>
+                <property name="label" translatable="yes">Turn On</property>
+              </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="top_attach">1</property>
+                <property name="width">1</property>
+                <property name="height">1</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkSwitch" id="turn_on_switch">
+                <property name="visible">True</property>
+                <property name="halign">end</property>
+                <property name="valign">center</property>
+              </object>
+              <packing>
+                <property name="left_attach">2</property>
+                <property name="top_attach">1</property>
                 <property name="width">1</property>
                 <property name="height">1</property>
               </packing>


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