[gnome-control-center/wip/gbsneto/connection-editor: 12/15] network: Simplify DNS management in connection editor
- From: Georges Basile Stavracas Neto <gbsneto src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-control-center/wip/gbsneto/connection-editor: 12/15] network: Simplify DNS management in connection editor
- Date: Thu, 15 Jun 2017 17:02:24 +0000 (UTC)
commit 489335585da70509df5da458fc452408a4bc731d
Author: Georges Basile Stavracas Neto <georges stavracas gmail com>
Date: Tue May 23 02:44:58 2017 -0300
network: Simplify DNS management in connection editor
When editing the DNS servers of a given connection, a simple
entry is enough to display and edit the DNS servers. The user
can separate IP addresses with commas. This is exemplified
by the mockup at [1].
This, however, is not the current implementation, which uses
a combination of listbox rows, entries and buttons to manage
that with added complexity.
Fix that by using an entry to handle the DNS servers.
[1]
https://raw.githubusercontent.com/gnome-design-team/gnome-mockups/master/system-settings/network/aday2/network-wires.png
https://bugzilla.gnome.org/show_bug.cgi?id=779841
panels/network/connection-editor/ce-page-ip4.c | 129 ++++++-----------------
panels/network/connection-editor/ce-page-ip4.h | 3 +-
panels/network/connection-editor/ce-page-ip6.c | 129 ++++++-----------------
panels/network/connection-editor/ce-page-ip6.h | 3 +-
panels/network/connection-editor/ip4-page.ui | 87 +++++-----------
panels/network/connection-editor/ip6-page.ui | 89 +++++------------
6 files changed, 120 insertions(+), 320 deletions(-)
---
diff --git a/panels/network/connection-editor/ce-page-ip4.c b/panels/network/connection-editor/ce-page-ip4.c
index 3488657..e9d8df2 100644
--- a/panels/network/connection-editor/ce-page-ip4.c
+++ b/panels/network/connection-editor/ce-page-ip4.c
@@ -69,7 +69,7 @@ method_changed (GtkToggleButton *radio, CEPageIP4 *page)
widget = GTK_WIDGET (gtk_builder_get_object (CE_PAGE (page)->builder, "address_section"));
gtk_widget_set_visible (widget, addr_enabled);
- gtk_widget_set_sensitive (page->dns_list, dns_enabled);
+ gtk_widget_set_sensitive (page->dns_entry, dns_enabled);
gtk_widget_set_sensitive (page->routes_list, routes_enabled);
gtk_widget_set_sensitive (page->never_default, routes_enabled);
@@ -343,93 +343,32 @@ add_address_section (CEPageIP4 *page)
}
static void
-add_dns_row (CEPageIP4 *page,
- const gchar *address)
-{
- GtkWidget *row;
- GtkWidget *row_box;
- GtkWidget *label;
- GtkWidget *widget;
- GtkWidget *delete_button;
- GtkWidget *image;
-
- row = gtk_list_box_row_new ();
-
- row_box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
- label = gtk_label_new (_("Server"));
- gtk_widget_set_halign (label, GTK_ALIGN_END);
- gtk_box_pack_start (GTK_BOX (row_box), label, FALSE, FALSE, 0);
- 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);
- g_object_set_data (G_OBJECT (row), "address", widget);
- gtk_entry_set_text (GTK_ENTRY (widget), address);
- gtk_widget_set_margin_start (widget, 10);
- gtk_widget_set_margin_end (widget, 10);
- gtk_widget_set_hexpand (widget, TRUE);
- gtk_box_pack_start (GTK_BOX (row_box), widget, TRUE, TRUE, 0);
-
- 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);
- image = gtk_image_new_from_icon_name ("user-trash-symbolic", GTK_ICON_SIZE_MENU);
- atk_object_set_name (gtk_widget_get_accessible (delete_button), _("Delete DNS Server"));
- gtk_button_set_image (GTK_BUTTON (delete_button), image);
- gtk_box_pack_start (GTK_BOX (row_box), delete_button, FALSE, FALSE, 0);
- g_object_set_data (G_OBJECT (row), "delete-button", delete_button);
-
- gtk_widget_set_margin_start (row_box, 10);
- gtk_widget_set_margin_end (row_box, 10);
- gtk_widget_set_margin_top (row_box, 10);
- gtk_widget_set_margin_bottom (row_box, 10);
- gtk_widget_set_halign (row_box, GTK_ALIGN_FILL);
-
- gtk_container_add (GTK_CONTAINER (row), row_box);
- gtk_widget_show_all (row);
- gtk_container_add (GTK_CONTAINER (page->dns_list), row);
-
- update_row_sensitivity (page, page->dns_list);
-}
-
-static void
-add_empty_dns_row (CEPageIP4 *page)
-{
- add_dns_row (page, "");
-}
-
-static void
add_dns_section (CEPageIP4 *page)
{
- GtkWidget *widget;
- GtkWidget *frame;
- GtkWidget *list;
+ GtkEntry *entry;
+ GString *string;
gint i;
- widget = GTK_WIDGET (gtk_builder_get_object (CE_PAGE (page)->builder, "dns_section"));
-
- frame = gtk_frame_new (NULL);
- gtk_container_add (GTK_CONTAINER (widget), frame);
- page->dns_list = list = gtk_list_box_new ();
- gtk_list_box_set_selection_mode (GTK_LIST_BOX (list), GTK_SELECTION_NONE);
- gtk_list_box_set_header_func (GTK_LIST_BOX (list), cc_list_box_update_header_func, NULL, NULL);
- gtk_list_box_set_sort_func (GTK_LIST_BOX (list), (GtkListBoxSortFunc)sort_first_last, NULL, NULL);
- gtk_container_add (GTK_CONTAINER (frame), list);
- page->auto_dns = GTK_SWITCH (gtk_builder_get_object (CE_PAGE (page)->builder, "auto_dns_switch"));
- gtk_switch_set_active (page->auto_dns, !nm_setting_ip_config_get_ignore_auto_dns (page->setting));
- g_signal_connect (page->auto_dns, "notify::active", G_CALLBACK (switch_toggled), page);
-
- add_section_toolbar (page, widget, G_CALLBACK (add_empty_dns_row));
+ page->dns_entry = GTK_WIDGET (gtk_builder_get_object (CE_PAGE (page)->builder, "dns_entry"));
+ entry = GTK_ENTRY (page->dns_entry);
+ string = g_string_new ("");
for (i = 0; i < nm_setting_ip_config_get_num_dns (page->setting); i++) {
const char *address;
address = nm_setting_ip_config_get_dns (page->setting, i);
- add_dns_row (page, address);
+
+ if (i > 0)
+ g_string_append (string, ", ");
+
+ g_string_append (string, address);
}
- if (nm_setting_ip_config_get_num_dns (page->setting) == 0)
- add_empty_dns_row (page);
- gtk_widget_show_all (widget);
+ gtk_entry_set_text (entry, string->str);
+
+ g_signal_connect_swapped (entry, "notify::text", G_CALLBACK (ce_page_changed), page);
+
+ g_string_free (string, TRUE);
}
static void
@@ -698,9 +637,12 @@ ui_to_setting (CEPageIP4 *page)
GPtrArray *addresses = NULL;
GPtrArray *dns_servers = NULL;
GPtrArray *routes = NULL;
+ GStrv dns_addresses = NULL;
GList *children, *l;
gboolean ret = TRUE;
const char *default_gateway = NULL;
+ gchar *dns_text = NULL;
+ guint i;
if (gtk_toggle_button_get_active (page->disabled)) {
method = NM_SETTING_IP4_CONFIG_METHOD_DISABLED;
@@ -789,37 +731,32 @@ ui_to_setting (CEPageIP4 *page)
}
dns_servers = g_ptr_array_new_with_free_func (g_free);
+ dns_text = g_strstrip (g_strdup (gtk_entry_get_text (GTK_ENTRY (page->dns_entry))));
if (g_str_equal (method, NM_SETTING_IP4_CONFIG_METHOD_AUTO) ||
g_str_equal (method, NM_SETTING_IP4_CONFIG_METHOD_MANUAL))
- children = gtk_container_get_children (GTK_CONTAINER (page->dns_list));
+ dns_addresses = g_strsplit_set (dns_text, ", ", -1);
else
- children = NULL;
+ dns_addresses = NULL;
- for (l = children; l; l = l->next) {
- GtkWidget *row = l->data;
- GtkEntry *entry;
+ for (i = 0; dns_addresses && dns_addresses[i]; i++) {
const gchar *text;
- entry = GTK_ENTRY (g_object_get_data (G_OBJECT (row), "address"));
- if (!entry)
- continue;
+ text = dns_addresses[i];
- text = gtk_entry_get_text (entry);
- if (!*text) {
- /* ignore empty rows */
- widget_unset_error (GTK_WIDGET (entry));
+ if (!text || !*text)
continue;
- }
- if (text && !nm_utils_ipaddr_valid (AF_INET, text)) {
- widget_set_error (GTK_WIDGET (entry));
+ if (!nm_utils_ipaddr_valid (AF_INET, text)) {
+ g_ptr_array_remove_range (dns_servers, 0, dns_servers->len);
+ widget_set_error (page->dns_entry);
ret = FALSE;
+ break;
} else {
- widget_unset_error (GTK_WIDGET (entry));
+ widget_unset_error (page->dns_entry);
g_ptr_array_add (dns_servers, g_strdup (text));
}
}
- g_list_free (children);
+ g_clear_pointer (&dns_addresses, g_strfreev);
if (dns_servers->len == 0) {
g_ptr_array_free (dns_servers, TRUE);
@@ -912,7 +849,7 @@ ui_to_setting (CEPageIP4 *page)
if (!ret)
goto out;
- ignore_auto_dns = !gtk_switch_get_active (page->auto_dns);
+ ignore_auto_dns = dns_servers && dns_servers->len > 0;
ignore_auto_routes = !gtk_switch_get_active (page->auto_routes);
never_default = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (page->never_default));
@@ -937,6 +874,8 @@ out:
if (routes)
g_ptr_array_free (routes, TRUE);
+ g_clear_pointer (&dns_text, g_free);
+
return ret;
}
diff --git a/panels/network/connection-editor/ce-page-ip4.h b/panels/network/connection-editor/ce-page-ip4.h
index 07aa1d7..100075f 100644
--- a/panels/network/connection-editor/ce-page-ip4.h
+++ b/panels/network/connection-editor/ce-page-ip4.h
@@ -47,8 +47,7 @@ struct _CEPageIP4
GtkToggleButton *disabled;
GtkWidget *address_list;
- GtkSwitch *auto_dns;
- GtkWidget *dns_list;
+ GtkWidget *dns_entry;
GtkSwitch *auto_routes;
GtkWidget *routes_list;
GtkWidget *never_default;
diff --git a/panels/network/connection-editor/ce-page-ip6.c b/panels/network/connection-editor/ce-page-ip6.c
index c67f4a1..57fca90 100644
--- a/panels/network/connection-editor/ce-page-ip6.c
+++ b/panels/network/connection-editor/ce-page-ip6.c
@@ -70,7 +70,7 @@ method_changed (GtkToggleButton *button, CEPageIP6 *page)
widget = GTK_WIDGET (gtk_builder_get_object (CE_PAGE (page)->builder, "address_section"));
gtk_widget_set_visible (widget, addr_enabled);
- gtk_widget_set_sensitive (page->dns_list, dns_enabled);
+ gtk_widget_set_sensitive (page->dns_entry, dns_enabled);
gtk_widget_set_sensitive (page->routes_list, routes_enabled);
gtk_widget_set_sensitive (page->never_default, routes_enabled);
@@ -307,94 +307,33 @@ add_address_section (CEPageIP6 *page)
}
static void
-add_dns_row (CEPageIP6 *page,
- const gchar *address)
-{
- GtkWidget *row;
- GtkWidget *row_box;
- GtkWidget *label;
- GtkWidget *widget;
- GtkWidget *delete_button;
- GtkWidget *image;
-
- row = gtk_list_box_row_new ();
- gtk_widget_set_can_focus (row, FALSE);
-
- row_box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
- label = gtk_label_new (_("Server"));
- gtk_widget_set_halign (label, GTK_ALIGN_END);
- gtk_box_pack_start (GTK_BOX (row_box), label, FALSE, FALSE, 0);
- 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);
- g_object_set_data (G_OBJECT (row), "address", widget);
- gtk_entry_set_text (GTK_ENTRY (widget), address);
- gtk_widget_set_margin_start (widget, 10);
- gtk_widget_set_margin_end (widget, 10);
- gtk_widget_set_hexpand (widget, TRUE);
- gtk_box_pack_start (GTK_BOX (row_box), widget, TRUE, TRUE, 0);
-
- 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);
- image = gtk_image_new_from_icon_name ("user-trash-symbolic", GTK_ICON_SIZE_MENU);
- atk_object_set_name (gtk_widget_get_accessible (delete_button), _("Delete DNS Server"));
- gtk_button_set_image (GTK_BUTTON (delete_button), image);
- gtk_box_pack_start (GTK_BOX (row_box), delete_button, FALSE, FALSE, 0);
- g_object_set_data (G_OBJECT (row), "delete-button", delete_button);
-
- gtk_widget_set_margin_start (row_box, 10);
- gtk_widget_set_margin_end (row_box, 10);
- gtk_widget_set_margin_top (row_box, 10);
- gtk_widget_set_margin_bottom (row_box, 10);
- gtk_widget_set_halign (row_box, GTK_ALIGN_FILL);
-
- gtk_container_add (GTK_CONTAINER (row), row_box);
- gtk_widget_show_all (row);
- gtk_container_add (GTK_CONTAINER (page->dns_list), row);
-
- update_row_sensitivity (page, page->dns_list);
-}
-
-static void
-add_empty_dns_row (CEPageIP6 *page)
-{
- add_dns_row (page, "");
-}
-
-static void
add_dns_section (CEPageIP6 *page)
{
- GtkWidget *widget;
- GtkWidget *frame;
- GtkWidget *list;
+ GtkEntry *entry;
+ GString *string;
gint i;
- widget = GTK_WIDGET (gtk_builder_get_object (CE_PAGE (page)->builder, "dns_section"));
-
- frame = gtk_frame_new (NULL);
- gtk_container_add (GTK_CONTAINER (widget), frame);
- page->dns_list = list = gtk_list_box_new ();
- gtk_list_box_set_selection_mode (GTK_LIST_BOX (list), GTK_SELECTION_NONE);
- gtk_list_box_set_header_func (GTK_LIST_BOX (list), cc_list_box_update_header_func, NULL, NULL);
- gtk_list_box_set_sort_func (GTK_LIST_BOX (list), (GtkListBoxSortFunc)sort_first_last, NULL, NULL);
- gtk_container_add (GTK_CONTAINER (frame), list);
- page->auto_dns = GTK_SWITCH (gtk_builder_get_object (CE_PAGE (page)->builder, "auto_dns_switch"));
- gtk_switch_set_active (page->auto_dns, !nm_setting_ip_config_get_ignore_auto_dns (page->setting));
- g_signal_connect (page->auto_dns, "notify::active", G_CALLBACK (switch_toggled), page);
-
- add_section_toolbar (page, widget, G_CALLBACK (add_empty_dns_row));
+ page->dns_entry = GTK_WIDGET (gtk_builder_get_object (CE_PAGE (page)->builder, "dns_entry"));
+ entry = GTK_ENTRY (page->dns_entry);
+ string = g_string_new ("");
for (i = 0; i < nm_setting_ip_config_get_num_dns (page->setting); i++) {
const char *address;
address = nm_setting_ip_config_get_dns (page->setting, i);
- add_dns_row (page, address);
+
+ if (i > 0)
+ g_string_append (string, ", ");
+
+ g_string_append (string, address);
+
}
- if (nm_setting_ip_config_get_num_dns (page->setting) == 0)
- add_empty_dns_row (page);
- gtk_widget_show_all (widget);
+ gtk_entry_set_text (entry, string->str);
+
+ g_signal_connect_swapped (page->dns_entry, "notify::text", G_CALLBACK (ce_page_changed), page);
+
+ g_string_free (string, TRUE);
}
static void
@@ -636,6 +575,9 @@ ui_to_setting (CEPageIP6 *page)
gboolean never_default;
GList *children, *l;
gboolean ret = TRUE;
+ GStrv dns_addresses = NULL;
+ gchar *dns_text = NULL;
+ guint i;
if (gtk_toggle_button_get_active (page->disabled)) {
method = NM_SETTING_IP6_CONFIG_METHOD_IGNORE;
@@ -724,39 +666,34 @@ ui_to_setting (CEPageIP6 *page)
g_list_free (children);
nm_setting_ip_config_clear_dns (page->setting);
+ dns_text = g_strstrip (g_strdup (gtk_entry_get_text (GTK_ENTRY (page->dns_entry))));
+
if (g_str_equal (method, NM_SETTING_IP6_CONFIG_METHOD_AUTO) ||
g_str_equal (method, NM_SETTING_IP6_CONFIG_METHOD_DHCP) ||
g_str_equal (method, NM_SETTING_IP6_CONFIG_METHOD_MANUAL))
- children = gtk_container_get_children (GTK_CONTAINER (page->dns_list));
+ dns_addresses = g_strsplit_set (dns_text, ", ", -1);
else
- children = NULL;
+ dns_addresses = NULL;
- for (l = children; l; l = l->next) {
- GtkWidget *row = l->data;
- GtkEntry *entry;
+ for (i = 0; dns_addresses && dns_addresses[i]; i++) {
const gchar *text;
struct in6_addr tmp_addr;
- entry = GTK_ENTRY (g_object_get_data (G_OBJECT (row), "address"));
- if (!entry)
- continue;
+ text = dns_addresses[i];
- text = gtk_entry_get_text (entry);
- if (!*text) {
- /* ignore empty rows */
- widget_unset_error (GTK_WIDGET (entry));
+ if (!text || !*text)
continue;
- }
if (inet_pton (AF_INET6, text, &tmp_addr) <= 0) {
- widget_set_error (GTK_WIDGET (entry));
+ g_clear_pointer (&dns_addresses, g_strfreev);
+ widget_set_error (page->dns_entry);
ret = FALSE;
+ break;
} else {
- widget_unset_error (GTK_WIDGET (entry));
+ widget_unset_error (page->dns_entry);
nm_setting_ip_config_add_dns (page->setting, text);
}
}
- g_list_free (children);
nm_setting_ip_config_clear_routes (page->setting);
if (g_str_equal (method, NM_SETTING_IP6_CONFIG_METHOD_AUTO) ||
@@ -843,7 +780,7 @@ ui_to_setting (CEPageIP6 *page)
if (!ret)
goto out;
- ignore_auto_dns = !gtk_switch_get_active (page->auto_dns);
+ ignore_auto_dns = dns_addresses && g_strv_length (dns_addresses) > 0;
ignore_auto_routes = !gtk_switch_get_active (page->auto_routes);
never_default = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (page->never_default));
@@ -855,6 +792,8 @@ ui_to_setting (CEPageIP6 *page)
NULL);
out:
+ g_clear_pointer (&dns_addresses, g_strfreev);
+ g_clear_pointer (&dns_text, g_free);
return ret;
}
diff --git a/panels/network/connection-editor/ce-page-ip6.h b/panels/network/connection-editor/ce-page-ip6.h
index 93ec846..b06464b 100644
--- a/panels/network/connection-editor/ce-page-ip6.h
+++ b/panels/network/connection-editor/ce-page-ip6.h
@@ -47,8 +47,7 @@ struct _CEPageIP6
GtkToggleButton *disabled;
GtkWidget *address_list;
- GtkSwitch *auto_dns;
- GtkWidget *dns_list;
+ GtkWidget *dns_entry;
GtkSwitch *auto_routes;
GtkWidget *routes_list;
GtkWidget *never_default;
diff --git a/panels/network/connection-editor/ip4-page.ui b/panels/network/connection-editor/ip4-page.ui
index 61e7afd..fa9e392 100644
--- a/panels/network/connection-editor/ip4-page.ui
+++ b/panels/network/connection-editor/ip4-page.ui
@@ -114,82 +114,45 @@
</packing>
</child>
<child>
- <object class="GtkBox" id="box1">
+ <object class="GtkLabel" id="heading_dns">
<property name="visible">True</property>
<property name="can_focus">False</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">DNS</property>
<property name="margin_top">24</property>
<property name="margin_bottom">6</property>
- <property name="spacing">6</property>
- <child>
- <object class="GtkLabel" id="heading_dns">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="xalign">0</property>
- <property name="label" translatable="yes">DNS</property>
- <attributes>
- <attribute name="weight" value="bold"/>
- </attributes>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="label1">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="hexpand">True</property>
- <property name="xalign">1</property>
- <property name="label" translatable="yes">Automatic</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkSwitch" id="auto_dns_switch">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="halign">end</property>
- <child internal-child="accessible">
- <object class="AtkObject" id="auto_dns_switch-accessible">
- <property name="accessible-name" translatable="yes">Automatic DNS</property>
- </object>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">2</property>
- </packing>
- </child>
+ <attributes>
+ <attribute name="weight" value="bold"/>
+ </attributes>
</object>
<packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
<child>
- <object class="GtkBox" id="dns_section">
+ <object class="GtkEntry" id="dns_entry">
<property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="orientation">vertical</property>
- <child>
- <placeholder/>
- </child>
- </object>
+ <property name="can_focus">True</property>
+ </object>
<packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
<property name="position">3</property>
</packing>
</child>
<child>
+ <object class="GtkLabel">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Separate IP addresses with commas</property>
+ <style>
+ <class name="dim-label" />
+ </style>
+ <attributes>
+ <attribute name="scale" value="0.8"/>
+ </attributes>
+ </object>
+ </child>
+ <child>
<object class="GtkBox" id="box3">
<property name="visible">True</property>
<property name="can_focus">False</property>
@@ -246,7 +209,7 @@
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
- <property name="position">4</property>
+ <property name="position">5</property>
</packing>
</child>
<child>
@@ -261,7 +224,7 @@
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
- <property name="position">5</property>
+ <property name="position">6</property>
</packing>
</child>
<child>
diff --git a/panels/network/connection-editor/ip6-page.ui b/panels/network/connection-editor/ip6-page.ui
index 0c44f41..cb4e356 100644
--- a/panels/network/connection-editor/ip6-page.ui
+++ b/panels/network/connection-editor/ip6-page.ui
@@ -128,82 +128,43 @@
</packing>
</child>
<child>
- <object class="GtkBox" id="box1">
+ <object class="GtkLabel" id="heading_dns">
<property name="visible">True</property>
<property name="can_focus">False</property>
- <property name="margin_top">24</property>
- <property name="margin_bottom">6</property>
- <property name="spacing">6</property>
- <child>
- <object class="GtkLabel" id="heading_dns">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="xalign">0</property>
- <property name="label" translatable="yes">DNS</property>
- <attributes>
- <attribute name="weight" value="bold"/>
- </attributes>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="label1">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="hexpand">True</property>
- <property name="xalign">1</property>
- <property name="label" translatable="yes">Automatic</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkSwitch" id="auto_dns_switch">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="halign">end</property>
- <child internal-child="accessible">
- <object class="AtkObject" id="auto_dns_switch-accessible">
- <property name="accessible-name" translatable="yes">Automatic DNS</property>
- </object>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">2</property>
- </packing>
- </child>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">DNS</property>
+ <attributes>
+ <attribute name="weight" value="bold"/>
+ </attributes>
</object>
<packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
<child>
- <object class="GtkBox" id="dns_section">
+ <object class="GtkEntry" id="dns_entry">
<property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="orientation">vertical</property>
- <child>
- <placeholder/>
- </child>
- </object>
+ <property name="can_focus">True</property>
+ </object>
<packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
<property name="position">3</property>
</packing>
</child>
<child>
+ <object class="GtkLabel">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Separate IP addresses with commas</property>
+ <style>
+ <class name="dim-label" />
+ </style>
+ <attributes>
+ <attribute name="scale" value="0.8"/>
+ </attributes>
+ </object>
+ </child>
+ <child>
<object class="GtkBox" id="box3">
<property name="visible">True</property>
<property name="can_focus">False</property>
@@ -260,7 +221,7 @@
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
- <property name="position">4</property>
+ <property name="position">5</property>
</packing>
</child>
<child>
@@ -275,7 +236,7 @@
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
- <property name="position">5</property>
+ <property name="position">6</property>
</packing>
</child>
<child>
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]