[gnome-control-center] network: Fix gateway entry visibility



commit d28ffc99029d52f89c8b449b51992a0f9741abeb
Author: Bastien Nocera <hadess hadess net>
Date:   Fri Sep 16 16:57:10 2016 +0200

    network: Fix gateway entry visibility
    
    From https://bugzilla.gnome.org/show_bug.cgi?id=765969 as explained by
    Dan Winship:
    "
    libnm-util/libnm-glib had a buggy data model, which nm-connection-editor
    (and then gnome-control-center) copied, in which each manually-configured
    IP address has an associated gateway address. In reality, NM always just
    took the first non-empty gateway value from the address array, and
    completely ignored any other gateway values.
    libnm represents this more accurately, by having a single gateway
    value which is separate from the address array. Ideally, the editors should
    show it this way as well (eg, like nmtui does). Failing that, it would
    be nice to at least make it so that only the first row in the address
    table can have a non-empty gateway value.
    "
    
    We went for the second option, only showing a gateway entry for the
    first address in the list.
    
    This isn't related to route-specific gateway addresses.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=765969

 panels/network/connection-editor/ce-page-ip4.c |   31 +++++++++++++++++++++++-
 1 files changed, 30 insertions(+), 1 deletions(-)
---
diff --git a/panels/network/connection-editor/ce-page-ip4.c b/panels/network/connection-editor/ce-page-ip4.c
index cfade76..8d77324 100644
--- a/panels/network/connection-editor/ce-page-ip4.c
+++ b/panels/network/connection-editor/ce-page-ip4.c
@@ -120,6 +120,28 @@ update_row_sensitivity (CEPageIP4 *page, GtkWidget *list)
 }
 
 static void
+update_row_gateway_visibility (CEPageIP4 *page)
+{
+        GList *children, *l;
+        gint rows = 0;
+
+        children = gtk_container_get_children (GTK_CONTAINER (page->address_list));
+        for (l = children; l; l = l->next) {
+                GtkWidget *row = l->data;
+                GtkWidget *label, *entry;
+
+                label = GTK_WIDGET (g_object_get_data (G_OBJECT (row), "gateway-label"));
+                entry = GTK_WIDGET (g_object_get_data (G_OBJECT (row), "gateway"));
+
+                gtk_widget_set_visible (label, (rows == 0));
+                gtk_widget_set_visible (entry, (rows == 0));
+
+                rows++;
+        }
+        g_list_free (children);
+}
+
+static void
 remove_row (GtkButton *button, CEPageIP4 *page)
 {
         GtkWidget *list;
@@ -135,6 +157,8 @@ remove_row (GtkButton *button, CEPageIP4 *page)
         ce_page_changed (CE_PAGE (page));
 
         update_row_sensitivity (page, list);
+        if (list == page->address_list)
+                update_row_gateway_visibility (page);
 }
 
 static gint
@@ -205,6 +229,7 @@ add_address_row (CEPageIP4   *page,
         label = gtk_label_new (_("Gateway"));
         gtk_widget_set_halign (label, GTK_ALIGN_END);
         gtk_grid_attach (GTK_GRID (row_grid), label, 1, 3, 1, 1);
+        g_object_set_data (G_OBJECT (row), "gateway-label", label);
         widget = gtk_entry_new ();
         gtk_label_set_mnemonic_widget (GTK_LABEL (label), widget);
         g_signal_connect_swapped (widget, "changed", G_CALLBACK (ce_page_changed), page);
@@ -215,6 +240,9 @@ add_address_row (CEPageIP4   *page,
         gtk_widget_set_hexpand (widget, TRUE);
         gtk_grid_attach (GTK_GRID (row_grid), widget, 2, 3, 1, 1);
 
+        gtk_widget_set_no_show_all (label, TRUE);
+        gtk_widget_set_no_show_all (widget, FALSE);
+
         delete_button = gtk_button_new ();
         gtk_style_context_add_class (gtk_widget_get_style_context (delete_button), "image-button");
         g_signal_connect (delete_button, "clicked", G_CALLBACK (remove_row), page);
@@ -235,6 +263,7 @@ add_address_row (CEPageIP4   *page,
         gtk_widget_show_all (row);
         gtk_container_add (GTK_CONTAINER (page->address_list), row);
 
+        update_row_gateway_visibility (page);
         update_row_sensitivity (page, page->address_list);
 }
 
@@ -314,7 +343,7 @@ add_address_section (CEPageIP4 *page)
                 add_address_row (page,
                                  nm_ip_address_get_address (addr),
                                  network,
-                                 nm_setting_ip_config_get_gateway (page->setting));
+                                 i == 0 ? nm_setting_ip_config_get_gateway (page->setting) : "");
         }
         if (nm_setting_ip_config_get_num_addresses (page->setting) == 0)
                 add_empty_address_row (page);


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]