From ac67290cb7cf2f0830afd39350d5e501c7d1d0d9 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Sat, 8 Sep 2012 15:25:31 -0400 Subject: [PATCH] network: Make the 'Settings...' buttons work properly The code was assuming that 'editing' always means editing the currently active connection. With the new design of the wifi details tabs, that is no longer the case, we want to be able to edit non-active connections. This commit makes it so. --- panels/network/net-device-wifi.c | 48 ++++++++++++++++++++++++++++---- 1 file changed, 42 insertions(+), 6 deletions(-) diff --git a/panels/network/net-device-wifi.c b/panels/network/net-device-wifi.c index 96f7f792a..15d665bb1 100644 --- a/panels/network/net-device-wifi.c +++ b/panels/network/net-device-wifi.c @@ -763,7 +763,7 @@ nm_device_wifi_refresh_ui (NetDeviceWifi *device_wifi) /* only disconnect when connection active */ widget = GTK_WIDGET (gtk_builder_get_object (device_wifi->priv->builder, - "button_disconnect")); + "button_disconnect1")); gtk_widget_set_sensitive (widget, state == NM_DEVICE_STATE_ACTIVATED); /* device MAC */ @@ -1859,6 +1859,32 @@ net_device_wifi_finalize (GObject *object) G_OBJECT_CLASS (net_device_wifi_parent_class)->finalize (object); } +static void +device_wifi_edit (NetObject *object) +{ + const gchar *uuid; + gchar *cmdline; + GError *error = NULL; + NetDeviceWifi *device = NET_DEVICE_WIFI (object); + NMRemoteSettings *settings; + NMRemoteConnection *connection; + + settings = net_object_get_remote_settings (object); + connection = nm_remote_settings_get_connection_by_path (settings, device->priv->selected_connection_id); + if (connection == NULL) { + g_warning ("failed to get remote connection"); + return; + } + uuid = nm_connection_get_uuid (NM_CONNECTION (connection)); + cmdline = g_strdup_printf ("nm-connection-editor --edit %s", uuid); + g_debug ("Launching '%s'\n", cmdline); + if (!g_spawn_command_line_async (cmdline, &error)) { + g_warning ("Failed to launch nm-connection-editor: %s", error->message); + g_error_free (error); + } + g_free (cmdline); +} + static void net_device_wifi_class_init (NetDeviceWifiClass *klass) { @@ -1869,6 +1895,8 @@ net_device_wifi_class_init (NetDeviceWifiClass *klass) object_class->constructed = net_device_wifi_constructed; parent_class->add_to_notebook = device_wifi_proxy_add_to_notebook; parent_class->refresh = device_wifi_refresh; + parent_class->edit = device_wifi_edit; + g_type_class_add_private (klass, sizeof (NetDeviceWifiPrivate)); } @@ -1902,17 +1930,25 @@ net_device_wifi_init (NetDeviceWifi *device_wifi) G_CALLBACK (device_off_toggled), device_wifi); widget = GTK_WIDGET (gtk_builder_get_object (device_wifi->priv->builder, - "button_options")); + "button_options1")); + g_signal_connect (widget, "clicked", + G_CALLBACK (edit_connection), device_wifi); + widget = GTK_WIDGET (gtk_builder_get_object (device_wifi->priv->builder, + "button_options4")); g_signal_connect (widget, "clicked", G_CALLBACK (edit_connection), device_wifi); widget = GTK_WIDGET (gtk_builder_get_object (device_wifi->priv->builder, - "button_forget")); + "button_forget1")); + g_signal_connect (widget, "clicked", + G_CALLBACK (forget_button_clicked_cb), device_wifi); + widget = GTK_WIDGET (gtk_builder_get_object (device_wifi->priv->builder, + "button_forget4")); g_signal_connect (widget, "clicked", G_CALLBACK (forget_button_clicked_cb), device_wifi); widget = GTK_WIDGET (gtk_builder_get_object (device_wifi->priv->builder, - "button_disconnect")); + "button_disconnect1")); g_signal_connect (widget, "clicked", G_CALLBACK (disconnect_button_clicked_cb), device_wifi); @@ -2022,11 +2058,11 @@ net_device_wifi_init (NetDeviceWifi *device_wifi) set_arrow_image, device_wifi, NULL); widget = GTK_WIDGET (gtk_builder_get_object (device_wifi->priv->builder, - "button_back")); + "button_back1")); g_signal_connect_swapped (widget, "clicked", G_CALLBACK (show_wifi_list), device_wifi); widget = GTK_WIDGET (gtk_builder_get_object (device_wifi->priv->builder, - "button_saved_back")); + "button_back4")); g_signal_connect_swapped (widget, "clicked", G_CALLBACK (show_wifi_list), device_wifi);