summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--panels/network/net-device-wifi.c60
-rw-r--r--panels/network/network-wifi.ui102
2 files changed, 122 insertions, 40 deletions
diff --git a/panels/network/net-device-wifi.c b/panels/network/net-device-wifi.c
index 13c26110d..bc3b3c2b2 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 f3f42078d..f76c1341e 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>