diff options
author | Jiří Klimeš <jklimes@redhat.com> | 2012-06-27 11:44:47 +0200 |
---|---|---|
committer | Jiří Klimeš <jklimes@redhat.com> | 2014-05-15 09:06:48 +0200 |
commit | 77b29edd72fb56c5a4bcf1f7d15104391c462d85 (patch) | |
tree | 0c71d1fcd5d4cf48a471af52b61e9cd49a9a64a5 | |
parent | f35b9267d1309d2b69c946457a158c2379dd0e39 (diff) | |
download | network-manager-applet-77b29edd72fb56c5a4bcf1f7d15104391c462d85.tar.gz |
editor: add GUI for IPv6 privacy extensions (bgo #633233)
Combobox in 'IPv6 Settings' tab.
Rebased to master by Dan Winship.
https://bugzilla.gnome.org/show_bug.cgi?id=633233
-rw-r--r-- | src/connection-editor/ce-page-ip6.ui | 53 | ||||
-rw-r--r-- | src/connection-editor/page-ip6.c | 56 |
2 files changed, 108 insertions, 1 deletions
diff --git a/src/connection-editor/ce-page-ip6.ui b/src/connection-editor/ce-page-ip6.ui index a1005830..b709dc8e 100644 --- a/src/connection-editor/ce-page-ip6.ui +++ b/src/connection-editor/ce-page-ip6.ui @@ -24,6 +24,23 @@ </row> </data> </object> + <object class="GtkListStore" id="model2"> + <columns> + <!-- column-name gchararray --> + <column type="gchararray"/> + </columns> + <data> + <row> + <col id="0" translatable="yes">Disabled</col> + </row> + <row> + <col id="0" translatable="yes">Enabled (prefer public address)</col> + </row> + <row> + <col id="0" translatable="yes">Enabled (prefer temporary address)</col> + </row> + </data> + </object> <object class="GtkVBox" id="IP6Page"> <property name="visible">True</property> <property name="can_focus">False</property> @@ -190,7 +207,7 @@ <object class="GtkTable" id="table8"> <property name="visible">True</property> <property name="can_focus">False</property> - <property name="n_rows">2</property> + <property name="n_rows">3</property> <property name="n_columns">2</property> <property name="column_spacing">12</property> <property name="row_spacing">6</property> @@ -252,6 +269,40 @@ <property name="y_options"/> </packing> </child> + <child> + <object class="GtkLabel" id="ip6_privacy_label"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="label" translatable="yes">IPv6 _privacy extensions:</property> + <property name="use_underline">True</property> + <property name="mnemonic_widget">ip6_privacy_combo</property> + </object> + <packing> + <property name="top_attach">2</property> + <property name="bottom_attach">3</property> + <property name="x_options">GTK_FILL</property> + <property name="y_options"></property> + </packing> + </child> + <child> + <object class="GtkComboBox" id="ip6_privacy_combo"> + <property name="visible">True</property> + <property name="model">model2</property> + <child> + <object class="GtkCellRendererText" id="renderer2"/> + <attributes> + <attribute name="text">0</attribute> + </attributes> + </child> + </object> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="top_attach">2</property> + <property name="bottom_attach">3</property> + <property name="y_options"></property> + </packing> + </child> </object> <packing> <property name="expand">False</property> diff --git a/src/connection-editor/page-ip6.c b/src/connection-editor/page-ip6.c index 1713a7f4..7dfea809 100644 --- a/src/connection-editor/page-ip6.c +++ b/src/connection-editor/page-ip6.c @@ -81,6 +81,10 @@ typedef struct { /* Routes */ GtkButton *routes_button; + /* IPv6 privacy extensions combo */ + GtkWidget *ip6_privacy_label; + GtkComboBox *ip6_privacy_combo; + /* IPv6 required */ GtkCheckButton *ip6_required; @@ -108,6 +112,10 @@ typedef struct { #define IP6_METHOD_LINK_LOCAL 5 #define IP6_METHOD_SHARED 6 +#define IP6_PRIVACY_DISABLED 0 +#define IP6_PRIVACY_PREFER_PUBLIC 1 +#define IP6_PRIVACY_PREFER_TEMP 2 + static void ip6_private_init (CEPageIP6 *self, NMConnection *connection) { @@ -227,6 +235,9 @@ ip6_private_init (CEPageIP6 *self, NMConnection *connection) priv->dns_searches_label = GTK_WIDGET (gtk_builder_get_object (builder, "ip6_dns_searches_label")); priv->dns_searches = GTK_ENTRY (gtk_builder_get_object (builder, "ip6_dns_searches_entry")); + priv->ip6_privacy_label = GTK_WIDGET (gtk_builder_get_object (builder, "ip6_privacy_label")); + priv->ip6_privacy_combo = GTK_COMBO_BOX (gtk_builder_get_object (builder, "ip6_privacy_combo")); + priv->ip6_required = GTK_CHECK_BUTTON (gtk_builder_get_object (builder, "ip6_required_checkbutton")); /* Hide IP6-require button if it'll never be used for a particular method */ if ( priv->connection_type == NM_TYPE_SETTING_VPN @@ -246,6 +257,7 @@ method_changed (GtkComboBox *combo, gpointer user_data) gboolean addr_enabled = FALSE; gboolean dns_enabled = FALSE; gboolean routes_enabled = FALSE; + gboolean ip6_privacy_enabled = FALSE; gboolean ip6_required_enabled = TRUE; gboolean method_auto = FALSE; GtkTreeIter iter; @@ -261,10 +273,12 @@ method_changed (GtkComboBox *combo, gpointer user_data) routes_enabled = TRUE; dns_enabled = TRUE; method_auto = TRUE; + ip6_privacy_enabled = TRUE; break; case IP6_METHOD_AUTO_ADDRESSES: addr_enabled = FALSE; dns_enabled = routes_enabled = TRUE; + ip6_privacy_enabled = TRUE; break; case IP6_METHOD_AUTO_DHCP_ONLY: addr_enabled = FALSE; @@ -309,6 +323,9 @@ method_changed (GtkComboBox *combo, gpointer user_data) if (!dns_enabled) gtk_entry_set_text (priv->dns_searches, ""); + gtk_widget_set_sensitive (priv->ip6_privacy_label, ip6_privacy_enabled); + gtk_widget_set_sensitive (GTK_WIDGET (priv->ip6_privacy_combo), ip6_privacy_enabled); + gtk_widget_set_sensitive (GTK_WIDGET (priv->ip6_required), ip6_required_enabled); gtk_widget_set_sensitive (GTK_WIDGET (priv->routes_button), routes_enabled); @@ -343,6 +360,8 @@ populate_ui (CEPageIP6 *self) GtkListStore *store; GtkTreeIter model_iter; int method = IP6_METHOD_AUTO; + NMSettingIP6ConfigPrivacy ip6_privacy; + int ip6_privacy_idx = IP6_PRIVACY_DISABLED; GString *string = NULL; SetMethodInfo info; const char *str_method; @@ -437,6 +456,24 @@ populate_ui (CEPageIP6 *self) gtk_entry_set_text (priv->dns_searches, string->str); g_string_free (string, TRUE); + /* IPv6 privacy extensions */ + ip6_privacy = nm_setting_ip6_config_get_ip6_privacy (setting); + switch (ip6_privacy) { + case NM_SETTING_IP6_CONFIG_PRIVACY_DISABLED: + ip6_privacy_idx = IP6_PRIVACY_DISABLED; + break; + case NM_SETTING_IP6_CONFIG_PRIVACY_PREFER_PUBLIC_ADDR: + ip6_privacy_idx = IP6_PRIVACY_PREFER_PUBLIC; + break; + case NM_SETTING_IP6_CONFIG_PRIVACY_PREFER_TEMP_ADDR: + ip6_privacy_idx = IP6_PRIVACY_PREFER_TEMP; + break; + default: + ip6_privacy_idx = IP6_PRIVACY_DISABLED; + break; + } + gtk_combo_box_set_active (priv->ip6_privacy_combo, ip6_privacy_idx); + /* IPv6 required */ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (priv->ip6_required), !nm_setting_ip6_config_get_may_fail (setting)); @@ -938,6 +975,7 @@ finish_setup (CEPageIP6 *self, gpointer unused, GError *error, gpointer user_dat g_signal_connect_swapped (priv->dns_servers, "changed", G_CALLBACK (ce_page_changed), self); g_signal_connect (priv->dns_servers, "insert-text", G_CALLBACK (dns_servers_filter_cb), self); g_signal_connect_swapped (priv->dns_searches, "changed", G_CALLBACK (ce_page_changed), self); + g_signal_connect_swapped (priv->ip6_privacy_combo, "changed", G_CALLBACK (ce_page_changed), self); method_changed (priv->method, self); g_signal_connect (priv->method, "changed", G_CALLBACK (method_changed), self); @@ -1005,6 +1043,7 @@ ui_to_setting (CEPageIP6 *self) gboolean ignore_auto_dns = FALSE; char **items = NULL, **iter; gboolean may_fail; + NMSettingIP6ConfigPrivacy ip6_privacy; /* Method */ if (gtk_combo_box_get_active_iter (priv->method, &tree_iter)) { @@ -1141,9 +1180,26 @@ ui_to_setting (CEPageIP6 *self) g_strfreev (items); } + /* IPv6 Privacy */ + switch (gtk_combo_box_get_active (priv->ip6_privacy_combo)) { + case IP6_PRIVACY_DISABLED: + ip6_privacy = NM_SETTING_IP6_CONFIG_PRIVACY_DISABLED; + break; + case IP6_PRIVACY_PREFER_PUBLIC: + ip6_privacy = NM_SETTING_IP6_CONFIG_PRIVACY_PREFER_PUBLIC_ADDR; + break; + case IP6_PRIVACY_PREFER_TEMP: + ip6_privacy = NM_SETTING_IP6_CONFIG_PRIVACY_PREFER_TEMP_ADDR; + break; + default: + ip6_privacy = NM_SETTING_IP6_CONFIG_PRIVACY_UNKNOWN; + break; + } + may_fail = !gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (priv->ip6_required)); g_object_set (G_OBJECT (priv->setting), NM_SETTING_IP6_CONFIG_MAY_FAIL, may_fail, + NM_SETTING_IP6_CONFIG_IP6_PRIVACY, ip6_privacy, NULL); valid = TRUE; |