summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJiří Klimeš <jklimes@redhat.com>2012-06-27 11:44:47 +0200
committerJiří Klimeš <jklimes@redhat.com>2014-05-15 09:06:48 +0200
commit77b29edd72fb56c5a4bcf1f7d15104391c462d85 (patch)
tree0c71d1fcd5d4cf48a471af52b61e9cd49a9a64a5
parentf35b9267d1309d2b69c946457a158c2379dd0e39 (diff)
downloadnetwork-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.ui53
-rw-r--r--src/connection-editor/page-ip6.c56
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;