diff options
author | Beniamino Galvani <bgalvani@redhat.com> | 2016-09-12 14:11:33 +0200 |
---|---|---|
committer | Beniamino Galvani <bgalvani@redhat.com> | 2016-09-14 23:19:17 +0200 |
commit | 5866cdba47c85515215afb38ad29fc3fcab1b052 (patch) | |
tree | 2b662dfdc1d05f64f6ea24e7de138f9d1487c918 | |
parent | 309570724cd3c6e4de9593359e8bbfd1a0bf7323 (diff) | |
download | network-manager-applet-5866cdba47c85515215afb38ad29fc3fcab1b052.tar.gz |
editor: preserve old addresses when changing IP method
When the user switches from "Manual" to a method with disabled IP
addressing and then back, the address list is lost. Restore it.
-rw-r--r-- | src/connection-editor/page-ip4.c | 21 | ||||
-rw-r--r-- | src/connection-editor/page-ip6.c | 20 |
2 files changed, 33 insertions, 8 deletions
diff --git a/src/connection-editor/page-ip4.c b/src/connection-editor/page-ip4.c index b457448d..4efadd3a 100644 --- a/src/connection-editor/page-ip4.c +++ b/src/connection-editor/page-ip4.c @@ -59,6 +59,7 @@ typedef struct { GtkButton *addr_delete; GtkTreeView *addr_list; GtkCellRenderer *addr_cells[COL_LAST + 1]; + GtkTreeModel *addr_saved; /* DNS servers */ GtkWidget *dns_servers_label; @@ -246,6 +247,7 @@ method_changed (GtkComboBox *combo, gpointer user_data) gboolean ip4_required_enabled = TRUE; gboolean method_auto = FALSE; GtkTreeIter iter; + GtkListStore *store; if (gtk_combo_box_get_active_iter (priv->method, &iter)) { gtk_tree_model_get (GTK_TREE_MODEL (priv->method_store), &iter, @@ -268,6 +270,7 @@ method_changed (GtkComboBox *combo, gpointer user_data) break; case IP4_METHOD_DISABLED: addr_enabled = dns_enabled = dhcp_enabled = routes_enabled = ip4_required_enabled = FALSE; + break; default: break; } @@ -285,11 +288,21 @@ method_changed (GtkComboBox *combo, gpointer user_data) gtk_widget_set_sensitive (GTK_WIDGET (priv->addr_add), addr_enabled); gtk_widget_set_sensitive (GTK_WIDGET (priv->addr_delete), addr_enabled); gtk_widget_set_sensitive (GTK_WIDGET (priv->addr_list), addr_enabled); - if (!addr_enabled) { - GtkListStore *store; - store = GTK_LIST_STORE (gtk_tree_view_get_model (priv->addr_list)); - gtk_list_store_clear (store); + if (addr_enabled) { + if (priv->addr_saved) { + /* Restore old entries */ + gtk_tree_view_set_model (priv->addr_list, priv->addr_saved); + g_clear_object (&priv->addr_saved); + } + } else { + if (!priv->addr_saved) { + /* Save current entries, set empty list */ + priv->addr_saved = g_object_ref (gtk_tree_view_get_model (priv->addr_list)); + store = gtk_list_store_new (3, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING); + gtk_tree_view_set_model (priv->addr_list, GTK_TREE_MODEL (store)); + g_object_unref (store); + } } gtk_widget_set_sensitive (priv->dns_servers_label, dns_enabled); diff --git a/src/connection-editor/page-ip6.c b/src/connection-editor/page-ip6.c index 124269ee..8564285d 100644 --- a/src/connection-editor/page-ip6.c +++ b/src/connection-editor/page-ip6.c @@ -58,6 +58,7 @@ typedef struct { GtkButton *addr_delete; GtkTreeView *addr_list; GtkCellRenderer *addr_cells[COL_LAST + 1]; + GtkTreeModel *addr_saved; /* DNS servers */ GtkWidget *dns_servers_label; @@ -246,6 +247,7 @@ method_changed (GtkComboBox *combo, gpointer user_data) gboolean ip6_required_enabled = TRUE; gboolean method_auto = FALSE; GtkTreeIter iter; + GtkListStore *store; if (gtk_combo_box_get_active_iter (priv->method, &iter)) { gtk_tree_model_get (GTK_TREE_MODEL (priv->method_store), &iter, @@ -283,11 +285,21 @@ method_changed (GtkComboBox *combo, gpointer user_data) gtk_widget_set_sensitive (GTK_WIDGET (priv->addr_add), addr_enabled); gtk_widget_set_sensitive (GTK_WIDGET (priv->addr_delete), addr_enabled); gtk_widget_set_sensitive (GTK_WIDGET (priv->addr_list), addr_enabled); - if (!addr_enabled) { - GtkListStore *store; - store = GTK_LIST_STORE (gtk_tree_view_get_model (priv->addr_list)); - gtk_list_store_clear (store); + if (addr_enabled) { + if (priv->addr_saved) { + /* Restore old entries */ + gtk_tree_view_set_model (priv->addr_list, priv->addr_saved); + g_clear_object (&priv->addr_saved); + } + } else { + if (!priv->addr_saved) { + /* Save current entries, set empty list */ + priv->addr_saved = g_object_ref (gtk_tree_view_get_model (priv->addr_list)); + store = gtk_list_store_new (3, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING); + gtk_tree_view_set_model (priv->addr_list, GTK_TREE_MODEL (store)); + g_object_unref (store); + } } gtk_widget_set_sensitive (priv->dns_servers_label, dns_enabled); |