[gnome-control-center/wifi-refinements: 8/20] network: Add a 'Connect' button



commit 8459b012580b8edd456f44d10fed32c76ea6c73b
Author: Matthias Clasen <mclasen redhat com>
Date:   Sat Sep 8 17:29:46 2012 -0400

    network: Add a 'Connect' button
    
    When showing details of a non-active access point, replace the
    'Disconnect' button with a 'Connect' button.

 panels/network/net-device-wifi.c |   60 +++++++++++++++++++++--
 panels/network/network-wifi.ui   |  102 ++++++++++++++++++++++++-------------
 2 files changed, 122 insertions(+), 40 deletions(-)
---
diff --git a/panels/network/net-device-wifi.c b/panels/network/net-device-wifi.c
index 13c2611..bc3b3c2 100644
--- a/panels/network/net-device-wifi.c
+++ b/panels/network/net-device-wifi.c
@@ -780,9 +780,22 @@ nm_device_wifi_refresh_ui (NetDeviceWifi *device_wifi)
         g_free (title);
 
         /* only disconnect when connection active */
-        widget = GTK_WIDGET (gtk_builder_get_object (device_wifi->priv->builder,
-                                                     "button_disconnect1"));
-        gtk_widget_set_sensitive (widget, state == NM_DEVICE_STATE_ACTIVATED);
+        if (ap != active_ap) {
+                widget = GTK_WIDGET (gtk_builder_get_object (device_wifi->priv->builder,
+                                                             "button_disconnect1"));
+                gtk_widget_hide (widget);
+                widget = GTK_WIDGET (gtk_builder_get_object (device_wifi->priv->builder,
+                                                             "button_connect1"));
+                gtk_widget_show (widget);
+        } else {
+                widget = GTK_WIDGET (gtk_builder_get_object (device_wifi->priv->builder,
+                                                             "button_disconnect1"));
+                gtk_widget_set_sensitive (widget, state == NM_DEVICE_STATE_ACTIVATED);
+                gtk_widget_show (widget);
+                widget = GTK_WIDGET (gtk_builder_get_object (device_wifi->priv->builder,
+                                                             "button_connect1"));
+                gtk_widget_hide (widget);
+        }
 
         /* device MAC */
         if (ap != active_ap)
@@ -916,6 +929,15 @@ disconnect_button_clicked_cb (GtkButton *button, NetDeviceWifi *device_wifi)
         nm_device_disconnect (device, NULL, NULL);
 }
 
+static void activate_connection (NetDeviceWifi *device, const gchar *id);
+
+static void
+connect_button_clicked_cb (GtkButton *button, NetDeviceWifi *device_wifi)
+{
+        if (device_wifi->priv->selected_connection_id)
+                activate_connection (device_wifi, device_wifi->priv->selected_connection_id);
+}
+
 static void
 forget_button_clicked_cb (GtkButton *button, NetDeviceWifi *device_wifi)
 {
@@ -991,6 +1013,25 @@ connection_activate_cb (NMClient *client,
 }
 
 static void
+activate_connection (NetDeviceWifi *device_wifi,
+                     const gchar   *connection_id)
+{
+        NMDevice *device;
+        NMClient *client;
+        NMRemoteSettings *settings;
+        NMRemoteConnection *connection;
+
+        device = net_device_get_nm_device (NET_DEVICE (device_wifi));
+        client = net_object_get_client (NET_OBJECT (device_wifi));
+        settings = net_object_get_remote_settings (NET_OBJECT (device_wifi));
+        connection = nm_remote_settings_get_connection_by_path (settings, connection_id);
+        nm_client_activate_connection (client,
+                                       NM_CONNECTION (connection),
+                                       device, NULL,
+                                       connection_activate_cb, device_wifi);
+}
+
+static void
 wireless_try_to_connect (NetDeviceWifi *device_wifi,
                          const gchar *ssid_target,
                          const gchar *ap_object_path)
@@ -1552,6 +1593,7 @@ connect_wifi_network (NetDeviceWifi *device_wifi,
         gboolean ap_in_range;
         gchar *ap_object_path;
         gchar *ssid;
+        gchar *connection_id;
         GtkTreeIter iter;
         GtkTreeModel *model;
         NM80211Mode mode;
@@ -1561,15 +1603,21 @@ connect_wifi_network (NetDeviceWifi *device_wifi,
 
         gtk_tree_model_get (model, &iter,
                             COLUMN_ACCESS_POINT_ID, &ap_object_path,
+                            COLUMN_CONNECTION_ID, &connection_id,
                             COLUMN_TITLE, &ssid,
                             COLUMN_AP_IN_RANGE, &ap_in_range,
                             COLUMN_MODE, &mode,
                             -1);
 
-        if (ap_in_range || mode == NM_802_11_MODE_UNKNOWN)
+        if (connection_id)
+                activate_connection (device_wifi, connection_id);
+        else if (ap_in_range || mode == NM_802_11_MODE_UNKNOWN)
                 wireless_try_to_connect (device_wifi, ssid, ap_object_path);
+        else
+                g_warning ("can't connect");
 
         g_free (ap_object_path);
+        g_free (connection_id);
         g_free (ssid);
 }
 
@@ -1977,6 +2025,10 @@ net_device_wifi_init (NetDeviceWifi *device_wifi)
                                                      "button_disconnect1"));
         g_signal_connect (widget, "clicked",
                           G_CALLBACK (disconnect_button_clicked_cb), device_wifi);
+        widget = GTK_WIDGET (gtk_builder_get_object (device_wifi->priv->builder,
+                                                     "button_connect1"));
+        g_signal_connect (widget, "clicked",
+                          G_CALLBACK (connect_button_clicked_cb), device_wifi);
 
         widget = GTK_WIDGET (gtk_builder_get_object (device_wifi->priv->builder,
                                                      "treeview_list"));
diff --git a/panels/network/network-wifi.ui b/panels/network/network-wifi.ui
index f3f4207..f76c134 100644
--- a/panels/network/network-wifi.ui
+++ b/panels/network/network-wifi.ui
@@ -119,16 +119,26 @@
   </object>
   <object class="GtkListStore" id="liststore_network">
     <columns>
-      <column type="gchararray"/> <!-- column-name ap-id -->
-      <column type="gchararray"/> <!-- column-name connection-id -->
-      <column type="gchararray"/> <!-- column-name title -->
-      <column type="gchararray"/> <!-- column-name sortable -->
-      <column type="guint"/> <!-- column-name strength -->
-      <column type="guint"/> <!-- column-name mode -->
-      <column type="guint"/> <!-- column-name security -->
-      <column type="gboolean"/> <!-- column-name active -->
-      <column type="gboolean"/> <!-- column-name ap-in-range -->
-      <column type="gboolean"/> <!-- column-name ap-is-saved -->
+      <!-- column-name gchararray -->
+      <column type="gchararray"/>
+      <!-- column-name ap-id -->
+      <column type="gchararray"/>
+      <!-- column-name connection-id -->
+      <column type="gchararray"/>
+      <!-- column-name title -->
+      <column type="gchararray"/>
+      <!-- column-name sortable -->
+      <column type="guint"/>
+      <!-- column-name strength -->
+      <column type="guint"/>
+      <!-- column-name mode -->
+      <column type="guint"/>
+      <!-- column-name security -->
+      <column type="gboolean"/>
+      <!-- column-name active -->
+      <column type="gboolean"/>
+      <!-- column-name ap-in-range -->
+      <column type="gboolean"/>
     </columns>
   </object>
   <object class="GtkWindow" id="window_tmp">
@@ -493,32 +503,6 @@
                   </packing>
                 </child>
                 <child>
-                  <object class="GtkAlignment" id="alignment_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="GtkButton" id="button_disconnect1">
-                        <property name="label">_Disconnect</property>
-                        <property name="visible">True</property>
-                        <property name="can_focus">True</property>
-                        <property name="receives_default">True</property>
-                        <property name="halign">end</property>
-                        <property name="valign">center</property>
-                        <property name="hexpand">True</property>
-                        <property name="use_underline">True</property>
-                      </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_security">
                     <property name="visible">True</property>
                     <property name="can_focus">False</property>
@@ -640,6 +624,52 @@
                     <property name="height">1</property>
                   </packing>
                 </child>
+                <child>
+                  <object class="GtkBox" id="box5">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="orientation">vertical</property>
+                    <child>
+                      <object class="GtkButton" id="button_disconnect1">
+                        <property name="label">_Disconnect</property>
+                        <property name="visible">True</property>
+                        <property name="can_focus">True</property>
+                        <property name="receives_default">True</property>
+                        <property name="no_show_all">True</property>
+                        <property name="halign">end</property>
+                        <property name="valign">center</property>
+                        <property name="hexpand">True</property>
+                        <property name="use_underline">True</property>
+                      </object>
+                      <packing>
+                        <property name="expand">False</property>
+                        <property name="fill">True</property>
+                        <property name="position">0</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkButton" id="button_connect1">
+                        <property name="label" translatable="yes">_Connect</property>
+                        <property name="use_underline">True</property>
+                        <property name="visible">False</property>
+                        <property name="can_focus">True</property>
+                        <property name="receives_default">True</property>
+                        <property name="no_show_all">True</property>
+                      </object>
+                      <packing>
+                        <property name="expand">False</property>
+                        <property name="fill">True</property>
+                        <property name="position">1</property>
+                      </packing>
+                    </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>
               </object>
               <packing>
                 <property name="expand">True</property>



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