summaryrefslogtreecommitdiff
path: root/gedit/gedit-prefs-manager-app.c
diff options
context:
space:
mode:
Diffstat (limited to 'gedit/gedit-prefs-manager-app.c')
-rwxr-xr-xgedit/gedit-prefs-manager-app.c1620
1 files changed, 1620 insertions, 0 deletions
diff --git a/gedit/gedit-prefs-manager-app.c b/gedit/gedit-prefs-manager-app.c
new file mode 100755
index 00000000..ce35db8d
--- /dev/null
+++ b/gedit/gedit-prefs-manager-app.c
@@ -0,0 +1,1620 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ * gedit-prefs-manager.c
+ * This file is part of gedit
+ *
+ * Copyright (C) 2002-2005 Paolo Maggi
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+/*
+ * Modified by the gedit Team, 2002-2003. See the AUTHORS file for a
+ * list of people on the gedit Team.
+ * See the ChangeLog files for a list of changes.
+ *
+ * $Id$
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <string.h>
+
+#include "gedit-prefs-manager.h"
+#include "gedit-prefs-manager-private.h"
+#include "gedit-prefs-manager-app.h"
+#include "gedit-app.h"
+#include "gedit-debug.h"
+#include "gedit-view.h"
+#include "gedit-window.h"
+#include "gedit-window-private.h"
+#include "gedit-plugins-engine.h"
+#include "gedit-style-scheme-manager.h"
+#include "gedit-dirs.h"
+
+static void gedit_prefs_manager_editor_font_changed (MateConfClient *client,
+ guint cnxn_id,
+ MateConfEntry *entry,
+ gpointer user_data);
+
+static void gedit_prefs_manager_system_font_changed (MateConfClient *client,
+ guint cnxn_id,
+ MateConfEntry *entry,
+ gpointer user_data);
+
+static void gedit_prefs_manager_tabs_size_changed (MateConfClient *client,
+ guint cnxn_id,
+ MateConfEntry *entry,
+ gpointer user_data);
+
+static void gedit_prefs_manager_wrap_mode_changed (MateConfClient *client,
+ guint cnxn_id,
+ MateConfEntry *entry,
+ gpointer user_data);
+
+static void gedit_prefs_manager_line_numbers_changed (MateConfClient *client,
+ guint cnxn_id,
+ MateConfEntry *entry,
+ gpointer user_data);
+
+static void gedit_prefs_manager_auto_indent_changed (MateConfClient *client,
+ guint cnxn_id,
+ MateConfEntry *entry,
+ gpointer user_data);
+
+static void gedit_prefs_manager_undo_changed (MateConfClient *client,
+ guint cnxn_id,
+ MateConfEntry *entry,
+ gpointer user_data);
+
+static void gedit_prefs_manager_right_margin_changed (MateConfClient *client,
+ guint cnxn_id,
+ MateConfEntry *entry,
+ gpointer user_data);
+
+static void gedit_prefs_manager_smart_home_end_changed (MateConfClient *client,
+ guint cnxn_id,
+ MateConfEntry *entry,
+ gpointer user_data);
+
+static void gedit_prefs_manager_hl_current_line_changed (MateConfClient *client,
+ guint cnxn_id,
+ MateConfEntry *entry,
+ gpointer user_data);
+
+static void gedit_prefs_manager_bracket_matching_changed(MateConfClient *client,
+ guint cnxn_id,
+ MateConfEntry *entry,
+ gpointer user_data);
+
+static void gedit_prefs_manager_syntax_hl_enable_changed(MateConfClient *client,
+ guint cnxn_id,
+ MateConfEntry *entry,
+ gpointer user_data);
+
+static void gedit_prefs_manager_search_hl_enable_changed(MateConfClient *client,
+ guint cnxn_id,
+ MateConfEntry *entry,
+ gpointer user_data);
+
+static void gedit_prefs_manager_source_style_scheme_changed
+ (MateConfClient *client,
+ guint cnxn_id,
+ MateConfEntry *entry,
+ gpointer user_data);
+
+static void gedit_prefs_manager_max_recents_changed (MateConfClient *client,
+ guint cnxn_id,
+ MateConfEntry *entry,
+ gpointer user_data);
+
+static void gedit_prefs_manager_auto_save_changed (MateConfClient *client,
+ guint cnxn_id,
+ MateConfEntry *entry,
+ gpointer user_data);
+
+static void gedit_prefs_manager_active_plugins_changed (MateConfClient *client,
+ guint cnxn_id,
+ MateConfEntry *entry,
+ gpointer user_data);
+
+static void gedit_prefs_manager_lockdown_changed (MateConfClient *client,
+ guint cnxn_id,
+ MateConfEntry *entry,
+ gpointer user_data);
+
+/* GUI state is serialized to a .desktop file, not in mateconf */
+
+#define GEDIT_STATE_DEFAULT_WINDOW_STATE 0
+#define GEDIT_STATE_DEFAULT_WINDOW_WIDTH 650
+#define GEDIT_STATE_DEFAULT_WINDOW_HEIGHT 500
+#define GEDIT_STATE_DEFAULT_SIDE_PANEL_SIZE 200
+#define GEDIT_STATE_DEFAULT_BOTTOM_PANEL_SIZE 140
+
+#define GEDIT_STATE_FILE_LOCATION "gedit-2"
+
+#define GEDIT_STATE_WINDOW_GROUP "window"
+#define GEDIT_STATE_WINDOW_STATE "state"
+#define GEDIT_STATE_WINDOW_HEIGHT "height"
+#define GEDIT_STATE_WINDOW_WIDTH "width"
+#define GEDIT_STATE_SIDE_PANEL_SIZE "side_panel_size"
+#define GEDIT_STATE_BOTTOM_PANEL_SIZE "bottom_panel_size"
+#define GEDIT_STATE_SIDE_PANEL_ACTIVE_PAGE "side_panel_active_page"
+#define GEDIT_STATE_BOTTOM_PANEL_ACTIVE_PAGE "bottom_panel_active_page"
+
+#define GEDIT_STATE_FILEFILTER_GROUP "filefilter"
+#define GEDIT_STATE_FILEFILTER_ID "id"
+
+static gint window_state = -1;
+static gint window_height = -1;
+static gint window_width = -1;
+static gint side_panel_size = -1;
+static gint bottom_panel_size = -1;
+static gint side_panel_active_page = -1;
+static gint bottom_panel_active_page = -1;
+static gint active_file_filter = -1;
+
+
+static gchar *
+get_state_filename (void)
+{
+ gchar *config_dir;
+ gchar *filename = NULL;
+
+ config_dir = gedit_dirs_get_user_config_dir ();
+
+ if (config_dir != NULL)
+ {
+ filename = g_build_filename (config_dir,
+ GEDIT_STATE_FILE_LOCATION,
+ NULL);
+ g_free (config_dir);
+ }
+
+ return filename;
+}
+
+static GKeyFile *
+get_gedit_state_file (void)
+{
+ static GKeyFile *state_file = NULL;
+
+ if (state_file == NULL)
+ {
+ gchar *filename;
+ GError *err = NULL;
+
+ state_file = g_key_file_new ();
+
+ filename = get_state_filename ();
+
+ if (!g_key_file_load_from_file (state_file,
+ filename,
+ G_KEY_FILE_NONE,
+ &err))
+ {
+ if (err->domain != G_FILE_ERROR ||
+ err->code != G_FILE_ERROR_NOENT)
+ {
+ g_warning ("Could not load gedit state file: %s\n",
+ err->message);
+ }
+
+ g_error_free (err);
+ }
+
+ g_free (filename);
+ }
+
+ return state_file;
+}
+
+static void
+gedit_state_get_int (const gchar *group,
+ const gchar *key,
+ gint defval,
+ gint *result)
+{
+ GKeyFile *state_file;
+ gint res;
+ GError *err = NULL;
+
+ state_file = get_gedit_state_file ();
+ res = g_key_file_get_integer (state_file,
+ group,
+ key,
+ &err);
+
+ if (err != NULL)
+ {
+ if ((err->domain != G_KEY_FILE_ERROR) ||
+ ((err->code != G_KEY_FILE_ERROR_GROUP_NOT_FOUND &&
+ err->code != G_KEY_FILE_ERROR_KEY_NOT_FOUND)))
+ {
+ g_warning ("Could not get state value %s::%s : %s\n",
+ group,
+ key,
+ err->message);
+ }
+
+ *result = defval;
+ g_error_free (err);
+ }
+ else
+ {
+ *result = res;
+ }
+}
+
+static void
+gedit_state_set_int (const gchar *group,
+ const gchar *key,
+ gint value)
+{
+ GKeyFile *state_file;
+
+ state_file = get_gedit_state_file ();
+ g_key_file_set_integer (state_file,
+ group,
+ key,
+ value);
+}
+
+static gboolean
+gedit_state_file_sync (void)
+{
+ GKeyFile *state_file;
+ gchar *config_dir;
+ gchar *filename = NULL;
+ gchar *content = NULL;
+ gsize length;
+ gint res;
+ GError *err = NULL;
+ gboolean ret = FALSE;
+
+ state_file = get_gedit_state_file ();
+ g_return_val_if_fail (state_file != NULL, FALSE);
+
+ config_dir = gedit_dirs_get_user_config_dir ();
+ if (config_dir == NULL)
+ {
+ g_warning ("Could not get config directory\n");
+ return ret;
+ }
+
+ res = g_mkdir_with_parents (config_dir, 0755);
+ if (res < 0)
+ {
+ g_warning ("Could not create config directory\n");
+ goto out;
+ }
+
+ content = g_key_file_to_data (state_file,
+ &length,
+ &err);
+
+ if (err != NULL)
+ {
+ g_warning ("Could not get data from state file: %s\n",
+ err->message);
+ goto out;
+ }
+
+ if (content != NULL)
+ {
+ filename = get_state_filename ();
+ if (!g_file_set_contents (filename,
+ content,
+ length,
+ &err))
+ {
+ g_warning ("Could not write gedit state file: %s\n",
+ err->message);
+ goto out;
+ }
+ }
+
+ ret = TRUE;
+
+ out:
+ if (err != NULL)
+ g_error_free (err);
+
+ g_free (config_dir);
+ g_free (filename);
+ g_free (content);
+
+ return ret;
+}
+
+/* Window state */
+gint
+gedit_prefs_manager_get_window_state (void)
+{
+ if (window_state == -1)
+ {
+ gedit_state_get_int (GEDIT_STATE_WINDOW_GROUP,
+ GEDIT_STATE_WINDOW_STATE,
+ GEDIT_STATE_DEFAULT_WINDOW_STATE,
+ &window_state);
+ }
+
+ return window_state;
+}
+
+void
+gedit_prefs_manager_set_window_state (gint ws)
+{
+ g_return_if_fail (ws > -1);
+
+ window_state = ws;
+
+ gedit_state_set_int (GEDIT_STATE_WINDOW_GROUP,
+ GEDIT_STATE_WINDOW_STATE,
+ ws);
+}
+
+gboolean
+gedit_prefs_manager_window_state_can_set (void)
+{
+ return TRUE;
+}
+
+/* Window size */
+void
+gedit_prefs_manager_get_window_size (gint *width, gint *height)
+{
+ g_return_if_fail (width != NULL && height != NULL);
+
+ if (window_width == -1)
+ {
+ gedit_state_get_int (GEDIT_STATE_WINDOW_GROUP,
+ GEDIT_STATE_WINDOW_WIDTH,
+ GEDIT_STATE_DEFAULT_WINDOW_WIDTH,
+ &window_width);
+ }
+
+ if (window_height == -1)
+ {
+ gedit_state_get_int (GEDIT_STATE_WINDOW_GROUP,
+ GEDIT_STATE_WINDOW_HEIGHT,
+ GEDIT_STATE_DEFAULT_WINDOW_HEIGHT,
+ &window_height);
+ }
+
+ *width = window_width;
+ *height = window_height;
+}
+
+void
+gedit_prefs_manager_get_default_window_size (gint *width, gint *height)
+{
+ g_return_if_fail (width != NULL && height != NULL);
+
+ *width = GEDIT_STATE_DEFAULT_WINDOW_WIDTH;
+ *height = GEDIT_STATE_DEFAULT_WINDOW_HEIGHT;
+}
+
+void
+gedit_prefs_manager_set_window_size (gint width, gint height)
+{
+ g_return_if_fail (width > -1 && height > -1);
+
+ window_width = width;
+ window_height = height;
+
+ gedit_state_set_int (GEDIT_STATE_WINDOW_GROUP,
+ GEDIT_STATE_WINDOW_WIDTH,
+ width);
+ gedit_state_set_int (GEDIT_STATE_WINDOW_GROUP,
+ GEDIT_STATE_WINDOW_HEIGHT,
+ height);
+}
+
+gboolean
+gedit_prefs_manager_window_size_can_set (void)
+{
+ return TRUE;
+}
+
+/* Side panel */
+gint
+gedit_prefs_manager_get_side_panel_size (void)
+{
+ if (side_panel_size == -1)
+ {
+ gedit_state_get_int (GEDIT_STATE_WINDOW_GROUP,
+ GEDIT_STATE_SIDE_PANEL_SIZE,
+ GEDIT_STATE_DEFAULT_SIDE_PANEL_SIZE,
+ &side_panel_size);
+ }
+
+ return side_panel_size;
+}
+
+gint
+gedit_prefs_manager_get_default_side_panel_size (void)
+{
+ return GEDIT_STATE_DEFAULT_SIDE_PANEL_SIZE;
+}
+
+void
+gedit_prefs_manager_set_side_panel_size (gint ps)
+{
+ g_return_if_fail (ps > -1);
+
+ if (side_panel_size == ps)
+ return;
+
+ side_panel_size = ps;
+ gedit_state_set_int (GEDIT_STATE_WINDOW_GROUP,
+ GEDIT_STATE_SIDE_PANEL_SIZE,
+ ps);
+}
+
+gboolean
+gedit_prefs_manager_side_panel_size_can_set (void)
+{
+ return TRUE;
+}
+
+gint
+gedit_prefs_manager_get_side_panel_active_page (void)
+{
+ if (side_panel_active_page == -1)
+ {
+ gedit_state_get_int (GEDIT_STATE_WINDOW_GROUP,
+ GEDIT_STATE_SIDE_PANEL_ACTIVE_PAGE,
+ 0,
+ &side_panel_active_page);
+ }
+
+ return side_panel_active_page;
+}
+
+void
+gedit_prefs_manager_set_side_panel_active_page (gint id)
+{
+ if (side_panel_active_page == id)
+ return;
+
+ side_panel_active_page = id;
+ gedit_state_set_int (GEDIT_STATE_WINDOW_GROUP,
+ GEDIT_STATE_SIDE_PANEL_ACTIVE_PAGE,
+ id);
+}
+
+gboolean
+gedit_prefs_manager_side_panel_active_page_can_set (void)
+{
+ return TRUE;
+}
+
+/* Bottom panel */
+gint
+gedit_prefs_manager_get_bottom_panel_size (void)
+{
+ if (bottom_panel_size == -1)
+ {
+ gedit_state_get_int (GEDIT_STATE_WINDOW_GROUP,
+ GEDIT_STATE_BOTTOM_PANEL_SIZE,
+ GEDIT_STATE_DEFAULT_BOTTOM_PANEL_SIZE,
+ &bottom_panel_size);
+ }
+
+ return bottom_panel_size;
+}
+
+gint
+gedit_prefs_manager_get_default_bottom_panel_size (void)
+{
+ return GEDIT_STATE_DEFAULT_BOTTOM_PANEL_SIZE;
+}
+
+void
+gedit_prefs_manager_set_bottom_panel_size (gint ps)
+{
+ g_return_if_fail (ps > -1);
+
+ if (bottom_panel_size == ps)
+ return;
+
+ bottom_panel_size = ps;
+ gedit_state_set_int (GEDIT_STATE_WINDOW_GROUP,
+ GEDIT_STATE_BOTTOM_PANEL_SIZE,
+ ps);
+}
+
+gboolean
+gedit_prefs_manager_bottom_panel_size_can_set (void)
+{
+ return TRUE;
+}
+
+gint
+gedit_prefs_manager_get_bottom_panel_active_page (void)
+{
+ if (bottom_panel_active_page == -1)
+ {
+ gedit_state_get_int (GEDIT_STATE_WINDOW_GROUP,
+ GEDIT_STATE_BOTTOM_PANEL_ACTIVE_PAGE,
+ 0,
+ &bottom_panel_active_page);
+ }
+
+ return bottom_panel_active_page;
+}
+
+void
+gedit_prefs_manager_set_bottom_panel_active_page (gint id)
+{
+ if (bottom_panel_active_page == id)
+ return;
+
+ bottom_panel_active_page = id;
+ gedit_state_set_int (GEDIT_STATE_WINDOW_GROUP,
+ GEDIT_STATE_BOTTOM_PANEL_ACTIVE_PAGE,
+ id);
+}
+
+gboolean
+gedit_prefs_manager_bottom_panel_active_page_can_set (void)
+{
+ return TRUE;
+}
+
+/* File filter */
+gint
+gedit_prefs_manager_get_active_file_filter (void)
+{
+ if (active_file_filter == -1)
+ {
+ gedit_state_get_int (GEDIT_STATE_FILEFILTER_GROUP,
+ GEDIT_STATE_FILEFILTER_ID,
+ 0,
+ &active_file_filter);
+ }
+
+ return active_file_filter;
+}
+
+void
+gedit_prefs_manager_set_active_file_filter (gint id)
+{
+ g_return_if_fail (id >= 0);
+
+ if (active_file_filter == id)
+ return;
+
+ active_file_filter = id;
+ gedit_state_set_int (GEDIT_STATE_FILEFILTER_GROUP,
+ GEDIT_STATE_FILEFILTER_ID,
+ id);
+}
+
+gboolean
+gedit_prefs_manager_active_file_filter_can_set (void)
+{
+ return TRUE;
+}
+
+/* Normal prefs are stored in MateConf */
+
+gboolean
+gedit_prefs_manager_app_init (void)
+{
+ gedit_debug (DEBUG_PREFS);
+
+ g_return_val_if_fail (gedit_prefs_manager == NULL, FALSE);
+
+ gedit_prefs_manager_init ();
+
+ if (gedit_prefs_manager != NULL)
+ {
+ /* TODO: notify, add dirs */
+ mateconf_client_add_dir (gedit_prefs_manager->mateconf_client,
+ GPM_PREFS_DIR,
+ MATECONF_CLIENT_PRELOAD_RECURSIVE,
+ NULL);
+
+ mateconf_client_add_dir (gedit_prefs_manager->mateconf_client,
+ GPM_PLUGINS_DIR,
+ MATECONF_CLIENT_PRELOAD_RECURSIVE,
+ NULL);
+
+ mateconf_client_add_dir (gedit_prefs_manager->mateconf_client,
+ GPM_LOCKDOWN_DIR,
+ MATECONF_CLIENT_PRELOAD_RECURSIVE,
+ NULL);
+
+ mateconf_client_notify_add (gedit_prefs_manager->mateconf_client,
+ GPM_FONT_DIR,
+ gedit_prefs_manager_editor_font_changed,
+ NULL, NULL, NULL);
+
+ mateconf_client_notify_add (gedit_prefs_manager->mateconf_client,
+ GPM_SYSTEM_FONT,
+ gedit_prefs_manager_system_font_changed,
+ NULL, NULL, NULL);
+
+ mateconf_client_notify_add (gedit_prefs_manager->mateconf_client,
+ GPM_TABS_DIR,
+ gedit_prefs_manager_tabs_size_changed,
+ NULL, NULL, NULL);
+
+ mateconf_client_notify_add (gedit_prefs_manager->mateconf_client,
+ GPM_WRAP_MODE_DIR,
+ gedit_prefs_manager_wrap_mode_changed,
+ NULL, NULL, NULL);
+
+ mateconf_client_notify_add (gedit_prefs_manager->mateconf_client,
+ GPM_LINE_NUMBERS_DIR,
+ gedit_prefs_manager_line_numbers_changed,
+ NULL, NULL, NULL);
+
+ mateconf_client_notify_add (gedit_prefs_manager->mateconf_client,
+ GPM_AUTO_INDENT_DIR,
+ gedit_prefs_manager_auto_indent_changed,
+ NULL, NULL, NULL);
+
+ mateconf_client_notify_add (gedit_prefs_manager->mateconf_client,
+ GPM_UNDO_DIR,
+ gedit_prefs_manager_undo_changed,
+ NULL, NULL, NULL);
+
+ mateconf_client_notify_add (gedit_prefs_manager->mateconf_client,
+ GPM_RIGHT_MARGIN_DIR,
+ gedit_prefs_manager_right_margin_changed,
+ NULL, NULL, NULL);
+
+ mateconf_client_notify_add (gedit_prefs_manager->mateconf_client,
+ GPM_SMART_HOME_END_DIR,
+ gedit_prefs_manager_smart_home_end_changed,
+ NULL, NULL, NULL);
+
+ mateconf_client_notify_add (gedit_prefs_manager->mateconf_client,
+ GPM_CURRENT_LINE_DIR,
+ gedit_prefs_manager_hl_current_line_changed,
+ NULL, NULL, NULL);
+
+ mateconf_client_notify_add (gedit_prefs_manager->mateconf_client,
+ GPM_BRACKET_MATCHING_DIR,
+ gedit_prefs_manager_bracket_matching_changed,
+ NULL, NULL, NULL);
+
+ mateconf_client_notify_add (gedit_prefs_manager->mateconf_client,
+ GPM_SYNTAX_HL_ENABLE,
+ gedit_prefs_manager_syntax_hl_enable_changed,
+ NULL, NULL, NULL);
+
+ mateconf_client_notify_add (gedit_prefs_manager->mateconf_client,
+ GPM_SEARCH_HIGHLIGHTING_ENABLE,
+ gedit_prefs_manager_search_hl_enable_changed,
+ NULL, NULL, NULL);
+
+ mateconf_client_notify_add (gedit_prefs_manager->mateconf_client,
+ GPM_SOURCE_STYLE_DIR,
+ gedit_prefs_manager_source_style_scheme_changed,
+ NULL, NULL, NULL);
+
+ mateconf_client_notify_add (gedit_prefs_manager->mateconf_client,
+ GPM_MAX_RECENTS,
+ gedit_prefs_manager_max_recents_changed,
+ NULL, NULL, NULL);
+
+ mateconf_client_notify_add (gedit_prefs_manager->mateconf_client,
+ GPM_SAVE_DIR,
+ gedit_prefs_manager_auto_save_changed,
+ NULL, NULL, NULL);
+
+ mateconf_client_notify_add (gedit_prefs_manager->mateconf_client,
+ GPM_ACTIVE_PLUGINS,
+ gedit_prefs_manager_active_plugins_changed,
+ NULL, NULL, NULL);
+
+ mateconf_client_notify_add (gedit_prefs_manager->mateconf_client,
+ GPM_LOCKDOWN_DIR,
+ gedit_prefs_manager_lockdown_changed,
+ NULL, NULL, NULL);
+ }
+
+ return gedit_prefs_manager != NULL;
+}
+
+/* This function must be called before exiting gedit */
+void
+gedit_prefs_manager_app_shutdown (void)
+{
+ gedit_debug (DEBUG_PREFS);
+
+ gedit_prefs_manager_shutdown ();
+
+ gedit_state_file_sync ();
+}
+
+
+static void
+gedit_prefs_manager_editor_font_changed (MateConfClient *client,
+ guint cnxn_id,
+ MateConfEntry *entry,
+ gpointer user_data)
+{
+ GList *views;
+ GList *l;
+ gchar *font = NULL;
+ gboolean def = TRUE;
+ gint ts;
+
+ gedit_debug (DEBUG_PREFS);
+
+ g_return_if_fail (entry->key != NULL);
+ g_return_if_fail (entry->value != NULL);
+
+ if (strcmp (entry->key, GPM_USE_DEFAULT_FONT) == 0)
+ {
+ if (entry->value->type == MATECONF_VALUE_BOOL)
+ def = mateconf_value_get_bool (entry->value);
+ else
+ def = GPM_DEFAULT_USE_DEFAULT_FONT;
+
+ if (def)
+ font = gedit_prefs_manager_get_system_font ();
+ else
+ font = gedit_prefs_manager_get_editor_font ();
+ }
+ else if (strcmp (entry->key, GPM_EDITOR_FONT) == 0)
+ {
+ if (entry->value->type == MATECONF_VALUE_STRING)
+ font = g_strdup (mateconf_value_get_string (entry->value));
+ else
+ font = g_strdup (GPM_DEFAULT_EDITOR_FONT);
+
+ def = gedit_prefs_manager_get_use_default_font ();
+ }
+ else
+ return;
+
+ g_return_if_fail (font != NULL);
+
+ ts = gedit_prefs_manager_get_tabs_size ();
+
+ views = gedit_app_get_views (gedit_app_get_default ());
+ l = views;
+
+ while (l != NULL)
+ {
+ /* Note: we use def=FALSE to avoid GeditView to query mateconf */
+ gedit_view_set_font (GEDIT_VIEW (l->data), FALSE, font);
+ gtk_source_view_set_tab_width (GTK_SOURCE_VIEW (l->data), ts);
+
+ l = l->next;
+ }
+
+ g_list_free (views);
+ g_free (font);
+}
+
+static void
+gedit_prefs_manager_system_font_changed (MateConfClient *client,
+ guint cnxn_id,
+ MateConfEntry *entry,
+ gpointer user_data)
+{
+ GList *views;
+ GList *l;
+ gchar *font;
+ gint ts;
+
+ gedit_debug (DEBUG_PREFS);
+
+ g_return_if_fail (entry->key != NULL);
+ g_return_if_fail (entry->value != NULL);
+
+ if (strcmp (entry->key, GPM_SYSTEM_FONT) != 0)
+ return;
+
+ if (!gedit_prefs_manager_get_use_default_font ())
+ return;
+
+ if (entry->value->type == MATECONF_VALUE_STRING)
+ font = g_strdup (mateconf_value_get_string (entry->value));
+ else
+ font = g_strdup (GPM_DEFAULT_SYSTEM_FONT);
+
+ ts = gedit_prefs_manager_get_tabs_size ();
+
+ views = gedit_app_get_views (gedit_app_get_default ());
+ l = views;
+
+ while (l != NULL)
+ {
+ /* Note: we use def=FALSE to avoid GeditView to query mateconf */
+ gedit_view_set_font (GEDIT_VIEW (l->data), FALSE, font);
+
+ gtk_source_view_set_tab_width (GTK_SOURCE_VIEW (l->data), ts);
+ l = l->next;
+ }
+
+ g_list_free (views);
+ g_free (font);
+}
+
+static void
+gedit_prefs_manager_tabs_size_changed (MateConfClient *client,
+ guint cnxn_id,
+ MateConfEntry *entry,
+ gpointer user_data)
+{
+ gedit_debug (DEBUG_PREFS);
+
+ g_return_if_fail (entry->key != NULL);
+ g_return_if_fail (entry->value != NULL);
+
+ if (strcmp (entry->key, GPM_TABS_SIZE) == 0)
+ {
+ gint tab_width;
+ GList *views;
+ GList *l;
+
+ if (entry->value->type == MATECONF_VALUE_INT)
+ tab_width = mateconf_value_get_int (entry->value);
+ else
+ tab_width = GPM_DEFAULT_TABS_SIZE;
+
+ tab_width = CLAMP (tab_width, 1, 24);
+
+ views = gedit_app_get_views (gedit_app_get_default ());
+ l = views;
+
+ while (l != NULL)
+ {
+ gtk_source_view_set_tab_width (GTK_SOURCE_VIEW (l->data),
+ tab_width);
+
+ l = l->next;
+ }
+
+ g_list_free (views);
+ }
+ else if (strcmp (entry->key, GPM_INSERT_SPACES) == 0)
+ {
+ gboolean enable;
+ GList *views;
+ GList *l;
+
+ if (entry->value->type == MATECONF_VALUE_BOOL)
+ enable = mateconf_value_get_bool (entry->value);
+ else
+ enable = GPM_DEFAULT_INSERT_SPACES;
+
+ views = gedit_app_get_views (gedit_app_get_default ());
+ l = views;
+
+ while (l != NULL)
+ {
+ gtk_source_view_set_insert_spaces_instead_of_tabs (
+ GTK_SOURCE_VIEW (l->data),
+ enable);
+
+ l = l->next;
+ }
+
+ g_list_free (views);
+ }
+}
+
+static GtkWrapMode
+get_wrap_mode_from_string (const gchar* str)
+{
+ GtkWrapMode res;
+
+ g_return_val_if_fail (str != NULL, GTK_WRAP_WORD);
+
+ if (strcmp (str, "GTK_WRAP_NONE") == 0)
+ res = GTK_WRAP_NONE;
+ else
+ {
+ if (strcmp (str, "GTK_WRAP_CHAR") == 0)
+ res = GTK_WRAP_CHAR;
+ else
+ res = GTK_WRAP_WORD;
+ }
+
+ return res;
+}
+
+static void
+gedit_prefs_manager_wrap_mode_changed (MateConfClient *client,
+ guint cnxn_id,
+ MateConfEntry *entry,
+ gpointer user_data)
+{
+ gedit_debug (DEBUG_PREFS);
+
+ g_return_if_fail (entry->key != NULL);
+ g_return_if_fail (entry->value != NULL);
+
+ if (strcmp (entry->key, GPM_WRAP_MODE) == 0)
+ {
+ GtkWrapMode wrap_mode;
+ GList *views;
+ GList *l;
+
+ if (entry->value->type == MATECONF_VALUE_STRING)
+ wrap_mode =
+ get_wrap_mode_from_string (mateconf_value_get_string (entry->value));
+ else
+ wrap_mode = get_wrap_mode_from_string (GPM_DEFAULT_WRAP_MODE);
+
+ views = gedit_app_get_views (gedit_app_get_default ());
+ l = views;
+
+ while (l != NULL)
+ {
+ gtk_text_view_set_wrap_mode (GTK_TEXT_VIEW (l->data),
+ wrap_mode);
+
+ l = l->next;
+ }
+
+ g_list_free (views);
+ }
+}
+
+static void
+gedit_prefs_manager_line_numbers_changed (MateConfClient *client,
+ guint cnxn_id,
+ MateConfEntry *entry,
+ gpointer user_data)
+{
+ gedit_debug (DEBUG_PREFS);
+
+ g_return_if_fail (entry->key != NULL);
+ g_return_if_fail (entry->value != NULL);
+
+ if (strcmp (entry->key, GPM_DISPLAY_LINE_NUMBERS) == 0)
+ {
+ gboolean dln;
+ GList *views;
+ GList *l;
+
+ if (entry->value->type == MATECONF_VALUE_BOOL)
+ dln = mateconf_value_get_bool (entry->value);
+ else
+ dln = GPM_DEFAULT_DISPLAY_LINE_NUMBERS;
+
+ views = gedit_app_get_views (gedit_app_get_default ());
+ l = views;
+
+ while (l != NULL)
+ {
+ gtk_source_view_set_show_line_numbers (GTK_SOURCE_VIEW (l->data),
+ dln);
+
+ l = l->next;
+ }
+
+ g_list_free (views);
+ }
+}
+
+static void
+gedit_prefs_manager_hl_current_line_changed (MateConfClient *client,
+ guint cnxn_id,
+ MateConfEntry *entry,
+ gpointer user_data)
+{
+ gedit_debug (DEBUG_PREFS);
+
+ g_return_if_fail (entry->key != NULL);
+ g_return_if_fail (entry->value != NULL);
+
+ if (strcmp (entry->key, GPM_HIGHLIGHT_CURRENT_LINE) == 0)
+ {
+ gboolean hl;
+ GList *views;
+ GList *l;
+
+ if (entry->value->type == MATECONF_VALUE_BOOL)
+ hl = mateconf_value_get_bool (entry->value);
+ else
+ hl = GPM_DEFAULT_HIGHLIGHT_CURRENT_LINE;
+
+ views = gedit_app_get_views (gedit_app_get_default ());
+ l = views;
+
+ while (l != NULL)
+ {
+ gtk_source_view_set_highlight_current_line (GTK_SOURCE_VIEW (l->data),
+ hl);
+
+ l = l->next;
+ }
+
+ g_list_free (views);
+ }
+}
+
+static void
+gedit_prefs_manager_bracket_matching_changed (MateConfClient *client,
+ guint cnxn_id,
+ MateConfEntry *entry,
+ gpointer user_data)
+{
+ gedit_debug (DEBUG_PREFS);
+
+ g_return_if_fail (entry->key != NULL);
+ g_return_if_fail (entry->value != NULL);
+
+ if (strcmp (entry->key, GPM_BRACKET_MATCHING) == 0)
+ {
+ gboolean enable;
+ GList *docs;
+ GList *l;
+
+ if (entry->value->type == MATECONF_VALUE_BOOL)
+ enable = mateconf_value_get_bool (entry->value);
+ else
+ enable = GPM_DEFAULT_BRACKET_MATCHING;
+
+ docs = gedit_app_get_documents (gedit_app_get_default ());
+ l = docs;
+
+ while (l != NULL)
+ {
+ gtk_source_buffer_set_highlight_matching_brackets (GTK_SOURCE_BUFFER (l->data),
+ enable);
+
+ l = l->next;
+ }
+
+ g_list_free (docs);
+ }
+}
+
+static void
+gedit_prefs_manager_auto_indent_changed (MateConfClient *client,
+ guint cnxn_id,
+ MateConfEntry *entry,
+ gpointer user_data)
+{
+ gedit_debug (DEBUG_PREFS);
+
+ g_return_if_fail (entry->key != NULL);
+ g_return_if_fail (entry->value != NULL);
+
+ if (strcmp (entry->key, GPM_AUTO_INDENT) == 0)
+ {
+ gboolean enable;
+ GList *views;
+ GList *l;
+
+ if (entry->value->type == MATECONF_VALUE_BOOL)
+ enable = mateconf_value_get_bool (entry->value);
+ else
+ enable = GPM_DEFAULT_AUTO_INDENT;
+
+ views = gedit_app_get_views (gedit_app_get_default ());
+ l = views;
+
+ while (l != NULL)
+ {
+ gtk_source_view_set_auto_indent (GTK_SOURCE_VIEW (l->data),
+ enable);
+
+ l = l->next;
+ }
+
+ g_list_free (views);
+ }
+}
+
+static void
+gedit_prefs_manager_undo_changed (MateConfClient *client,
+ guint cnxn_id,
+ MateConfEntry *entry,
+ gpointer user_data)
+{
+ gedit_debug (DEBUG_PREFS);
+
+ g_return_if_fail (entry->key != NULL);
+ g_return_if_fail (entry->value != NULL);
+
+ if (strcmp (entry->key, GPM_UNDO_ACTIONS_LIMIT) == 0)
+ {
+ gint ul;
+ GList *docs;
+ GList *l;
+
+ if (entry->value->type == MATECONF_VALUE_INT)
+ ul = mateconf_value_get_int (entry->value);
+ else
+ ul = GPM_DEFAULT_UNDO_ACTIONS_LIMIT;
+
+ ul = CLAMP (ul, -1, 250);
+
+ docs = gedit_app_get_documents (gedit_app_get_default ());
+ l = docs;
+
+ while (l != NULL)
+ {
+ gtk_source_buffer_set_max_undo_levels (GTK_SOURCE_BUFFER (l->data),
+ ul);
+
+ l = l->next;
+ }
+
+ g_list_free (docs);
+ }
+}
+
+static void
+gedit_prefs_manager_right_margin_changed (MateConfClient *client,
+ guint cnxn_id,
+ MateConfEntry *entry,
+ gpointer user_data)
+{
+ gedit_debug (DEBUG_PREFS);
+
+ g_return_if_fail (entry->key != NULL);
+ g_return_if_fail (entry->value != NULL);
+
+ if (strcmp (entry->key, GPM_RIGHT_MARGIN_POSITION) == 0)
+ {
+ gint pos;
+ GList *views;
+ GList *l;
+
+ if (entry->value->type == MATECONF_VALUE_INT)
+ pos = mateconf_value_get_int (entry->value);
+ else
+ pos = GPM_DEFAULT_RIGHT_MARGIN_POSITION;
+
+ pos = CLAMP (pos, 1, 160);
+
+ views = gedit_app_get_views (gedit_app_get_default ());
+ l = views;
+
+ while (l != NULL)
+ {
+ gtk_source_view_set_right_margin_position (GTK_SOURCE_VIEW (l->data),
+ pos);
+
+ l = l->next;
+ }
+
+ g_list_free (views);
+ }
+ else if (strcmp (entry->key, GPM_DISPLAY_RIGHT_MARGIN) == 0)
+ {
+ gboolean display;
+ GList *views;
+ GList *l;
+
+ if (entry->value->type == MATECONF_VALUE_BOOL)
+ display = mateconf_value_get_bool (entry->value);
+ else
+ display = GPM_DEFAULT_DISPLAY_RIGHT_MARGIN;
+
+ views = gedit_app_get_views (gedit_app_get_default ());
+ l = views;
+
+ while (l != NULL)
+ {
+ gtk_source_view_set_show_right_margin (GTK_SOURCE_VIEW (l->data),
+ display);
+
+ l = l->next;
+ }
+
+ g_list_free (views);
+ }
+}
+
+static GtkSourceSmartHomeEndType
+get_smart_home_end_from_string (const gchar *str)
+{
+ GtkSourceSmartHomeEndType res;
+
+ g_return_val_if_fail (str != NULL, GTK_SOURCE_SMART_HOME_END_AFTER);
+
+ if (strcmp (str, "DISABLED") == 0)
+ res = GTK_SOURCE_SMART_HOME_END_DISABLED;
+ else if (strcmp (str, "BEFORE") == 0)
+ res = GTK_SOURCE_SMART_HOME_END_BEFORE;
+ else if (strcmp (str, "ALWAYS") == 0)
+ res = GTK_SOURCE_SMART_HOME_END_ALWAYS;
+ else
+ res = GTK_SOURCE_SMART_HOME_END_AFTER;
+
+ return res;
+}
+
+static void
+gedit_prefs_manager_smart_home_end_changed (MateConfClient *client,
+ guint cnxn_id,
+ MateConfEntry *entry,
+ gpointer user_data)
+{
+ gedit_debug (DEBUG_PREFS);
+
+ g_return_if_fail (entry->key != NULL);
+ g_return_if_fail (entry->value != NULL);
+
+ if (strcmp (entry->key, GPM_SMART_HOME_END) == 0)
+ {
+ GtkSourceSmartHomeEndType smart_he;
+ GList *views;
+ GList *l;
+
+ if (entry->value->type == MATECONF_VALUE_STRING)
+ smart_he =
+ get_smart_home_end_from_string (mateconf_value_get_string (entry->value));
+ else
+ smart_he = get_smart_home_end_from_string (GPM_DEFAULT_SMART_HOME_END);
+
+ views = gedit_app_get_views (gedit_app_get_default ());
+ l = views;
+
+ while (l != NULL)
+ {
+ gtk_source_view_set_smart_home_end (GTK_SOURCE_VIEW (l->data),
+ smart_he);
+
+ l = l->next;
+ }
+
+ g_list_free (views);
+ }
+}
+
+static void
+gedit_prefs_manager_syntax_hl_enable_changed (MateConfClient *client,
+ guint cnxn_id,
+ MateConfEntry *entry,
+ gpointer user_data)
+{
+ gedit_debug (DEBUG_PREFS);
+
+ g_return_if_fail (entry->key != NULL);
+ g_return_if_fail (entry->value != NULL);
+
+ if (strcmp (entry->key, GPM_SYNTAX_HL_ENABLE) == 0)
+ {
+ gboolean enable;
+ GList *docs;
+ GList *l;
+ const GList *windows;
+
+ if (entry->value->type == MATECONF_VALUE_BOOL)
+ enable = mateconf_value_get_bool (entry->value);
+ else
+ enable = GPM_DEFAULT_SYNTAX_HL_ENABLE;
+
+ docs = gedit_app_get_documents (gedit_app_get_default ());
+ l = docs;
+
+ while (l != NULL)
+ {
+ g_return_if_fail (GTK_IS_SOURCE_BUFFER (l->data));
+
+ gtk_source_buffer_set_highlight_syntax (GTK_SOURCE_BUFFER (l->data),
+ enable);
+
+ l = l->next;
+ }
+
+ g_list_free (docs);
+
+ /* update the sensitivity of the Higlight Mode menu item */
+ windows = gedit_app_get_windows (gedit_app_get_default ());
+ while (windows != NULL)
+ {
+ GtkUIManager *ui;
+ GtkAction *a;
+
+ ui = gedit_window_get_ui_manager (GEDIT_WINDOW (windows->data));
+
+ a = gtk_ui_manager_get_action (ui,
+ "/MenuBar/ViewMenu/ViewHighlightModeMenu");
+
+ gtk_action_set_sensitive (a, enable);
+
+ windows = g_list_next (windows);
+ }
+ }
+}
+
+static void
+gedit_prefs_manager_search_hl_enable_changed (MateConfClient *client,
+ guint cnxn_id,
+ MateConfEntry *entry,
+ gpointer user_data)
+{
+ gedit_debug (DEBUG_PREFS);
+
+ g_return_if_fail (entry->key != NULL);
+ g_return_if_fail (entry->value != NULL);
+
+ if (strcmp (entry->key, GPM_SEARCH_HIGHLIGHTING_ENABLE) == 0)
+ {
+ gboolean enable;
+ GList *docs;
+ GList *l;
+
+ if (entry->value->type == MATECONF_VALUE_BOOL)
+ enable = mateconf_value_get_bool (entry->value);
+ else
+ enable = GPM_DEFAULT_SEARCH_HIGHLIGHTING_ENABLE;
+
+ docs = gedit_app_get_documents (gedit_app_get_default ());
+ l = docs;
+
+ while (l != NULL)
+ {
+ g_return_if_fail (GEDIT_IS_DOCUMENT (l->data));
+
+ gedit_document_set_enable_search_highlighting (GEDIT_DOCUMENT (l->data),
+ enable);
+
+ l = l->next;
+ }
+
+ g_list_free (docs);
+ }
+}
+
+static void
+gedit_prefs_manager_source_style_scheme_changed (MateConfClient *client,
+ guint cnxn_id,
+ MateConfEntry *entry,
+ gpointer user_data)
+{
+ gedit_debug (DEBUG_PREFS);
+
+ g_return_if_fail (entry->key != NULL);
+ g_return_if_fail (entry->value != NULL);
+
+ if (strcmp (entry->key, GPM_SOURCE_STYLE_SCHEME) == 0)
+ {
+ static gchar *old_scheme = NULL;
+ const gchar *scheme;
+ GtkSourceStyleScheme *style;
+ GList *docs;
+ GList *l;
+
+ if (entry->value->type == MATECONF_VALUE_STRING)
+ scheme = mateconf_value_get_string (entry->value);
+ else
+ scheme = GPM_DEFAULT_SOURCE_STYLE_SCHEME;
+
+ if (old_scheme != NULL && (strcmp (scheme, old_scheme) == 0))
+ return;
+
+ g_free (old_scheme);
+ old_scheme = g_strdup (scheme);
+
+ style = gtk_source_style_scheme_manager_get_scheme (
+ gedit_get_style_scheme_manager (),
+ scheme);
+
+ if (style == NULL)
+ {
+ g_warning ("Default style scheme '%s' not found, falling back to 'classic'", scheme);
+
+ style = gtk_source_style_scheme_manager_get_scheme (
+ gedit_get_style_scheme_manager (),
+ "classic");
+
+ if (style == NULL)
+ {
+ g_warning ("Style scheme 'classic' cannot be found, check your GtkSourceView installation.");
+ return;
+ }
+ }
+
+ docs = gedit_app_get_documents (gedit_app_get_default ());
+ for (l = docs; l != NULL; l = l->next)
+ {
+ g_return_if_fail (GTK_IS_SOURCE_BUFFER (l->data));
+
+ gtk_source_buffer_set_style_scheme (GTK_SOURCE_BUFFER (l->data),
+ style);
+ }
+
+ g_list_free (docs);
+ }
+}
+
+static void
+gedit_prefs_manager_max_recents_changed (MateConfClient *client,
+ guint cnxn_id,
+ MateConfEntry *entry,
+ gpointer user_data)
+{
+ gedit_debug (DEBUG_PREFS);
+
+ g_return_if_fail (entry->key != NULL);
+ g_return_if_fail (entry->value != NULL);
+
+ if (strcmp (entry->key, GPM_MAX_RECENTS) == 0)
+ {
+ const GList *windows;
+ gint max;
+
+ if (entry->value->type == MATECONF_VALUE_INT)
+ {
+ max = mateconf_value_get_int (entry->value);
+
+ if (max < 0)
+ max = GPM_DEFAULT_MAX_RECENTS;
+ }
+ else
+ max = GPM_DEFAULT_MAX_RECENTS;
+
+ windows = gedit_app_get_windows (gedit_app_get_default ());
+ while (windows != NULL)
+ {
+ GeditWindow *w = windows->data;
+
+ gtk_recent_chooser_set_limit (GTK_RECENT_CHOOSER (w->priv->toolbar_recent_menu),
+ max);
+
+ windows = g_list_next (windows);
+ }
+
+ /* FIXME: we have no way at the moment to trigger the
+ * update of the inline recents in the File menu */
+ }
+}
+
+static void
+gedit_prefs_manager_auto_save_changed (MateConfClient *client,
+ guint cnxn_id,
+ MateConfEntry *entry,
+ gpointer user_data)
+{
+ GList *docs;
+ GList *l;
+
+ gedit_debug (DEBUG_PREFS);
+
+ g_return_if_fail (entry->key != NULL);
+ g_return_if_fail (entry->value != NULL);
+
+ if (strcmp (entry->key, GPM_AUTO_SAVE) == 0)
+ {
+ gboolean auto_save;
+
+ if (entry->value->type == MATECONF_VALUE_BOOL)
+ auto_save = mateconf_value_get_bool (entry->value);
+ else
+ auto_save = GPM_DEFAULT_AUTO_SAVE;
+
+ docs = gedit_app_get_documents (gedit_app_get_default ());
+ l = docs;
+
+ while (l != NULL)
+ {
+ GeditDocument *doc = GEDIT_DOCUMENT (l->data);
+ GeditTab *tab = gedit_tab_get_from_document (doc);
+
+ gedit_tab_set_auto_save_enabled (tab, auto_save);
+
+ l = l->next;
+ }
+
+ g_list_free (docs);
+ }
+ else if (strcmp (entry->key, GPM_AUTO_SAVE_INTERVAL) == 0)
+ {
+ gint auto_save_interval;
+
+ if (entry->value->type == MATECONF_VALUE_INT)
+ {
+ auto_save_interval = mateconf_value_get_int (entry->value);
+
+ if (auto_save_interval <= 0)
+ auto_save_interval = GPM_DEFAULT_AUTO_SAVE_INTERVAL;
+ }
+ else
+ auto_save_interval = GPM_DEFAULT_AUTO_SAVE_INTERVAL;
+
+ docs = gedit_app_get_documents (gedit_app_get_default ());
+ l = docs;
+
+ while (l != NULL)
+ {
+ GeditDocument *doc = GEDIT_DOCUMENT (l->data);
+ GeditTab *tab = gedit_tab_get_from_document (doc);
+
+ gedit_tab_set_auto_save_interval (tab, auto_save_interval);
+
+ l = l->next;
+ }
+
+ g_list_free (docs);
+ }
+}
+
+static void
+gedit_prefs_manager_active_plugins_changed (MateConfClient *client,
+ guint cnxn_id,
+ MateConfEntry *entry,
+ gpointer user_data)
+{
+ gedit_debug (DEBUG_PREFS);
+
+ g_return_if_fail (entry->key != NULL);
+ g_return_if_fail (entry->value != NULL);
+
+ if (strcmp (entry->key, GPM_ACTIVE_PLUGINS) == 0)
+ {
+ if ((entry->value->type == MATECONF_VALUE_LIST) &&
+ (mateconf_value_get_list_type (entry->value) == MATECONF_VALUE_STRING))
+ {
+ GeditPluginsEngine *engine;
+
+ engine = gedit_plugins_engine_get_default ();
+
+ gedit_plugins_engine_active_plugins_changed (engine);
+ }
+ }
+}
+
+static void
+gedit_prefs_manager_lockdown_changed (MateConfClient *client,
+ guint cnxn_id,
+ MateConfEntry *entry,
+ gpointer user_data)
+{
+ GeditApp *app;
+ gboolean locked;
+
+ gedit_debug (DEBUG_PREFS);
+
+ g_return_if_fail (entry->key != NULL);
+ g_return_if_fail (entry->value != NULL);
+
+ if (entry->value->type == MATECONF_VALUE_BOOL)
+ locked = mateconf_value_get_bool (entry->value);
+ else
+ locked = FALSE;
+
+ app = gedit_app_get_default ();
+
+ if (strcmp (entry->key, GPM_LOCKDOWN_COMMAND_LINE) == 0)
+ _gedit_app_set_lockdown_bit (app,
+ GEDIT_LOCKDOWN_COMMAND_LINE,
+ locked);
+
+ else if (strcmp (entry->key, GPM_LOCKDOWN_PRINTING) == 0)
+ _gedit_app_set_lockdown_bit (app,
+ GEDIT_LOCKDOWN_PRINTING,
+ locked);
+
+ else if (strcmp (entry->key, GPM_LOCKDOWN_PRINT_SETUP) == 0)
+ _gedit_app_set_lockdown_bit (app,
+ GEDIT_LOCKDOWN_PRINT_SETUP,
+ locked);
+
+ else if (strcmp (entry->key, GPM_LOCKDOWN_SAVE_TO_DISK) == 0)
+ _gedit_app_set_lockdown_bit (app,
+ GEDIT_LOCKDOWN_SAVE_TO_DISK,
+ locked);
+}