diff options
-rw-r--r-- | panels/network/net-device-wifi.c | 60 | ||||
-rw-r--r-- | 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 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> |