forked from pool/gnome-control-center
402 lines
15 KiB
Diff
402 lines
15 KiB
Diff
From 4cb70bde30d3dacb45a0674aae6f22bd739a2e3b Mon Sep 17 00:00:00 2001
|
|
From: Federico Mena Quintero <federico@novell.com>
|
|
Date: Fri, 13 Jun 2008 03:55:41 -0500
|
|
Subject: [PATCH 1/2] Integrate GNOME's proxy configuration with openSUSE's
|
|
This is documented in http://en.opensuse.org/GNOME/Proxy_configuration
|
|
|
|
Signed-off-by: Federico Mena Quintero <federico@novell.com>
|
|
---
|
|
capplets/network/gnome-network-preferences.c | 149 ++++++++++++++++------
|
|
capplets/network/gnome-network-preferences.glade | 24 +++-
|
|
2 files changed, 129 insertions(+), 44 deletions(-)
|
|
|
|
diff --git a/capplets/network/gnome-network-preferences.c b/capplets/network/gnome-network-preferences.c
|
|
index 9176476..11fd88e 100644
|
|
--- a/capplets/network/gnome-network-preferences.c
|
|
+++ b/capplets/network/gnome-network-preferences.c
|
|
@@ -32,19 +32,11 @@
|
|
#include "capplet-util.h"
|
|
#include "gconf-property-editor.h"
|
|
|
|
-enum ProxyMode
|
|
-{
|
|
- PROXYMODE_NONE,
|
|
- PROXYMODE_MANUAL,
|
|
- PROXYMODE_AUTO
|
|
-};
|
|
-
|
|
-static GEnumValue proxytype_values[] = {
|
|
- { PROXYMODE_NONE, "PROXYMODE_NONE", "none"},
|
|
- { PROXYMODE_MANUAL, "PROXYMODE_MANUAL", "manual"},
|
|
- { PROXYMODE_AUTO, "PROXYMODE_AUTO", "auto"},
|
|
- { 0, NULL, NULL }
|
|
-};
|
|
+/* Novell extension */
|
|
+#define KEY_USE_SYSTEM_SETTINGS "/system/proxy/use_system_settings" /* string */
|
|
+#define VAL_USE_SYSTEM_SETTINGS_ONLY_IF_NOT_SET "only_if_mode_not_set"
|
|
+#define VAL_USE_SYSTEM_SETTINGS_SYSTEM_VALUES "system_values"
|
|
+#define VAL_USE_SYSTEM_SETTINGS_USER_VALUES "user_values"
|
|
|
|
#define USE_PROXY_KEY "/system/http_proxy/use_http_proxy"
|
|
#define USE_SAME_PROXY_KEY "/system/http_proxy/use_same_proxy"
|
|
@@ -363,29 +355,40 @@ static void
|
|
proxy_mode_radiobutton_clicked_cb (GtkWidget *widget,
|
|
GladeXML *dialog)
|
|
{
|
|
- GSList *mode_group;
|
|
- int mode;
|
|
- GConfClient *client;
|
|
-
|
|
- if (!gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(widget)))
|
|
- return;
|
|
-
|
|
- mode_group = g_slist_copy (gtk_radio_button_get_group
|
|
- (GTK_RADIO_BUTTON (WID ("none_radiobutton"))));
|
|
- mode_group = g_slist_reverse (mode_group);
|
|
- mode = g_slist_index (mode_group, widget);
|
|
- g_slist_free (mode_group);
|
|
-
|
|
- gtk_widget_set_sensitive (WID ("manual_box"),
|
|
- mode == PROXYMODE_MANUAL);
|
|
- gtk_widget_set_sensitive (WID ("same_proxy_checkbutton"),
|
|
- mode == PROXYMODE_MANUAL);
|
|
- gtk_widget_set_sensitive (WID ("auto_box"),
|
|
- mode == PROXYMODE_AUTO);
|
|
+ GConfClient *client;
|
|
+ gboolean manual_box_sensitive, auto_box_sensitive;
|
|
+
|
|
+ if (!gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(widget)))
|
|
+ return;
|
|
+
|
|
client = gconf_client_get_default ();
|
|
- gconf_client_set_bool (client, USE_PROXY_KEY,
|
|
- mode == PROXYMODE_AUTO || mode == PROXYMODE_MANUAL, NULL);
|
|
- g_object_unref (client);
|
|
+ manual_box_sensitive = auto_box_sensitive = FALSE;
|
|
+
|
|
+ if (widget == WID ("system_radiobutton")) {
|
|
+ gconf_client_set_string (client, KEY_USE_SYSTEM_SETTINGS, VAL_USE_SYSTEM_SETTINGS_SYSTEM_VALUES, NULL);
|
|
+ } else if (widget == WID ("none_radiobutton")) {
|
|
+ gconf_client_set_string (client, KEY_USE_SYSTEM_SETTINGS, VAL_USE_SYSTEM_SETTINGS_USER_VALUES, NULL);
|
|
+ gconf_client_set_string (client, PROXY_MODE_KEY, "none", NULL);
|
|
+ gconf_client_set_bool (client, USE_PROXY_KEY, FALSE, NULL);
|
|
+ } else if (widget == WID ("manual_radiobutton")) {
|
|
+ manual_box_sensitive = TRUE;
|
|
+
|
|
+ gconf_client_set_string (client, KEY_USE_SYSTEM_SETTINGS, VAL_USE_SYSTEM_SETTINGS_USER_VALUES, NULL);
|
|
+ gconf_client_set_string (client, PROXY_MODE_KEY, "manual", NULL);
|
|
+ gconf_client_set_bool (client, USE_PROXY_KEY, TRUE, NULL);
|
|
+ } else if (widget == WID ("auto_radiobutton")) {
|
|
+ auto_box_sensitive = TRUE;
|
|
+
|
|
+ gconf_client_set_string (client, KEY_USE_SYSTEM_SETTINGS, VAL_USE_SYSTEM_SETTINGS_USER_VALUES, NULL);
|
|
+ gconf_client_set_string (client, PROXY_MODE_KEY, "auto", NULL);
|
|
+ gconf_client_set_bool (client, USE_PROXY_KEY, TRUE, NULL);
|
|
+ }
|
|
+
|
|
+ gtk_widget_set_sensitive (WID ("manual_box"), manual_box_sensitive);
|
|
+ gtk_widget_set_sensitive (WID ("same_proxy_checkbutton"), manual_box_sensitive);
|
|
+ gtk_widget_set_sensitive (WID ("auto_box"), auto_box_sensitive);
|
|
+
|
|
+ g_object_unref (client);
|
|
}
|
|
|
|
static void
|
|
@@ -399,34 +402,96 @@ connect_sensitivity_signals (GladeXML *dialog, GSList *mode_group)
|
|
}
|
|
}
|
|
|
|
+static GtkWidget *
|
|
+get_radio_for_mode (GladeXML *dialog, const char *mode_str)
|
|
+{
|
|
+ if (!mode_str)
|
|
+ return WID ("none_radiobutton");
|
|
+ else if (strcmp (mode_str, "none") == 0)
|
|
+ return WID ("none_radiobutton");
|
|
+ else if (strcmp (mode_str, "manual") == 0)
|
|
+ return WID ("manual_radiobutton");
|
|
+ else if (strcmp (mode_str, "auto") == 0)
|
|
+ return WID ("auto_radiobutton");
|
|
+ else
|
|
+ return WID ("none_radiobutton");
|
|
+}
|
|
+
|
|
+static void
|
|
+mode_set_initial_value (GladeXML *dialog, GConfClient *client)
|
|
+{
|
|
+ char *use_system_settings;
|
|
+ GConfValue *mode_value;
|
|
+ gboolean use_system_if_mode_not_set;
|
|
+ gboolean use_mode;
|
|
+ GtkWidget *radiobutton;
|
|
+
|
|
+ radiobutton = NULL;
|
|
+
|
|
+ use_system_settings = gconf_client_get_string (client, KEY_USE_SYSTEM_SETTINGS, NULL);
|
|
+ mode_value = gconf_client_get_without_default (client, PROXY_MODE_KEY, NULL);
|
|
+
|
|
+ use_system_if_mode_not_set = FALSE;
|
|
+ use_mode = FALSE;
|
|
+
|
|
+ if (!use_system_settings)
|
|
+ use_system_if_mode_not_set = TRUE;
|
|
+ else {
|
|
+ if (strcmp (use_system_settings, VAL_USE_SYSTEM_SETTINGS_ONLY_IF_NOT_SET) == 0)
|
|
+ use_system_if_mode_not_set = TRUE;
|
|
+ else if (strcmp (use_system_settings, VAL_USE_SYSTEM_SETTINGS_SYSTEM_VALUES) == 0)
|
|
+ radiobutton = WID ("system_radiobutton");
|
|
+ else if (strcmp (use_system_settings, VAL_USE_SYSTEM_SETTINGS_USER_VALUES) == 0)
|
|
+ use_mode = TRUE;
|
|
+
|
|
+ g_free (use_system_settings);
|
|
+ }
|
|
+
|
|
+ if (use_system_if_mode_not_set) {
|
|
+ if (mode_value)
|
|
+ use_mode = TRUE;
|
|
+ else
|
|
+ radiobutton = WID ("system_radiobutton");
|
|
+ }
|
|
+
|
|
+ if (use_mode) {
|
|
+ if (!mode_value || mode_value->type != GCONF_VALUE_STRING)
|
|
+ radiobutton = WID ("none_radiobutton");
|
|
+ else
|
|
+ radiobutton = get_radio_for_mode (dialog, gconf_value_get_string (mode_value));
|
|
+ }
|
|
+
|
|
+ if (radiobutton)
|
|
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (radiobutton), TRUE);
|
|
+
|
|
+ if (mode_value)
|
|
+ gconf_value_free (mode_value);
|
|
+}
|
|
+
|
|
static void
|
|
setup_dialog (GladeXML *dialog)
|
|
{
|
|
GConfPropertyEditor *peditor;
|
|
GSList *mode_group;
|
|
- GType mode_type = 0;
|
|
GConfClient *client;
|
|
gint port_value;
|
|
|
|
- mode_type = g_enum_register_static ("NetworkPreferencesProxyType",
|
|
- proxytype_values);
|
|
|
|
/* There's a bug in peditors that cause them to not initialize the entry
|
|
* correctly. */
|
|
client = gconf_client_get_default ();
|
|
|
|
/* Hackety hack */
|
|
+ gtk_label_set_use_markup (GTK_LABEL (GTK_BIN (WID ("system_radiobutton"))->child), TRUE);
|
|
gtk_label_set_use_markup (GTK_LABEL (GTK_BIN (WID ("none_radiobutton"))->child), TRUE);
|
|
gtk_label_set_use_markup (GTK_LABEL (GTK_BIN (WID ("manual_radiobutton"))->child), TRUE);
|
|
gtk_label_set_use_markup (GTK_LABEL (GTK_BIN (WID ("auto_radiobutton"))->child), TRUE);
|
|
|
|
/* Mode */
|
|
- mode_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (WID ("none_radiobutton")));
|
|
+ mode_set_initial_value (dialog, client);
|
|
+ mode_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (WID ("system_radiobutton")));
|
|
connect_sensitivity_signals (dialog, mode_group);
|
|
|
|
- peditor = GCONF_PROPERTY_EDITOR (gconf_peditor_new_select_radio_with_enum (NULL,
|
|
- PROXY_MODE_KEY, mode_group, mode_type,
|
|
- TRUE, NULL));
|
|
|
|
/* Use same proxy for all protocols */
|
|
peditor = GCONF_PROPERTY_EDITOR (gconf_peditor_new_boolean (NULL,
|
|
diff --git a/capplets/network/gnome-network-preferences.glade b/capplets/network/gnome-network-preferences.glade
|
|
index 1ab334e..d37baec 100644
|
|
--- a/capplets/network/gnome-network-preferences.glade
|
|
+++ b/capplets/network/gnome-network-preferences.glade
|
|
@@ -85,6 +85,25 @@
|
|
<property name="spacing">18</property>
|
|
|
|
<child>
|
|
+ <widget class="GtkRadioButton" id="system_radiobutton">
|
|
+ <property name="visible">True</property>
|
|
+ <property name="can_focus">True</property>
|
|
+ <property name="label" translatable="yes"><b>Use the s_ystem's proxy settings</b></property>
|
|
+ <property name="use_underline">True</property>
|
|
+ <property name="relief">GTK_RELIEF_NORMAL</property>
|
|
+ <property name="focus_on_click">True</property>
|
|
+ <property name="active">False</property>
|
|
+ <property name="inconsistent">False</property>
|
|
+ <property name="draw_indicator">True</property>
|
|
+ </widget>
|
|
+ <packing>
|
|
+ <property name="padding">0</property>
|
|
+ <property name="expand">False</property>
|
|
+ <property name="fill">False</property>
|
|
+ </packing>
|
|
+ </child>
|
|
+
|
|
+ <child>
|
|
<widget class="GtkRadioButton" id="none_radiobutton">
|
|
<property name="visible">True</property>
|
|
<property name="can_focus">True</property>
|
|
@@ -95,6 +114,7 @@
|
|
<property name="active">False</property>
|
|
<property name="inconsistent">False</property>
|
|
<property name="draw_indicator">True</property>
|
|
+ <property name="group">system_radiobutton</property>
|
|
</widget>
|
|
<packing>
|
|
<property name="padding">0</property>
|
|
@@ -126,7 +146,7 @@
|
|
<property name="active">False</property>
|
|
<property name="inconsistent">False</property>
|
|
<property name="draw_indicator">True</property>
|
|
- <property name="group">none_radiobutton</property>
|
|
+ <property name="group">system_radiobutton</property>
|
|
</widget>
|
|
<packing>
|
|
<property name="padding">0</property>
|
|
@@ -669,7 +689,7 @@
|
|
<property name="active">False</property>
|
|
<property name="inconsistent">False</property>
|
|
<property name="draw_indicator">True</property>
|
|
- <property name="group">none_radiobutton</property>
|
|
+ <property name="group">system_radiobutton</property>
|
|
</widget>
|
|
<packing>
|
|
<property name="padding">0</property>
|
|
--
|
|
1.5.4.5
|
|
|
|
|
|
From ed0ada43be0102fbecc3d2a38cfb5ce69406581e Mon Sep 17 00:00:00 2001
|
|
From: Federico Mena Quintero <federico@novell.com>
|
|
Date: Fri, 13 Jun 2008 04:23:41 -0500
|
|
Subject: [PATCH 2/2] bnc350513 - Manual config widgets are disabled at startup
|
|
2008-06-13 Federico Mena Quintero <federico@novell.com>
|
|
|
|
https://bugzilla.novell.com/show_bug.cgi?id=350513 - Widgets for
|
|
manual proxy configuration are disabled on startup, even if Manual
|
|
configuration was selected.
|
|
|
|
* gnome-network-preferences.c
|
|
(set_sensitivity_based_on_active_radiobutton): New function;
|
|
extract the sensitivity logic from proxy_mode_radiobutton_clicked_cb().
|
|
(mode_set_initial_value): Set the initial sensitivity of the data
|
|
widgets with the function above.
|
|
(proxy_mode_radiobutton_clicked_cb): Use
|
|
set_sensitivity_based_on_active_radiobutton() instead of setting
|
|
the sensitivity here directly.
|
|
(connect_mode_radiobuttons): Renamed from
|
|
connect_sensitivity_signals() as the callback doesn't really have
|
|
to do with sensitivity.
|
|
|
|
Signed-off-by: Federico Mena Quintero <federico@novell.com>
|
|
---
|
|
capplets/network/gnome-network-preferences.c | 41 +++++++++++++++++---------
|
|
1 files changed, 27 insertions(+), 14 deletions(-)
|
|
|
|
diff --git a/capplets/network/gnome-network-preferences.c b/capplets/network/gnome-network-preferences.c
|
|
index 11fd88e..7c90181 100644
|
|
--- a/capplets/network/gnome-network-preferences.c
|
|
+++ b/capplets/network/gnome-network-preferences.c
|
|
@@ -352,17 +352,34 @@ extract_proxy_host (GConfPropertyEditor *peditor, const GConfValue *orig)
|
|
}
|
|
|
|
static void
|
|
+set_sensitivity_based_on_active_radiobutton (GladeXML *dialog, GtkWidget *active_radio)
|
|
+{
|
|
+ gboolean manual_box_sensitive, auto_box_sensitive;
|
|
+
|
|
+ g_assert (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (active_radio)));
|
|
+
|
|
+ manual_box_sensitive = auto_box_sensitive = FALSE;
|
|
+
|
|
+ if (active_radio == WID ("manual_radiobutton"))
|
|
+ manual_box_sensitive = TRUE;
|
|
+ else if (active_radio == WID ("auto_radiobutton"))
|
|
+ auto_box_sensitive = TRUE;
|
|
+
|
|
+ gtk_widget_set_sensitive (WID ("manual_box"), manual_box_sensitive);
|
|
+ gtk_widget_set_sensitive (WID ("same_proxy_checkbutton"), manual_box_sensitive);
|
|
+ gtk_widget_set_sensitive (WID ("auto_box"), auto_box_sensitive);
|
|
+}
|
|
+
|
|
+static void
|
|
proxy_mode_radiobutton_clicked_cb (GtkWidget *widget,
|
|
GladeXML *dialog)
|
|
{
|
|
GConfClient *client;
|
|
- gboolean manual_box_sensitive, auto_box_sensitive;
|
|
-
|
|
+
|
|
if (!gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(widget)))
|
|
return;
|
|
|
|
client = gconf_client_get_default ();
|
|
- manual_box_sensitive = auto_box_sensitive = FALSE;
|
|
|
|
if (widget == WID ("system_radiobutton")) {
|
|
gconf_client_set_string (client, KEY_USE_SYSTEM_SETTINGS, VAL_USE_SYSTEM_SETTINGS_SYSTEM_VALUES, NULL);
|
|
@@ -371,28 +388,22 @@ proxy_mode_radiobutton_clicked_cb (GtkWidget *widget,
|
|
gconf_client_set_string (client, PROXY_MODE_KEY, "none", NULL);
|
|
gconf_client_set_bool (client, USE_PROXY_KEY, FALSE, NULL);
|
|
} else if (widget == WID ("manual_radiobutton")) {
|
|
- manual_box_sensitive = TRUE;
|
|
-
|
|
gconf_client_set_string (client, KEY_USE_SYSTEM_SETTINGS, VAL_USE_SYSTEM_SETTINGS_USER_VALUES, NULL);
|
|
gconf_client_set_string (client, PROXY_MODE_KEY, "manual", NULL);
|
|
gconf_client_set_bool (client, USE_PROXY_KEY, TRUE, NULL);
|
|
} else if (widget == WID ("auto_radiobutton")) {
|
|
- auto_box_sensitive = TRUE;
|
|
-
|
|
gconf_client_set_string (client, KEY_USE_SYSTEM_SETTINGS, VAL_USE_SYSTEM_SETTINGS_USER_VALUES, NULL);
|
|
gconf_client_set_string (client, PROXY_MODE_KEY, "auto", NULL);
|
|
gconf_client_set_bool (client, USE_PROXY_KEY, TRUE, NULL);
|
|
}
|
|
|
|
- gtk_widget_set_sensitive (WID ("manual_box"), manual_box_sensitive);
|
|
- gtk_widget_set_sensitive (WID ("same_proxy_checkbutton"), manual_box_sensitive);
|
|
- gtk_widget_set_sensitive (WID ("auto_box"), auto_box_sensitive);
|
|
+ set_sensitivity_based_on_active_radiobutton (dialog, widget);
|
|
|
|
g_object_unref (client);
|
|
}
|
|
|
|
static void
|
|
-connect_sensitivity_signals (GladeXML *dialog, GSList *mode_group)
|
|
+connect_mode_radiobuttons (GladeXML *dialog, GSList *mode_group)
|
|
{
|
|
for (; mode_group != NULL; mode_group = mode_group->next)
|
|
{
|
|
@@ -416,7 +427,7 @@ get_radio_for_mode (GladeXML *dialog, const char *mode_str)
|
|
else
|
|
return WID ("none_radiobutton");
|
|
}
|
|
-
|
|
+
|
|
static void
|
|
mode_set_initial_value (GladeXML *dialog, GConfClient *client)
|
|
{
|
|
@@ -461,8 +472,10 @@ mode_set_initial_value (GladeXML *dialog, GConfClient *client)
|
|
radiobutton = get_radio_for_mode (dialog, gconf_value_get_string (mode_value));
|
|
}
|
|
|
|
- if (radiobutton)
|
|
+ if (radiobutton) {
|
|
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (radiobutton), TRUE);
|
|
+ set_sensitivity_based_on_active_radiobutton (dialog, radiobutton);
|
|
+ }
|
|
|
|
if (mode_value)
|
|
gconf_value_free (mode_value);
|
|
@@ -490,7 +503,7 @@ setup_dialog (GladeXML *dialog)
|
|
/* Mode */
|
|
mode_set_initial_value (dialog, client);
|
|
mode_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (WID ("system_radiobutton")));
|
|
- connect_sensitivity_signals (dialog, mode_group);
|
|
+ connect_mode_radiobuttons (dialog, mode_group);
|
|
|
|
|
|
/* Use same proxy for all protocols */
|
|
--
|
|
1.5.4.5
|
|
|