[gnome-terminal/gsettings] Use GSettings for some settings
- From: Christian Persch <chpe src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-terminal/gsettings] Use GSettings for some settings
- Date: Wed, 10 Nov 2010 20:37:03 +0000 (UTC)
commit 22c08849057de3fe7372aadf48b8441cc13ee423
Author: Christian Persch <chpe gnome org>
Date: Sat Oct 30 20:53:38 2010 +0200
Use GSettings for some settings
Start the GSettings port.
Makefile.am | 2 +
configure.ac | 8 ++
po/POTFILES.in | 1 +
src/Makefile.am | 7 +
src/gnome-terminal.schemas.in | 34 ------
src/terminal-app.c | 265 ++++++++++++++---------------------------
src/terminal-app.h | 4 +
src/terminal-util.c | 228 ++++++++++++++----------------------
src/terminal-util.h | 3 -
9 files changed, 202 insertions(+), 350 deletions(-)
---
diff --git a/Makefile.am b/Makefile.am
index 27547fd..abfc4c9 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -2,6 +2,8 @@ SUBDIRS = src po help
NULL =
+ACLOCAL_AMFLAGS = ${ACLOCAL_FLAGS}
+
DISTCHECK_CONFIGURE_FLAGS = \
--disable-scrollkeeper \
--disable-schemas-install \
diff --git a/configure.ac b/configure.ac
index ae940f7..3803a0f 100644
--- a/configure.ac
+++ b/configure.ac
@@ -42,6 +42,7 @@ AM_GLIB_GNU_GETTEXT
GLIB_REQUIRED=2.25.0
GIO_REQUIRED=2.25.12
GCONF_REQUIRED=2.31.3
+GSETTINGS_DESKTOP_SCHEMAS_REQUIRED=0.1.0
AC_MSG_CHECKING([which gtk+ version to compile against])
AC_ARG_WITH([gtk],
@@ -80,8 +81,15 @@ PKG_CHECK_MODULES([TERM],
gio-2.0 >= $GIO_REQUIRED
gtk+-$GTK_API_VERSION >= $GTK_REQUIRED
gconf-2.0 >= $GCONF_REQUIRED
+ gsettings-desktop-schemas >= $GSETTINGS_DESKTOP_SCHEMAS_REQUIRED
$PLATFORM_DEPS])
+# *********
+# GSettings
+# *********
+
+GLIB_GSETTINGS
+
# ********
# smclient
# ********
diff --git a/po/POTFILES.in b/po/POTFILES.in
index 28708dc..4e41d9f 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -26,3 +26,4 @@ src/terminal-tabs-menu.c
src/terminal-util.c
src/terminal-window.c
src/extra-strings.c
+src/org.gnome.Terminal.Preferences.gschema.xml.in
diff --git a/src/Makefile.am b/src/Makefile.am
index af271e6..e9367bb 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -174,11 +174,15 @@ builder_in_files = \
builderdir = $(pkgdatadir)
builder_DATA = $(builder_in_files:.glade=.ui)
+gsettingsschema_in_files = org.gnome.Terminal.Preferences.gschema.xml.in
+gsettings_SCHEMAS = $(gsettingsschema_in_files:.gschema.xml.in=.gschema.xml)
+
CLEANFILES = \
stamp-terminal-type-builtins.h \
gnome-terminal.schemas \
stamp-terminal-type-builtins.h \
$(builder_DATA) \
+ $(gsettings_SCHEMAS) \
$(BUILT_SOURCES)
EXTRA_DIST = \
@@ -190,9 +194,12 @@ EXTRA_DIST = \
$(schema_in_files) \
$(uimanager_DATA) \
$(builder_in_files) \
+ $(gsettingsschema_in_files) \
$(NULL)
@INTLTOOL_SCHEMAS_RULE@
+ INTLTOOL_XML_NOMERGE_RULE@
+ GSETTINGS_RULES@
if GCONF_SCHEMAS_INSTALL
install-data-local:
diff --git a/src/gnome-terminal.schemas.in b/src/gnome-terminal.schemas.in
index 587e8d0..a7a4ab3 100644
--- a/src/gnome-terminal.schemas.in
+++ b/src/gnome-terminal.schemas.in
@@ -40,40 +40,6 @@
</schema>
<schema>
- <key>/schemas/apps/gnome-terminal/global/use_mnemonics</key>
- <applyto>/apps/gnome-terminal/global/use_mnemonics</applyto>
- <owner>gnome-terminal</owner>
- <type>bool</type>
- <default>true</default>
- <locale name="C">
- <short>Whether the menubar has access keys</short>
- <long>
- Whether to have Alt+letter access keys for the menubar.
- They may interfere with some applications run inside the terminal
- so it's possible to turn them off.
- </long>
- </locale>
- </schema>
-
- <schema>
- <key>/schemas/apps/gnome-terminal/global/use_menu_accelerators</key>
- <applyto>/apps/gnome-terminal/global/use_menu_accelerators</applyto>
- <owner>gnome-terminal</owner>
- <type>bool</type>
- <default>true</default>
- <locale name="C">
- <short>Whether the standard GTK shortcut for menubar access is enabled</short>
- <long>
- Normally you can access the menubar with F10. This can also
- be customized via gtkrc (gtk-menu-bar-accel =
- "whatever"). This option allows the standard menubar
- accelerator to be disabled.
- </long>
- </locale>
- </schema>
-
-
- <schema>
<key>/schemas/apps/gnome-terminal/global/active_encodings</key>
<applyto>/apps/gnome-terminal/global/active_encodings</applyto>
<owner>gnome-terminal</owner>
diff --git a/src/terminal-app.c b/src/terminal-app.c
index 3db56d8..0abb02e 100644
--- a/src/terminal-app.c
+++ b/src/terminal-app.c
@@ -50,6 +50,13 @@
#define FALLBACK_PROFILE_ID "Default"
+#define GLOBAL_SETTINGS_SCHEMA_ID "org.gnome.Terminal.Preferences"
+
+#define DESKTOP_INTERFACE_SETTINGS_SCHEMA_ID "org.gnome.desktop.interface"
+#define MONOSPACE_FONT_KEY_NAME "monospace-font-name"
+
+#define SYSTEM_PROXY_SETTINGS_SCHEMA_ID "org.gnome.system.proxy"
+
/* Settings storage works as follows:
* /apps/gnome-terminal/global/
* /apps/gnome-terminal/profiles/Foo/
@@ -96,10 +103,7 @@ struct _TerminalApp
GConfClient *conf;
guint profile_list_notify_id;
guint default_profile_notify_id;
- guint encoding_list_notify_id;
guint system_font_notify_id;
- guint enable_mnemonics_notify_id;
- guint enable_menu_accels_notify_id;
GHashTable *profiles;
char* default_profile_id;
@@ -112,6 +116,10 @@ struct _TerminalApp
PangoFontDescription *system_font_desc;
gboolean enable_mnemonics;
gboolean enable_menu_accels;
+
+ GSettings *global_settings;
+ GSettings *desktop_interface_settings;
+ GSettings *system_proxy_settings;
};
enum
@@ -150,21 +158,9 @@ static TerminalApp *global_app = NULL;
/* Evil hack alert: this is exported from libgconf-2 but not in a public header */
extern gboolean gconf_spawn_daemon(GError** err);
-#define MONOSPACE_FONT_DIR "/desktop/gnome/interface"
-#define MONOSPACE_FONT_KEY MONOSPACE_FONT_DIR "/monospace_font_name"
-#define DEFAULT_MONOSPACE_FONT ("Monospace 10")
-
-#define ENABLE_MNEMONICS_KEY CONF_GLOBAL_PREFIX "/use_mnemonics"
-#define DEFAULT_ENABLE_MNEMONICS (TRUE)
-
-#define ENABLE_MENU_BAR_ACCEL_KEY CONF_GLOBAL_PREFIX"/use_menu_accelerators"
-#define DEFAULT_ENABLE_MENU_BAR_ACCEL (TRUE)
-
#define PROFILE_LIST_KEY CONF_GLOBAL_PREFIX "/profile_list"
#define DEFAULT_PROFILE_KEY CONF_GLOBAL_PREFIX "/default_profile"
-#define ENCODING_LIST_KEY CONF_GLOBAL_PREFIX "/active_encodings"
-
/* Helper functions */
static GdkScreen*
@@ -908,18 +904,15 @@ encoding_mark_active (gpointer key,
}
static void
-terminal_app_encoding_list_notify_cb (GConfClient *client,
- guint cnxn_id,
- GConfEntry *entry,
- gpointer user_data)
+terminal_app_encoding_list_notify_cb (GSettings *settings,
+ const char *key,
+ TerminalApp *app)
{
- TerminalApp *app = TERMINAL_APP (user_data);
- GConfValue *val;
- GSList *strings, *tmp;
+ char **encodings;
+ int i;
TerminalEncoding *encoding;
- const char *charset;
- app->encodings_locked = !gconf_entry_get_is_writable (entry);
+ app->encodings_locked = !g_settings_is_writable (settings, key);
/* Mark all as non-active, then re-enable the active ones */
g_hash_table_foreach (app->encodings, (GHFunc) encoding_mark_active, GUINT_TO_POINTER (FALSE));
@@ -936,55 +929,33 @@ terminal_app_encoding_list_notify_cb (GConfClient *client,
if (terminal_encoding_is_valid (encoding))
encoding->is_active = TRUE;
- val = gconf_entry_get_value (entry);
- if (val != NULL &&
- val->type == GCONF_VALUE_LIST &&
- gconf_value_get_list_type (val) == GCONF_VALUE_STRING)
- strings = gconf_value_get_list (val);
- else
- strings = NULL;
-
- for (tmp = strings; tmp != NULL; tmp = tmp->next)
- {
- GConfValue *v = (GConfValue *) tmp->data;
-
- charset = gconf_value_get_string (v);
- if (!charset)
- continue;
-
- encoding = terminal_app_ensure_encoding (app, charset);
+ g_settings_get (settings, key, "^a&s", &encodings);
+ for (i = 0; encodings[i] != NULL; ++i) {
+ encoding = terminal_app_ensure_encoding (app, encodings[i]);
if (!terminal_encoding_is_valid (encoding))
continue;
encoding->is_active = TRUE;
}
+ g_free (encodings);
g_signal_emit (app, signals[ENCODING_LIST_CHANGED], 0);
}
static void
-terminal_app_system_font_notify_cb (GConfClient *client,
- guint cnxn_id,
- GConfEntry *entry,
- gpointer user_data)
+terminal_app_system_font_notify_cb (GSettings *settings,
+ const char *key,
+ TerminalApp *app)
{
- TerminalApp *app = TERMINAL_APP (user_data);
- GConfValue *gconf_value;
- const char *font = NULL;
+ const char *font;
PangoFontDescription *font_desc;
- if (strcmp (gconf_entry_get_key (entry), MONOSPACE_FONT_KEY) != 0)
- return;
-
- gconf_value = gconf_entry_get_value (entry);
- if (gconf_value &&
- gconf_value->type == GCONF_VALUE_STRING)
- font = gconf_value_get_string (gconf_value);
- if (!font)
- font = DEFAULT_MONOSPACE_FONT;
- g_assert (font != NULL);
+ g_settings_get (settings, key, "&s", &font);
font_desc = pango_font_description_from_string (font);
+ if (font_desc == NULL)
+ font_desc = pango_font_description_from_string ("Monospace 10");
+
if (app->system_font_desc &&
pango_font_description_equal (app->system_font_desc, font_desc))
{
@@ -1001,60 +972,6 @@ terminal_app_system_font_notify_cb (GConfClient *client,
}
static void
-terminal_app_enable_mnemonics_notify_cb (GConfClient *client,
- guint cnxn_id,
- GConfEntry *entry,
- gpointer user_data)
-{
- TerminalApp *app = TERMINAL_APP (user_data);
- GConfValue *gconf_value;
- gboolean enable;
-
- if (strcmp (gconf_entry_get_key (entry), ENABLE_MNEMONICS_KEY) != 0)
- return;
-
- gconf_value = gconf_entry_get_value (entry);
- if (gconf_value &&
- gconf_value->type == GCONF_VALUE_BOOL)
- enable = gconf_value_get_bool (gconf_value);
- else
- enable = TRUE;
-
- if (enable == app->enable_mnemonics)
- return;
-
- app->enable_mnemonics = enable;
- g_object_notify (G_OBJECT (app), TERMINAL_APP_ENABLE_MNEMONICS);
-}
-
-static void
-terminal_app_enable_menu_accels_notify_cb (GConfClient *client,
- guint cnxn_id,
- GConfEntry *entry,
- gpointer user_data)
-{
- TerminalApp *app = TERMINAL_APP (user_data);
- GConfValue *gconf_value;
- gboolean enable;
-
- if (strcmp (gconf_entry_get_key (entry), ENABLE_MENU_BAR_ACCEL_KEY) != 0)
- return;
-
- gconf_value = gconf_entry_get_value (entry);
- if (gconf_value &&
- gconf_value->type == GCONF_VALUE_BOOL)
- enable = gconf_value_get_bool (gconf_value);
- else
- enable = TRUE;
-
- if (enable == app->enable_menu_accels)
- return;
-
- app->enable_menu_accels = enable;
- g_object_notify (G_OBJECT (app), TERMINAL_APP_ENABLE_MENU_BAR_ACCEL);
-}
-
-static void
new_profile_response_cb (GtkWidget *new_profile_dialog,
int response_id,
TerminalApp *app)
@@ -1391,8 +1308,6 @@ terminal_app_init (TerminalApp *app)
gtk_window_set_default_icon_name (GNOME_TERMINAL_ICON_NAME);
/* Initialise defaults */
- app->enable_mnemonics = DEFAULT_ENABLE_MNEMONICS;
- app->enable_menu_accels = DEFAULT_ENABLE_MENU_BAR_ACCEL;
app->profiles = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_object_unref);
@@ -1400,19 +1315,6 @@ terminal_app_init (TerminalApp *app)
app->conf = gconf_client_get_default ();
- gconf_client_add_dir (app->conf, CONF_GLOBAL_PREFIX,
- GCONF_CLIENT_PRELOAD_ONELEVEL,
- NULL);
- gconf_client_add_dir (app->conf, MONOSPACE_FONT_DIR,
- GCONF_CLIENT_PRELOAD_ONELEVEL,
- NULL);
- gconf_client_add_dir (app->conf, CONF_PROXY_PREFIX,
- GCONF_CLIENT_PRELOAD_ONELEVEL,
- NULL);
- gconf_client_add_dir (app->conf, CONF_HTTP_PROXY_PREFIX,
- GCONF_CLIENT_PRELOAD_ONELEVEL,
- NULL);
-
app->profile_list_notify_id =
gconf_client_notify_add (app->conf, PROFILE_LIST_KEY,
terminal_app_profile_list_notify_cb,
@@ -1424,44 +1326,48 @@ terminal_app_init (TerminalApp *app)
terminal_app_default_profile_notify_cb,
app, NULL, NULL);
- app->encoding_list_notify_id =
- gconf_client_notify_add (app->conf,
- ENCODING_LIST_KEY,
- terminal_app_encoding_list_notify_cb,
- app, NULL, NULL);
-
- app->system_font_notify_id =
- gconf_client_notify_add (app->conf,
- MONOSPACE_FONT_KEY,
- terminal_app_system_font_notify_cb,
- app, NULL, NULL);
-
- app->enable_mnemonics_notify_id =
- gconf_client_notify_add (app->conf,
- ENABLE_MNEMONICS_KEY,
- terminal_app_enable_mnemonics_notify_cb,
- app, NULL, NULL);
-
- app->enable_menu_accels_notify_id =
- gconf_client_notify_add (app->conf,
- ENABLE_MENU_BAR_ACCEL_KEY,
- terminal_app_enable_menu_accels_notify_cb,
- app, NULL, NULL);
-
/* Load the settings */
gconf_client_notify (app->conf, PROFILE_LIST_KEY);
gconf_client_notify (app->conf, DEFAULT_PROFILE_KEY);
- gconf_client_notify (app->conf, ENCODING_LIST_KEY);
- gconf_client_notify (app->conf, MONOSPACE_FONT_KEY);
- gconf_client_notify (app->conf, ENABLE_MENU_BAR_ACCEL_KEY);
- gconf_client_notify (app->conf, ENABLE_MNEMONICS_KEY);
/* Ensure we have valid settings */
g_assert (app->default_profile_id != NULL);
+
+ /* Desktop proxy settings */
+ app->system_proxy_settings = g_settings_new (SYSTEM_PROXY_SETTINGS_SCHEMA_ID);
+
+ /* Desktop Interface settings */
+ app->desktop_interface_settings = g_settings_new (DESKTOP_INTERFACE_SETTINGS_SCHEMA_ID);
+ terminal_app_system_font_notify_cb (app->desktop_interface_settings, MONOSPACE_FONT_KEY_NAME, app);
g_assert (app->system_font_desc != NULL);
+ g_signal_connect (app->desktop_interface_settings,
+ "changed::" MONOSPACE_FONT_KEY_NAME,
+ G_CALLBACK (terminal_app_system_font_notify_cb),
+ app);
+
+ /* Terminal global settings */
+ app->global_settings = g_settings_new (GLOBAL_SETTINGS_SCHEMA_ID);
+ g_settings_bind (app->global_settings,
+ "mnemonics-enabled",
+ G_OBJECT (app),
+ TERMINAL_APP_ENABLE_MNEMONICS,
+ G_SETTINGS_BIND_GET |
+ G_SETTINGS_BIND_SET);
+ g_settings_bind (app->global_settings,
+ "menu-accelerator-enabled",
+ G_OBJECT (app),
+ TERMINAL_APP_ENABLE_MENU_BAR_ACCEL,
+ G_SETTINGS_BIND_GET |
+ G_SETTINGS_BIND_SET);
+
+ terminal_app_encoding_list_notify_cb (app->global_settings, "encodings", app);
+ g_signal_connect (app->global_settings,
+ "changed::encodings",
+ G_CALLBACK (terminal_app_encoding_list_notify_cb),
+ app);
terminal_accels_init ();
-
+
#ifdef WITH_SMCLIENT
{
EggSMClient *sm_client;
@@ -1498,21 +1404,25 @@ terminal_app_finalize (GObject *object)
0, 0, NULL, NULL, app);
#endif
+ g_signal_handlers_disconnect_by_func (app->global_settings,
+ G_CALLBACK (terminal_app_encoding_list_notify_cb),
+ app);
+
+ g_object_unref (app->global_settings);
+
+ g_signal_handlers_disconnect_by_func (app->desktop_interface_settings,
+ G_CALLBACK (terminal_app_system_font_notify_cb),
+ app);
+ g_object_unref (app->desktop_interface_settings);
+
+ g_object_unref (app->system_proxy_settings);
+
if (app->profile_list_notify_id != 0)
gconf_client_notify_remove (app->conf, app->profile_list_notify_id);
if (app->default_profile_notify_id != 0)
gconf_client_notify_remove (app->conf, app->default_profile_notify_id);
- if (app->encoding_list_notify_id != 0)
- gconf_client_notify_remove (app->conf, app->encoding_list_notify_id);
- if (app->system_font_notify_id != 0)
- gconf_client_notify_remove (app->conf, app->system_font_notify_id);
- if (app->enable_menu_accels_notify_id != 0)
- gconf_client_notify_remove (app->conf, app->enable_menu_accels_notify_id);
- if (app->enable_mnemonics_notify_id != 0)
- gconf_client_notify_remove (app->conf, app->enable_mnemonics_notify_id);
gconf_client_remove_dir (app->conf, CONF_GLOBAL_PREFIX, NULL);
- gconf_client_remove_dir (app->conf, MONOSPACE_FONT_DIR, NULL);
g_object_unref (app->conf);
@@ -1542,10 +1452,7 @@ terminal_app_get_property (GObject *object,
switch (prop_id)
{
case PROP_SYSTEM_FONT:
- if (app->system_font_desc)
- g_value_set_boxed (value, app->system_font_desc);
- else
- g_value_take_boxed (value, pango_font_description_from_string (DEFAULT_MONOSPACE_FONT));
+ g_value_set_boxed (value, app->system_font_desc);
break;
case PROP_ENABLE_MENU_BAR_ACCEL:
g_value_set_boolean (value, app->enable_menu_accels);
@@ -1574,11 +1481,11 @@ terminal_app_set_property (GObject *object,
{
case PROP_ENABLE_MENU_BAR_ACCEL:
app->enable_menu_accels = g_value_get_boolean (value);
- gconf_client_set_bool (app->conf, ENABLE_MENU_BAR_ACCEL_KEY, app->enable_menu_accels, NULL);
+ g_settings_set_boolean (app->global_settings, "menu-accelerator-enabled", app->enable_menu_accels);
break;
case PROP_ENABLE_MNEMONICS:
app->enable_mnemonics = g_value_get_boolean (value);
- gconf_client_set_bool (app->conf, ENABLE_MNEMONICS_KEY, app->enable_mnemonics, NULL);
+ g_settings_set_boolean (app->global_settings, "mnemonics-enabled", app->enable_mnemonics);
break;
case PROP_DEFAULT_PROFILE:
case PROP_SYSTEM_FONT:
@@ -1637,14 +1544,14 @@ terminal_app_class_init (TerminalAppClass *klass)
(object_class,
PROP_ENABLE_MENU_BAR_ACCEL,
g_param_spec_boolean (TERMINAL_APP_ENABLE_MENU_BAR_ACCEL, NULL, NULL,
- DEFAULT_ENABLE_MENU_BAR_ACCEL,
+ TRUE,
G_PARAM_READWRITE | G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB));
g_object_class_install_property
(object_class,
PROP_ENABLE_MNEMONICS,
g_param_spec_boolean (TERMINAL_APP_ENABLE_MNEMONICS, NULL, NULL,
- DEFAULT_ENABLE_MNEMONICS,
+ TRUE,
G_PARAM_READWRITE | G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB));
g_object_class_install_property
@@ -2114,3 +2021,15 @@ terminal_app_save_config_file (TerminalApp *app,
return result;
}
+
+/**
+ * terminal_app_get_proxy_settings:
+ * @app: a #TerminalApp
+ *
+ * Returns: (tranfer none): the cached #GSettings object for the org.gnome.system.proxy schema
+ */
+GSettings *
+terminal_app_get_proxy_settings (TerminalApp *app)
+{
+ return app->system_proxy_settings;
+}
diff --git a/src/terminal-app.h b/src/terminal-app.h
index 5c489c3..5258127 100644
--- a/src/terminal-app.h
+++ b/src/terminal-app.h
@@ -154,6 +154,10 @@ gboolean terminal_app_save_config_file (TerminalApp *app,
const char *file_name,
GError **error);
+/* GSettings */
+
+GSettings *terminal_app_get_proxy_settings (TerminalApp *app);
+
G_END_DECLS
#endif /* !TERMINAL_APP_H */
diff --git a/src/terminal-util.c b/src/terminal-util.c
index 8870e27..24b5c3b 100644
--- a/src/terminal-util.c
+++ b/src/terminal-util.c
@@ -32,13 +32,13 @@
#include <gio/gio.h>
#include <gtk/gtk.h>
-#include <gconf/gconf.h>
-
#ifdef GDK_WINDOWING_X11
#include <gdk/gdkx.h>
#include <X11/Xatom.h>
#endif
+#include <gdesktop-enums.h>
+
#include "terminal-accels.h"
#include "terminal-app.h"
#include "terminal-intl.h"
@@ -516,20 +516,6 @@ terminal_util_key_file_get_argv (GKeyFile *key_file,
/* Proxy stuff */
-static char *
-conf_get_string (GConfClient *conf,
- const char *key)
-{
- char *value;
- value = gconf_client_get_string (conf, key, NULL);
- if (G_UNLIKELY (value && *value == '\0'))
- {
- g_free (value);
- value = NULL;
- }
- return value;
-}
-
/*
* set_proxy_env:
* @env_table: a #GHashTable
@@ -542,7 +528,7 @@ conf_get_string (GConfClient *conf,
static void
set_proxy_env (GHashTable *env_table,
const char *key,
- char *value)
+ char *value /* consumed */)
{
char *key1 = NULL, *key2 = NULL;
char *value1 = NULL, *value2 = NULL;
@@ -579,139 +565,102 @@ set_proxy_env (GHashTable *env_table,
}
static void
-setup_http_proxy_env (GHashTable *env_table,
- GConfClient *conf)
+setup_proxy_env (GSettings *proxy_settings,
+ const char *child_schema_id,
+ const char *proxy_scheme,
+ const char *env_name,
+ GHashTable *env_table)
{
- gchar *host;
- gint port;
- GSList *ignore;
+ GSettings *child_settings;
+ GString *buf;
+ const char *host;
+ int port;
+ gboolean is_http;
- if (!gconf_client_get_bool (conf, CONF_HTTP_PROXY_PREFIX "/use_http_proxy", NULL))
- return;
+ is_http = (strcmp (child_schema_id, "http") == 0);
- host = conf_get_string (conf, CONF_HTTP_PROXY_PREFIX "/host");
- port = gconf_client_get_int (conf, CONF_HTTP_PROXY_PREFIX "/port", NULL);
- if (host && port)
- {
- GString *buf = g_string_sized_new (64);
- g_string_append (buf, "http://");
+ child_settings = g_settings_get_child (proxy_settings, child_schema_id);
- if (gconf_client_get_bool (conf, CONF_HTTP_PROXY_PREFIX "/use_authentication", NULL))
- {
- char *user, *password;
- user = conf_get_string (conf, CONF_HTTP_PROXY_PREFIX "/authentication_user");
- if (user)
- {
- g_string_append_uri_escaped (buf, user, NULL, TRUE);
- password = conf_get_string (conf, CONF_HTTP_PROXY_PREFIX "/authentication_password");
- if (password)
- {
- g_string_append_c (buf, ':');
- g_string_append_uri_escaped (buf, password, NULL, TRUE);
- g_free (password);
- }
- g_free (user);
- g_string_append_c (buf, '@');
- }
- }
- g_string_append_printf (buf, "%s:%d/", host, port);
- set_proxy_env (env_table, "http_proxy", g_string_free (buf, FALSE));
- }
- g_free (host);
+ if (is_http && !g_settings_get_boolean (child_settings, "enabled"))
+ goto out;
+
+ g_settings_get (child_settings, "host", "&s", &host);
+ port = g_settings_get_int (child_settings, "host");
+ if (host[0] == '\0' || port == 0)
+ goto out;
- ignore = gconf_client_get_list (conf, CONF_HTTP_PROXY_PREFIX "/ignore_hosts", GCONF_VALUE_STRING, NULL);
- if (ignore)
+ buf = g_string_sized_new (64);
+
+ g_string_append_printf (buf, "%s://", proxy_scheme);
+
+ if (is_http &&
+ g_settings_get_boolean (child_settings, "use-authentication"))
{
- GString *buf = g_string_sized_new (64);
- while (ignore != NULL)
- {
- GSList *old;
+ const char *user, *password;
- if (buf->len)
- g_string_append_c (buf, ',');
- g_string_append (buf, ignore->data);
+ g_settings_get (child_settings, "authentication-user", "&s", &user);
- old = ignore;
- ignore = g_slist_next (ignore);
- g_free (old->data);
- g_slist_free_1 (old);
- }
- set_proxy_env (env_table, "no_proxy", g_string_free (buf, FALSE));
- }
-}
+ if (user[0])
+ {
+ g_string_append_uri_escaped (buf, user, NULL, TRUE);
-static void
-setup_https_proxy_env (GHashTable *env_table,
- GConfClient *conf)
-{
- gchar *host;
- gint port;
+ g_settings_get (child_settings, "authentication-password", "&s", &password);
- host = conf_get_string (conf, CONF_PROXY_PREFIX "/secure_host");
- port = gconf_client_get_int (conf, CONF_PROXY_PREFIX "/secure_port", NULL);
- if (host && port)
- {
- char *proxy;
- /* Even though it's https, the proxy scheme is 'http'. See bug #624440. */
- proxy = g_strdup_printf ("http://%s:%d/", host, port);
- set_proxy_env (env_table, "https_proxy", proxy);
+ if (password[0])
+ {
+ g_string_append_c (buf, ':');
+ g_string_append_uri_escaped (buf, password, NULL, TRUE);
+ }
+ g_string_append_c (buf, '@');
+ }
}
- g_free (host);
-}
-static void
-setup_ftp_proxy_env (GHashTable *env_table,
- GConfClient *conf)
-{
- gchar *host;
- gint port;
+ g_string_append_printf (buf, "%s:%d/", host, port);
+ set_proxy_env (env_table, env_name, g_string_free (buf, FALSE));
- host = conf_get_string (conf, CONF_PROXY_PREFIX "/ftp_host");
- port = gconf_client_get_int (conf, CONF_PROXY_PREFIX "/ftp_port", NULL);
- if (host && port)
- {
- char *proxy;
- /* Even though it's ftp, the proxy scheme is 'http'. See bug #624440. */
- proxy = g_strdup_printf ("http://%s:%d/", host, port);
- set_proxy_env (env_table, "ftp_proxy", proxy);
- }
- g_free (host);
+out:
+ g_object_unref (child_settings);
}
static void
-setup_socks_proxy_env (GHashTable *env_table,
- GConfClient *conf)
+setup_autoconfig_proxy_env (GSettings *proxy_settings,
+ GHashTable *env_table)
{
- gchar *host;
- gint port;
+ /* XXX Not sure what to do with this. See bug #596688.
+ const char *url;
- host = conf_get_string (conf, CONF_PROXY_PREFIX "/socks_host");
- port = gconf_client_get_int (conf, CONF_PROXY_PREFIX "/socks_port", NULL);
- if (host && port)
+ g_settings_get (proxy_settings, "autoconfig-url", "&s", &url);
+ if (url[0])
{
char *proxy;
- proxy = g_strdup_printf ("socks://%s:%d/", host, port);
- set_proxy_env (env_table, "all_proxy", proxy);
+ proxy = g_strdup_printf ("pac+%s", url);
+ set_proxy_env (env_table, "http_proxy", proxy);
}
- g_free (host);
+ */
}
static void
-setup_autoconfig_proxy_env (GHashTable *env_table,
- GConfClient *conf)
+setup_ignore_proxy_env (GSettings *proxy_settings,
+ GHashTable *env_table)
{
- /* XXX Not sure what to do with this. See bug #596688.
- gchar *url;
+ GString *buf;
+ char **ignore;
+ int i;
+
+ g_settings_get (proxy_settings, "ignore-hosts", "^a&s", &ignore);
+ if (ignore == NULL)
+ return;
- url = conf_get_string (conf, CONF_PROXY_PREFIX "/autoconfig_url");
- if (url)
+ buf = g_string_sized_new (64);
+ for (i = 0; ignore[i] != NULL; ++i)
{
- char *proxy;
- proxy = g_strdup_printf ("pac+%s", url);
- set_proxy_env (env_table, "http_proxy", proxy);
+ if (buf->len)
+ g_string_append_c (buf, ',');
+ g_string_append (buf, ignore[i]);
}
- g_free (url);
- */
+ g_free (ignore);
+
+ set_proxy_env (env_table, "no_proxy", g_string_free (buf, FALSE));
}
/**
@@ -723,27 +672,26 @@ setup_autoconfig_proxy_env (GHashTable *env_table,
void
terminal_util_add_proxy_env (GHashTable *env_table)
{
- char *proxymode;
+ GSettings *proxy_settings;
+ GDesktopProxyMode mode;
- GConfClient *conf;
- conf = gconf_client_get_default ();
+ proxy_settings = terminal_app_get_proxy_settings (terminal_app_get ());
+ mode = g_settings_get_enum (proxy_settings, "mode");
- /* If mode is not manual, nothing to set */
- proxymode = conf_get_string (conf, CONF_PROXY_PREFIX "/mode");
- if (proxymode && 0 == strcmp (proxymode, "manual"))
+ if (mode == G_DESKTOP_PROXY_MODE_MANUAL)
{
- setup_http_proxy_env (env_table, conf);
- setup_https_proxy_env (env_table, conf);
- setup_ftp_proxy_env (env_table, conf);
- setup_socks_proxy_env (env_table, conf);
+ setup_proxy_env (proxy_settings, "http", "http", "http_proxy", env_table);
+ /* Even though it's https, the proxy scheme is 'http'. See bug #624440. */
+ setup_proxy_env (proxy_settings, "https", "http", "https_proxy", env_table);
+ /* Even though it's ftp, the proxy scheme is 'http'. See bug #624440. */
+ setup_proxy_env (proxy_settings, "ftp", "http", "ftp_proxy", env_table);
+ setup_proxy_env (proxy_settings, "socks", "socks", "all_proxy", env_table);
+ setup_ignore_proxy_env (proxy_settings, env_table);
}
- else if (proxymode && 0 == strcmp (proxymode, "auto"))
+ else if (mode == G_DESKTOP_PROXY_MODE_AUTO)
{
- setup_autoconfig_proxy_env (env_table, conf);
+ setup_autoconfig_proxy_env (proxy_settings, env_table);
}
-
- g_free (proxymode);
- g_object_unref (conf);
}
/* Bidirectional object/widget binding */
diff --git a/src/terminal-util.h b/src/terminal-util.h
index a8648af..c461d85 100644
--- a/src/terminal-util.h
+++ b/src/terminal-util.h
@@ -28,9 +28,6 @@
G_BEGIN_DECLS
-#define CONF_PROXY_PREFIX "/system/proxy"
-#define CONF_HTTP_PROXY_PREFIX "/system/http_proxy"
-
void terminal_util_set_unique_role (GtkWindow *window, const char *prefix);
void terminal_util_show_error_dialog (GtkWindow *transient_parent,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]