summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBeniamino Galvani <bgalvani@redhat.com>2016-09-12 14:11:33 +0200
committerBeniamino Galvani <bgalvani@redhat.com>2016-09-14 23:19:17 +0200
commit5866cdba47c85515215afb38ad29fc3fcab1b052 (patch)
tree2b662dfdc1d05f64f6ea24e7de138f9d1487c918
parent309570724cd3c6e4de9593359e8bbfd1a0bf7323 (diff)
downloadnetwork-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.c21
-rw-r--r--src/connection-editor/page-ip6.c20
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);