summaryrefslogtreecommitdiff
path: root/src/core/prefs.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/prefs.c')
-rw-r--r--src/core/prefs.c1189
1 files changed, 278 insertions, 911 deletions
diff --git a/src/core/prefs.c b/src/core/prefs.c
index 816c80f0..aae8a315 100644
--- a/src/core/prefs.c
+++ b/src/core/prefs.c
@@ -27,9 +27,7 @@
#include "prefs.h"
#include "ui.h"
#include "util.h"
-#ifdef HAVE_MATECONF
-#include <mateconf/mateconf-client.h>
-#endif
+#include <gio/gio.h>
#include <string.h>
#include <stdlib.h>
@@ -40,39 +38,55 @@
#define SCREENSHOT_COMMAND_IDX (MAX_COMMANDS - 2)
#define WIN_SCREENSHOT_COMMAND_IDX (MAX_COMMANDS - 1)
-/* If you add a key, it needs updating in init() and in the mateconf
- * notify listener and of course in the .schemas file.
+/* If you add a key, it needs updating in init() and in the GSettings
+ * notify listener and of course in the .gschema file.
*
* Keys which are handled by one of the unified handlers below are
* not given a name here, because the purpose of the unified handlers
* is that keys should be referred to exactly once.
*/
-#define KEY_TITLEBAR_FONT "/apps/marco/general/titlebar_font"
-#define KEY_NUM_WORKSPACES "/apps/marco/general/num_workspaces"
-#define KEY_COMPOSITOR "/apps/marco/general/compositing_manager"
-#define KEY_COMPOSITOR_FAST_ALT_TAB "/apps/marco/general/compositing_fast_alt_tab"
-#define KEY_MATE_ACCESSIBILITY "/desktop/mate/interface/accessibility"
+#define KEY_GENERAL_SCHEMA "org.mate.Marco.general"
+#define KEY_GENERAL_TITLEBAR_FONT "titlebar-font"
+#define KEY_GENERAL_NUM_WORKSPACES "num-workspaces"
+#define KEY_GENERAL_COMPOSITOR "compositing-manager"
+#define KEY_GENERAL_COMPOSITOR_FAST_ALT_TAB "compositing-fast-alt-tab"
-#define KEY_COMMAND_DIRECTORY "/apps/marco/keybinding_commands"
-#define KEY_COMMAND_PREFIX "/apps/marco/keybinding_commands/command_"
+#define KEY_COMMAND_SCHEMA "org.mate.Marco.keybinding-commands"
+#define KEY_COMMAND_PREFIX "command-"
-#define KEY_TERMINAL_DIR "/desktop/mate/applications/terminal"
-#define KEY_TERMINAL_COMMAND KEY_TERMINAL_DIR "/exec"
+#define KEY_SCREEN_BINDINGS_SCHEMA "org.mate.Marco.global-keybindings"
-#define KEY_SCREEN_BINDINGS_PREFIX "/apps/marco/global_keybindings"
-#define KEY_WINDOW_BINDINGS_PREFIX "/apps/marco/window_keybindings"
-#define KEY_LIST_BINDINGS_SUFFIX "_list"
+#define KEY_WINDOW_BINDINGS_SCHEMA "org.mate.Marco.window-keybindings"
-#define KEY_WORKSPACE_NAME_DIRECTORY "/apps/marco/workspace_names"
-#define KEY_WORKSPACE_NAME_PREFIX "/apps/marco/workspace_names/name_"
+#define KEY_WORKSPACE_NAME_SCHEMA "org.mate.Marco.workspace-names"
+#define KEY_WORKSPACE_NAME_PREFIX "name-"
+#define KEY_MATE_INTERFACE_SCHEMA "org.mate.interface"
+#define KEY_MATE_INTERFACE_ACCESSIBILITY "accessibility"
+#define KEY_MATE_INTERFACE_ENABLE_ANIMATIONS "enable-animations"
+
+#define KEY_MATE_TERMINAL_SCHEMA "org.mate.applications-terminal"
+#define KEY_MATE_TERMINAL_COMMAND "exec"
+
+#define KEY_MATE_MOUSE_SCHEMA "org.mate.peripherals-mouse"
+#define KEY_MATE_MOUSE_CURSOR_THEME "cursor-theme"
+#define KEY_MATE_MOUSE_CURSOR_SIZE "cursor-size"
+
+#define SETTINGS(s) g_hash_table_lookup (settings_schemas, (s))
+
+static GSettings *settings_general;
+static GSettings *settings_command;
+static GSettings *settings_screen_bindings;
+static GSettings *settings_window_bindings;
+static GSettings *settings_workspace_names;
+static GSettings *settings_mate_interface;
+static GSettings *settings_mate_terminal;
+static GSettings *settings_mate_mouse;
+static GHashTable *settings_schemas;
-#ifdef HAVE_MATECONF
-static MateConfClient *default_client = NULL;
static GList *changes = NULL;
static guint changed_idle;
static GList *listeners = NULL;
-#endif
static gboolean use_system_font = FALSE;
static PangoFontDescription *titlebar_font = NULL;
@@ -112,42 +126,24 @@ static char *terminal_command = NULL;
static char *workspace_names[MAX_REASONABLE_WORKSPACES] = { NULL, };
-#ifdef HAVE_MATECONF
-static gboolean handle_preference_update_enum (const gchar *key, MateConfValue *value);
+static gboolean handle_preference_update_enum (const gchar *key, GSettings *settings);
static gboolean update_key_binding (const char *name,
- const char *value);
-static gboolean find_and_update_list_binding (MetaKeyPref *bindings,
- const char *name,
- GSList *value);
-static gboolean update_key_list_binding (const char *name,
- GSList *value);
+ gchar *value);
static gboolean update_command (const char *name,
const char *value);
static gboolean update_workspace_name (const char *name,
const char *value);
-static void change_notify (MateConfClient *client,
- guint cnxn_id,
- MateConfEntry *entry,
- gpointer user_data);
+static void change_notify (GSettings *settings,
+ gchar *key,
+ gpointer user_data);
-static char* mateconf_key_for_workspace_name (int i);
+static char* settings_key_for_workspace_name (int i);
static void queue_changed (MetaPreference pref);
-typedef enum
- {
- META_LIST_OF_STRINGS,
- META_LIST_OF_MATECONFVALUE_STRINGS
- } MetaStringListType;
-
-static gboolean update_list_binding (MetaKeyPref *binding,
- GSList *value,
- MetaStringListType type_of_value);
-
static void cleanup_error (GError **error);
-static gboolean get_bool (const char *key, gboolean *val);
static void maybe_give_disable_workarounds_warning (void);
static void titlebar_handler (MetaPreference, const gchar*, gboolean*);
@@ -155,74 +151,19 @@ static void theme_name_handler (MetaPreference, const gchar*, gboolean*);
static void mouse_button_mods_handler (MetaPreference, const gchar*, gboolean*);
static void button_layout_handler (MetaPreference, const gchar*, gboolean*);
-#endif /* HAVE_MATECONF */
-
static gboolean update_binding (MetaKeyPref *binding,
- const char *value);
+ gchar *value);
static void init_bindings (void);
static void init_commands (void);
static void init_workspace_names (void);
-#ifndef HAVE_MATECONF
-static void init_button_layout (void);
-#endif /* !HAVE_MATECONF */
-
-#ifdef HAVE_MATECONF
-
typedef struct
{
MetaPrefsChangedFunc func;
gpointer data;
} MetaPrefsListener;
-static MateConfEnumStringPair symtab_focus_mode[] =
- {
- { META_FOCUS_MODE_CLICK, "click" },
- { META_FOCUS_MODE_SLOPPY, "sloppy" },
- { META_FOCUS_MODE_MOUSE, "mouse" },
- { 0, NULL },
- };
-
-static MateConfEnumStringPair symtab_focus_new_windows[] =
- {
- { META_FOCUS_NEW_WINDOWS_SMART, "smart" },
- { META_FOCUS_NEW_WINDOWS_STRICT, "strict" },
- { 0, NULL },
- };
-
-static MateConfEnumStringPair symtab_wrap_style[] =
- {
- { META_WRAP_NONE, "no wrap" },
- { META_WRAP_CLASSIC, "classic" },
- { META_WRAP_TOROIDAL, "toroidal" },
- { 0, NULL },
- };
-
-static MateConfEnumStringPair symtab_visual_bell_type[] =
- {
- /* Note to the reader: 0 is an invalid value; these start at 1. */
- { META_VISUAL_BELL_FULLSCREEN_FLASH, "fullscreen" },
- { META_VISUAL_BELL_FRAME_FLASH, "frame_flash" },
- { 0, NULL },
- };
-
-static MateConfEnumStringPair symtab_titlebar_action[] =
- {
- { META_ACTION_TITLEBAR_TOGGLE_SHADE, "toggle_shade" },
- { META_ACTION_TITLEBAR_TOGGLE_MAXIMIZE, "toggle_maximize" },
- { META_ACTION_TITLEBAR_TOGGLE_MAXIMIZE_HORIZONTALLY,
- "toggle_maximize_horizontally" },
- { META_ACTION_TITLEBAR_TOGGLE_MAXIMIZE_VERTICALLY,
- "toggle_maximize_vertically" },
- { META_ACTION_TITLEBAR_MINIMIZE, "minimize" },
- { META_ACTION_TITLEBAR_NONE, "none" },
- { META_ACTION_TITLEBAR_LOWER, "lower" },
- { META_ACTION_TITLEBAR_MENU, "menu" },
- { META_ACTION_TITLEBAR_TOGGLE_SHADE, "toggle_shade" },
- { 0, NULL },
- };
-
/**
* The details of one preference which is constrained to be
* one of a small number of string values-- in other words,
@@ -255,14 +196,15 @@ static MateConfEnumStringPair symtab_titlebar_action[] =
typedef struct
{
gchar *key;
+ gchar *schema;
MetaPreference pref;
- MateConfEnumStringPair *symtab;
- gpointer target;
+ gint *target;
} MetaEnumPreference;
typedef struct
{
gchar *key;
+ gchar *schema;
MetaPreference pref;
gboolean *target;
gboolean becomes_true_on_destruction;
@@ -271,6 +213,7 @@ typedef struct
typedef struct
{
gchar *key;
+ gchar *schema;
MetaPreference pref;
/**
@@ -306,6 +249,7 @@ typedef struct
typedef struct
{
gchar *key;
+ gchar *schema;
MetaPreference pref;
gint *target;
/**
@@ -328,152 +272,172 @@ typedef struct
static MetaEnumPreference preferences_enum[] =
{
- { "/apps/marco/general/focus_new_windows",
+ { "focus-new-windows",
+ KEY_GENERAL_SCHEMA,
META_PREF_FOCUS_NEW_WINDOWS,
- symtab_focus_new_windows,
&focus_new_windows,
},
- { "/apps/marco/general/focus_mode",
+ { "focus-mode",
+ KEY_GENERAL_SCHEMA,
META_PREF_FOCUS_MODE,
- symtab_focus_mode,
&focus_mode,
},
- { "/apps/marco/general/wrap_style",
+ { "wrap-style",
+ KEY_GENERAL_SCHEMA,
META_PREF_WRAP_STYLE,
- symtab_wrap_style,
&wrap_style,
},
- { "/apps/marco/general/visual_bell_type",
+ { "visual-bell-type",
+ KEY_GENERAL_SCHEMA,
META_PREF_VISUAL_BELL_TYPE,
- symtab_visual_bell_type,
&visual_bell_type,
},
- { "/apps/marco/general/action_double_click_titlebar",
+ { "action-double-click-titlebar",
+ KEY_GENERAL_SCHEMA,
META_PREF_ACTION_DOUBLE_CLICK_TITLEBAR,
- symtab_titlebar_action,
&action_double_click_titlebar,
},
- { "/apps/marco/general/action_middle_click_titlebar",
+ { "action-middle-click-titlebar",
+ KEY_GENERAL_SCHEMA,
META_PREF_ACTION_MIDDLE_CLICK_TITLEBAR,
- symtab_titlebar_action,
&action_middle_click_titlebar,
},
- { "/apps/marco/general/action_right_click_titlebar",
+ { "action-right-click-titlebar",
+ KEY_GENERAL_SCHEMA,
META_PREF_ACTION_RIGHT_CLICK_TITLEBAR,
- symtab_titlebar_action,
&action_right_click_titlebar,
},
- { NULL, 0, NULL, NULL },
+ { NULL, NULL, 0, NULL },
};
static MetaBoolPreference preferences_bool[] =
{
- { "/apps/marco/general/raise_on_click",
+ { "raise-on-click",
+ KEY_GENERAL_SCHEMA,
META_PREF_RAISE_ON_CLICK,
&raise_on_click,
TRUE,
},
- { "/apps/marco/general/titlebar_uses_system_font",
+ { "titlebar-uses-system-font",
+ KEY_GENERAL_SCHEMA,
META_PREF_TITLEBAR_FONT, /* note! shares a pref */
&use_system_font,
TRUE,
},
- { "/apps/marco/general/application_based",
+ { "application-based",
+ KEY_GENERAL_SCHEMA,
META_PREF_APPLICATION_BASED,
NULL, /* feature is known but disabled */
FALSE,
},
- { "/apps/marco/general/disable_workarounds",
+ { "disable-workarounds",
+ KEY_GENERAL_SCHEMA,
META_PREF_DISABLE_WORKAROUNDS,
&disable_workarounds,
FALSE,
},
- { "/apps/marco/general/auto_raise",
+ { "auto-raise",
+ KEY_GENERAL_SCHEMA,
META_PREF_AUTO_RAISE,
&auto_raise,
FALSE,
},
- { "/apps/marco/general/visual_bell",
+ { "visual-bell",
+ KEY_GENERAL_SCHEMA,
META_PREF_VISUAL_BELL,
&provide_visual_bell, /* FIXME: change the name: it's confusing */
FALSE,
},
- { "/apps/marco/general/audible_bell",
+ { "audible-bell",
+ KEY_GENERAL_SCHEMA,
META_PREF_AUDIBLE_BELL,
&bell_is_audible, /* FIXME: change the name: it's confusing */
FALSE,
},
- { "/apps/marco/general/reduced_resources",
+ { "reduced-resources",
+ KEY_GENERAL_SCHEMA,
META_PREF_REDUCED_RESOURCES,
&reduced_resources,
FALSE,
},
- { "/desktop/mate/interface/accessibility",
+ { "accessibility",
+ KEY_MATE_INTERFACE_SCHEMA,
META_PREF_MATE_ACCESSIBILITY,
&mate_accessibility,
FALSE,
},
- { "/desktop/mate/interface/enable_animations",
+ { "enable-animations",
+ KEY_MATE_INTERFACE_SCHEMA,
META_PREF_MATE_ANIMATIONS,
&mate_animations,
TRUE,
},
- { "/apps/marco/general/compositing_manager",
+ { "compositing-manager",
+ KEY_GENERAL_SCHEMA,
META_PREF_COMPOSITING_MANAGER,
&compositing_manager,
FALSE,
},
- { "/apps/marco/general/compositing_fast_alt_tab",
+ { "compositing-fast-alt-tab",
+ KEY_GENERAL_SCHEMA,
META_PREF_COMPOSITING_FAST_ALT_TAB,
&compositing_fast_alt_tab,
FALSE,
},
- { "/apps/marco/general/resize_with_right_button",
+ { "resize-with-right-button",
+ KEY_GENERAL_SCHEMA,
META_PREF_RESIZE_WITH_RIGHT_BUTTON,
&resize_with_right_button,
FALSE,
},
- { NULL, 0, NULL, FALSE },
+ { NULL, NULL, 0, NULL, FALSE },
};
static MetaStringPreference preferences_string[] =
{
- { "/apps/marco/general/mouse_button_modifier",
+ { "mouse-button-modifier",
+ KEY_GENERAL_SCHEMA,
META_PREF_MOUSE_BUTTON_MODS,
mouse_button_mods_handler,
NULL,
},
- { "/apps/marco/general/theme",
+ { "theme",
+ KEY_GENERAL_SCHEMA,
META_PREF_THEME,
theme_name_handler,
NULL,
},
- { KEY_TITLEBAR_FONT,
+ { KEY_GENERAL_TITLEBAR_FONT,
+ KEY_GENERAL_SCHEMA,
META_PREF_TITLEBAR_FONT,
titlebar_handler,
NULL,
},
- { KEY_TERMINAL_COMMAND,
+ { KEY_MATE_TERMINAL_COMMAND,
+ KEY_MATE_TERMINAL_SCHEMA,
META_PREF_TERMINAL_COMMAND,
NULL,
&terminal_command,
},
- { "/apps/marco/general/button_layout",
+ { "button-layout",
+ KEY_GENERAL_SCHEMA,
META_PREF_BUTTON_LAYOUT,
button_layout_handler,
NULL,
},
- { "/desktop/mate/peripherals/mouse/cursor_theme",
+ { "cursor-theme",
+ KEY_MATE_MOUSE_SCHEMA,
META_PREF_CURSOR_THEME,
NULL,
&cursor_theme,
},
- { NULL, 0, NULL, NULL },
+ { NULL, NULL, 0, NULL, NULL },
};
static MetaIntPreference preferences_int[] =
{
- { "/apps/marco/general/num_workspaces",
+ { "num-workspaces",
+ KEY_GENERAL_SCHEMA,
META_PREF_NUM_WORKSPACES,
&num_workspaces,
/* I would actually recommend we change the destroy value to 4
@@ -482,18 +446,20 @@ static MetaIntPreference preferences_int[] =
*/
1, MAX_REASONABLE_WORKSPACES, METAINTPREFERENCE_NO_CHANGE_ON_DESTROY,
},
- { "/apps/marco/general/auto_raise_delay",
+ { "auto-raise-delay",
+ KEY_GENERAL_SCHEMA,
META_PREF_AUTO_RAISE_DELAY,
&auto_raise_delay,
0, 10000, 0,
/* @@@ Get rid of MAX_REASONABLE_AUTO_RAISE_DELAY */
},
- { "/desktop/mate/peripherals/mouse/cursor_size",
+ { "cursor-size",
+ KEY_MATE_MOUSE_SCHEMA,
META_PREF_CURSOR_SIZE,
&cursor_size,
1, 128, 24,
},
- { NULL, 0, NULL, 0, 0, 0, },
+ { NULL, NULL, 0, NULL, 0, 0, 0, },
};
static void
@@ -503,8 +469,7 @@ handle_preference_init_enum (void)
while (cursor->key!=NULL)
{
- char *value;
- GError *error = NULL;
+ gint value;
if (cursor->target==NULL)
{
@@ -512,24 +477,9 @@ handle_preference_init_enum (void)
continue;
}
- value = mateconf_client_get_string (default_client,
- cursor->key,
- &error);
- cleanup_error (&error);
-
- if (value==NULL)
- {
- ++cursor;
- continue;
- }
-
- if (!mateconf_string_to_enum (cursor->symtab,
- value,
- (gint *) cursor->target))
- meta_warning (_("MateConf key '%s' is set to an invalid value\n"),
- cursor->key);
-
- g_free (value);
+ value = g_settings_get_enum (SETTINGS (cursor->schema),
+ cursor->key);
+ *cursor->target = value;
++cursor;
}
@@ -543,7 +493,7 @@ handle_preference_init_bool (void)
while (cursor->key!=NULL)
{
if (cursor->target!=NULL)
- get_bool (cursor->key, cursor->target);
+ *cursor->target = g_settings_get_boolean (SETTINGS (cursor->schema), cursor->key);
++cursor;
}
@@ -558,15 +508,12 @@ handle_preference_init_string (void)
while (cursor->key!=NULL)
{
- char *value;
- GError *error = NULL;
+ gchar *value;
gboolean dummy = TRUE;
/* the string "value" will be newly allocated */
- value = mateconf_client_get_string (default_client,
- cursor->key,
- &error);
- cleanup_error (&error);
+ value = g_settings_get_string (SETTINGS (cursor->schema),
+ cursor->key);
if (cursor->handler)
{
@@ -598,16 +545,14 @@ handle_preference_init_int (void)
while (cursor->key!=NULL)
{
gint value;
- GError *error = NULL;
- value = mateconf_client_get_int (default_client,
- cursor->key,
- &error);
- cleanup_error (&error);
+ value = g_settings_get_int (SETTINGS (cursor->schema),
+ cursor->key);
if (value < cursor->minimum || value > cursor->maximum)
{
- meta_warning (_("%d stored in MateConf key %s is out of range %d to %d\n"),
+ /* FIXME: check if this can be avoided by GSettings */
+ meta_warning (_("%d stored in GSettings key %s is out of range %d to %d\n"),
value, cursor->key, cursor->minimum, cursor->maximum);
/* Former behaviour for out-of-range values was:
* - number of workspaces was clamped;
@@ -628,7 +573,7 @@ handle_preference_init_int (void)
}
static gboolean
-handle_preference_update_enum (const gchar *key, MateConfValue *value)
+handle_preference_update_enum (const gchar *key, GSettings *settings)
{
MetaEnumPreference *cursor = preferences_enum;
gint old_value;
@@ -639,23 +584,6 @@ handle_preference_update_enum (const gchar *key, MateConfValue *value)
if (cursor->key==NULL)
/* Didn't recognise that key. */
return FALSE;
-
- /* Setting it to null (that is, removing it) always means
- * "don't change".
- */
-
- if (value==NULL)
- return TRUE;
-
- /* Check the type. Enums are always strings. */
-
- if (value->type != MATECONF_VALUE_STRING)
- {
- meta_warning (_("MateConf key \"%s\" is set to an invalid type\n"),
- key);
- /* But we did recognise it. */
- return TRUE;
- }
/* We need to know whether the value changes, so
* store the current value away.
@@ -664,27 +592,7 @@ handle_preference_update_enum (const gchar *key, MateConfValue *value)
old_value = * ((gint *) cursor->target);
/* Now look it up... */
-
- if (!mateconf_string_to_enum (cursor->symtab,
- mateconf_value_get_string (value),
- (gint *) cursor->target))
- {
- /*
- * We found it, but it was invalid. Complain.
- *
- * FIXME: This replicates the original behaviour, but in the future
- * we might consider reverting invalid keys to their original values.
- * (We know the old value, so we can look up a suitable string in
- * the symtab.)
- *
- * (Empty comment follows so the translators don't see this.)
- */
-
- /* */
- meta_warning (_("MateConf key '%s' is set to an invalid value\n"),
- key);
- return TRUE;
- }
+ *cursor->target = g_settings_get_int (settings, key);
/* Did it change? If so, tell the listeners about it. */
@@ -695,7 +603,7 @@ handle_preference_update_enum (const gchar *key, MateConfValue *value)
}
static gboolean
-handle_preference_update_bool (const gchar *key, MateConfValue *value)
+handle_preference_update_bool (const gchar *key, GSettings *settings)
{
MetaBoolPreference *cursor = preferences_bool;
gboolean old_value;
@@ -710,29 +618,6 @@ handle_preference_update_bool (const gchar *key, MateConfValue *value)
if (cursor->target==NULL)
/* No work for us to do. */
return TRUE;
-
- if (value==NULL)
- {
- /* Value was destroyed; let's get out of here. */
-
- if (cursor->becomes_true_on_destruction)
- /* This preserves the behaviour of the old system, but
- * for all I know that might have been an oversight.
- */
- *((gboolean *)cursor->target) = TRUE;
-
- return TRUE;
- }
-
- /* Check the type. */
-
- if (value->type != MATECONF_VALUE_BOOL)
- {
- meta_warning (_("MateConf key \"%s\" is set to an invalid type\n"),
- key);
- /* But we did recognise it. */
- return TRUE;
- }
/* We need to know whether the value changes, so
* store the current value away.
@@ -742,7 +627,7 @@ handle_preference_update_bool (const gchar *key, MateConfValue *value)
/* Now look it up... */
- *((gboolean *) cursor->target) = mateconf_value_get_bool (value);
+ *((gboolean *) cursor->target) = g_settings_get_boolean (settings, key);
/* Did it change? If so, tell the listeners about it. */
@@ -756,10 +641,10 @@ handle_preference_update_bool (const gchar *key, MateConfValue *value)
}
static gboolean
-handle_preference_update_string (const gchar *key, MateConfValue *value)
+handle_preference_update_string (const gchar *key, GSettings *settings)
{
MetaStringPreference *cursor = preferences_string;
- const gchar *value_as_string;
+ gchar *value;
gboolean inform_listeners = TRUE;
while (cursor->key!=NULL && strcmp (key, cursor->key)!=0)
@@ -769,51 +654,39 @@ handle_preference_update_string (const gchar *key, MateConfValue *value)
/* Didn't recognise that key. */
return FALSE;
- if (value==NULL)
- return TRUE;
-
- /* Check the type. */
-
- if (value->type != MATECONF_VALUE_STRING)
- {
- meta_warning (_("MateConf key \"%s\" is set to an invalid type\n"),
- key);
- /* But we did recognise it. */
- return TRUE;
- }
-
- /* Docs: "The returned string is not a copy, don't try to free it." */
- value_as_string = mateconf_value_get_string (value);
+ value = g_settings_get_string (settings, key);
if (cursor->handler)
- cursor->handler (cursor->pref, value_as_string, &inform_listeners);
+ cursor->handler (cursor->pref, value, &inform_listeners);
else if (cursor->target)
{
if (*(cursor->target))
g_free(*(cursor->target));
- if (value_as_string!=NULL)
- *(cursor->target) = g_strdup (value_as_string);
+ if (value!=NULL)
+ *(cursor->target) = g_strdup (value);
else
*(cursor->target) = NULL;
inform_listeners =
- (value_as_string==NULL && *(cursor->target)==NULL) ||
- (value_as_string!=NULL && *(cursor->target)!=NULL &&
- strcmp (value_as_string, *(cursor->target))==0);
+ (value==NULL && *(cursor->target)==NULL) ||
+ (value!=NULL && *(cursor->target)!=NULL &&
+ strcmp (value, *(cursor->target))==0);
}
if (inform_listeners)
queue_changed (cursor->pref);
+ g_free (value);
+
return TRUE;
}
static gboolean
-handle_preference_update_int (const gchar *key, MateConfValue *value)
+handle_preference_update_int (const gchar *key, GSettings *settings)
{
MetaIntPreference *cursor = preferences_int;
- gint new_value;
+ gint value;
while (cursor->key!=NULL && strcmp (key, cursor->key)!=0)
++cursor;
@@ -825,42 +698,24 @@ handle_preference_update_int (const gchar *key, MateConfValue *value)
if (cursor->target==NULL)
/* No work for us to do. */
return TRUE;
-
- if (value==NULL)
- {
- /* Value was destroyed. */
- if (cursor->value_if_destroyed != METAINTPREFERENCE_NO_CHANGE_ON_DESTROY)
- *((gint *)cursor->target) = cursor->value_if_destroyed;
+ value = g_settings_get_int (settings, key);
- return TRUE;
- }
-
- /* Check the type. */
-
- if (value->type != MATECONF_VALUE_INT)
+ if (value < cursor->minimum || value > cursor->maximum)
{
- meta_warning (_("MateConf key \"%s\" is set to an invalid type\n"),
- key);
- /* But we did recognise it. */
- return TRUE;
- }
-
- new_value = mateconf_value_get_int (value);
-
- if (new_value < cursor->minimum || new_value > cursor->maximum)
- {
- meta_warning (_("%d stored in MateConf key %s is out of range %d to %d\n"),
- new_value, cursor->key,
+ /* FIXME! GSettings, instead of MateConf, has Minimum/Maximun in schema!
+ * But some preferences depends on costants for minimum/maximum values */
+ meta_warning (_("%d stored in GSettings key %s is out of range %d to %d\n"),
+ value, cursor->key,
cursor->minimum, cursor->maximum);
return TRUE;
}
/* Did it change? If so, tell the listeners about it. */
- if (*cursor->target != new_value)
+ if (*cursor->target != value)
{
- *cursor->target = new_value;
+ *cursor->target = value;
queue_changed (cursor->pref);
}
@@ -868,7 +723,7 @@ handle_preference_update_int (const gchar *key, MateConfValue *value)
}
-
+
/****************************************************************************/
/* Listeners. */
/****************************************************************************/
@@ -977,70 +832,43 @@ queue_changed (MetaPreference pref)
meta_topic (META_DEBUG_PREFS, "Change of pref %s was already pending\n",
meta_preference_to_string (pref));
- /* add idle at priority below the mateconf notify idle */
+ /* add idle at priority below the GSettings notify idle */
+ /* FIXME is this needed for GSettings too? */
if (changed_idle == 0)
changed_idle = g_idle_add_full (META_PRIORITY_PREFS_NOTIFY,
changed_idle_handler, NULL, NULL);
}
-#else /* HAVE_MATECONF */
-
-void
-meta_prefs_add_listener (MetaPrefsChangedFunc func,
- gpointer data)
-{
- /* Nothing, because they have mateconf turned off */
-}
-void
-meta_prefs_remove_listener (MetaPrefsChangedFunc func,
- gpointer data)
-{
- /* Nothing, because they have mateconf turned off */
-}
-
-#endif /* HAVE_MATECONF */
-
-
/****************************************************************************/
/* Initialisation. */
/****************************************************************************/
-#ifdef HAVE_MATECONF
-/* @@@ again, use glib's ability to tell you the size of the array */
-static gchar *mateconf_dirs_we_are_interested_in[] = {
- "/apps/marco",
- KEY_TERMINAL_DIR,
- KEY_MATE_ACCESSIBILITY,
- "/desktop/mate/peripherals/mouse",
- "/desktop/mate/interface",
- NULL,
-};
-#endif
-
void
meta_prefs_init (void)
{
-#ifdef HAVE_MATECONF
- GError *err = NULL;
- gchar **mateconf_dir_cursor;
-
- if (default_client != NULL)
+ if (settings_general != NULL)
return;
- /* returns a reference which we hold forever */
- default_client = mateconf_client_get_default ();
-
- for (mateconf_dir_cursor=mateconf_dirs_we_are_interested_in;
- *mateconf_dir_cursor!=NULL;
- mateconf_dir_cursor++)
- {
- mateconf_client_add_dir (default_client,
- *mateconf_dir_cursor,
- MATECONF_CLIENT_PRELOAD_RECURSIVE,
- &err);
- cleanup_error (&err);
- }
+ /* returns references which we hold forever */
+ settings_general = g_settings_new (KEY_GENERAL_SCHEMA);
+ settings_command = g_settings_new (KEY_COMMAND_SCHEMA);
+ settings_screen_bindings = g_settings_new (KEY_SCREEN_BINDINGS_SCHEMA);
+ settings_window_bindings = g_settings_new (KEY_WINDOW_BINDINGS_SCHEMA);
+ settings_workspace_names = g_settings_new (KEY_WORKSPACE_NAME_SCHEMA);
+ settings_mate_interface = g_settings_new (KEY_MATE_INTERFACE_SCHEMA);
+ settings_mate_terminal = g_settings_new (KEY_MATE_TERMINAL_SCHEMA);
+ settings_mate_mouse = g_settings_new (KEY_MATE_MOUSE_SCHEMA);
+
+ settings_schemas = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, g_object_unref);
+ g_hash_table_insert (settings_schemas, KEY_GENERAL_SCHEMA, settings_general);
+ g_hash_table_insert (settings_schemas, KEY_COMMAND_SCHEMA, settings_command);
+ g_hash_table_insert (settings_schemas, KEY_SCREEN_BINDINGS_SCHEMA, settings_screen_bindings);
+ g_hash_table_insert (settings_schemas, KEY_WINDOW_BINDINGS_SCHEMA, settings_window_bindings);
+ g_hash_table_insert (settings_schemas, KEY_WORKSPACE_NAME_SCHEMA, settings_workspace_names);
+ g_hash_table_insert (settings_schemas, KEY_MATE_INTERFACE_SCHEMA, settings_mate_interface);
+ g_hash_table_insert (settings_schemas, KEY_MATE_TERMINAL_SCHEMA, settings_mate_terminal);
+ g_hash_table_insert (settings_schemas, KEY_MATE_MOUSE_SCHEMA, settings_mate_mouse);
/* Pick up initial values. */
@@ -1049,46 +877,28 @@ meta_prefs_init (void)
handle_preference_init_string ();
handle_preference_init_int ();
- /* @@@ Is there any reason we don't do the add_dir here? */
- for (mateconf_dir_cursor=mateconf_dirs_we_are_interested_in;
- *mateconf_dir_cursor!=NULL;
- mateconf_dir_cursor++)
- {
- mateconf_client_notify_add (default_client,
- *mateconf_dir_cursor,
- change_notify,
- NULL,
- NULL,
- &err);
- cleanup_error (&err);
- }
+ g_signal_connect (settings_general, "changed", G_CALLBACK (change_notify), NULL);
+ g_signal_connect (settings_command, "changed", G_CALLBACK (change_notify), NULL);
+ g_signal_connect (settings_screen_bindings, "changed", G_CALLBACK (change_notify), NULL);
+ g_signal_connect (settings_window_bindings, "changed", G_CALLBACK (change_notify), NULL);
+ g_signal_connect (settings_workspace_names, "changed", G_CALLBACK (change_notify), NULL);
-#else /* HAVE_MATECONF */
+ g_signal_connect (settings_mate_interface, "changed::" KEY_MATE_INTERFACE_ACCESSIBILITY, G_CALLBACK (change_notify), NULL);
+ g_signal_connect (settings_mate_interface, "changed::" KEY_MATE_INTERFACE_ENABLE_ANIMATIONS, G_CALLBACK (change_notify), NULL);
+ g_signal_connect (settings_mate_terminal, "changed::" KEY_MATE_TERMINAL_COMMAND, G_CALLBACK (change_notify), NULL);
+ g_signal_connect (settings_mate_mouse, "changed::" KEY_MATE_MOUSE_CURSOR_THEME, G_CALLBACK (change_notify), NULL);
+ g_signal_connect (settings_mate_mouse, "changed::" KEY_MATE_MOUSE_CURSOR_SIZE, G_CALLBACK (change_notify), NULL);
- /* Set defaults for some values that can't be set at initialization time of
- * the static globals. In the case of the theme, note that there is code
- * elsewhere that will do everything possible to fallback to an existing theme
- * if the one here does not exist.
- */
- titlebar_font = pango_font_description_from_string ("Sans Bold 10");
- current_theme = g_strdup ("ClearlooksRe");
-
- init_button_layout();
-#endif /* HAVE_MATECONF */
-
init_bindings ();
init_commands ();
init_workspace_names ();
}
-
/****************************************************************************/
/* Updates. */
/****************************************************************************/
-#ifdef HAVE_MATECONF
-
-gboolean (*preference_update_handler[]) (const gchar*, MateConfValue*) = {
+gboolean (*preference_update_handler[]) (const gchar*, GVariant*) = {
handle_preference_update_enum,
handle_preference_update_bool,
handle_preference_update_string,
@@ -1097,18 +907,12 @@ gboolean (*preference_update_handler[]) (const gchar*, MateConfValue*) = {
};
static void
-change_notify (MateConfClient *client,
- guint cnxn_id,
- MateConfEntry *entry,
- gpointer user_data)
+change_notify (GSettings *settings,
+ gchar *key,
+ gpointer user_data)
{
- const char *key;
- MateConfValue *value;
gint i=0;
- key = mateconf_entry_get_key (entry);
- value = mateconf_entry_get_value (entry);
-
/* First, search for a handler that might know what to do. */
/* FIXME: When this is all working, since the first item in every
@@ -1118,89 +922,53 @@ change_notify (MateConfClient *client,
while (preference_update_handler[i]!=NULL)
{
- if (preference_update_handler[i] (key, value))
- goto out; /* Get rid of this eventually */
+ if (preference_update_handler[i] (key, settings))
+ return; /* Get rid of this eventually */
i++;
}
-
- if (g_str_has_prefix (key, KEY_WINDOW_BINDINGS_PREFIX) ||
- g_str_has_prefix (key, KEY_SCREEN_BINDINGS_PREFIX))
- {
- if (g_str_has_suffix (key, KEY_LIST_BINDINGS_SUFFIX))
- {
- GSList *list;
-
- if (value && value->type != MATECONF_VALUE_LIST)
- {
- meta_warning (_("MateConf key \"%s\" is set to an invalid type\n"),
- key);
- goto out;
- }
-
- list = value ? mateconf_value_get_list (value) : NULL;
- if (update_key_list_binding (key, list))
- queue_changed (META_PREF_KEYBINDINGS);
- }
- else
- {
- const char *str;
-
- if (value && value->type != MATECONF_VALUE_STRING)
- {
- meta_warning (_("MateConf key \"%s\" is set to an invalid type\n"),
- key);
- goto out;
- }
+ gchar *schema_name;
+ g_object_get (settings, "schema-id", schema_name);
- str = value ? mateconf_value_get_string (value) : NULL;
+ if (g_strcmp0 (schema_name, KEY_WINDOW_BINDINGS_SCHEMA) == 0 ||
+ g_strcmp0 (schema_name, KEY_SCREEN_BINDINGS_SCHEMA) == 0)
+ {
+ gchar *str;
+ str = g_settings_get_string (settings, key);
- if (update_key_binding (key, str))
- queue_changed (META_PREF_KEYBINDINGS);
- }
+ if (update_key_binding (key, str))
+ queue_changed (META_PREF_KEYBINDINGS);
+
+ g_free(str);
}
- else if (g_str_has_prefix (key, KEY_COMMAND_PREFIX))
+ else if (g_strcmp0 (schema_name, KEY_COMMAND_SCHEMA) == 0)
{
- const char *str;
-
- if (value && value->type != MATECONF_VALUE_STRING)
- {
- meta_warning (_("MateConf key \"%s\" is set to an invalid type\n"),
- key);
- goto out;
- }
-
- str = value ? mateconf_value_get_string (value) : NULL;
+ gchar *str;
+ str = g_settings_get_string (settings, key);
if (update_command (key, str))
queue_changed (META_PREF_COMMANDS);
+
+ g_free(str);
}
- else if (g_str_has_prefix (key, KEY_WORKSPACE_NAME_PREFIX))
+ else if (g_strcmp0 (schema_name, KEY_WORKSPACE_NAME_SCHEMA))
{
- const char *str;
-
- if (value && value->type != MATECONF_VALUE_STRING)
- {
- meta_warning (_("MateConf key \"%s\" is set to an invalid type\n"),
- key);
- goto out;
- }
-
- str = value ? mateconf_value_get_string (value) : NULL;
+ gchar *str;
+ str = g_settings_get_string (settings, key);
if (update_workspace_name (key, str))
queue_changed (META_PREF_WORKSPACE_NAMES);
+
+ g_free(str);
}
else
{
+ /* Is this possible with GSettings? I dont think so! */
meta_topic (META_DEBUG_PREFS, "Key %s doesn't mean anything to Marco\n",
key);
}
-
- out:
- /* nothing */
- return; /* AIX compiler wants something after a label like out: */
+ g_free (schema_name);
}
static void
@@ -1215,30 +983,6 @@ cleanup_error (GError **error)
}
}
-/* get_bool returns TRUE if *val is filled in, FALSE otherwise */
-/* @@@ probably worth moving this inline; only used once */
-static gboolean
-get_bool (const char *key, gboolean *val)
-{
- GError *err = NULL;
- MateConfValue *value;
- gboolean filled_in = FALSE;
-
- value = mateconf_client_get (default_client, key, &err);
- cleanup_error (&err);
- if (value)
- {
- if (value->type == MATECONF_VALUE_BOOL)
- {
- *val = mateconf_value_get_bool (value);
- filled_in = TRUE;
- }
- mateconf_value_free (value);
- }
-
- return filled_in;
-}
-
/**
* Special case: give a warning the first time disable_workarounds
* is turned on.
@@ -1257,8 +1001,6 @@ maybe_give_disable_workarounds_warning (void)
}
}
-#endif /* HAVE_MATECONF */
-
MetaVirtualModifier
meta_prefs_get_mouse_button_mods (void)
{
@@ -1304,13 +1046,11 @@ meta_prefs_get_cursor_size (void)
return cursor_size;
}
-
+
/****************************************************************************/
/* Handlers for string preferences. */
/****************************************************************************/
-#ifdef HAVE_MATECONF
-
static void
titlebar_handler (MetaPreference pref,
const gchar *string_value,
@@ -1324,9 +1064,9 @@ titlebar_handler (MetaPreference pref,
if (new_desc == NULL)
{
meta_warning (_("Could not parse font description "
- "\"%s\" from MateConf key %s\n"),
+ "\"%s\" from GSettings key %s\n"),
string_value ? string_value : "(null)",
- KEY_TITLEBAR_FONT);
+ KEY_GENERAL_TITLEBAR_FONT);
*inform_listeners = FALSE;
@@ -1374,7 +1114,7 @@ mouse_button_mods_handler (MetaPreference pref,
MetaVirtualModifier mods;
meta_topic (META_DEBUG_KEYBINDINGS,
- "Mouse button modifier has new mateconf value \"%s\"\n",
+ "Mouse button modifier has new GSettings value \"%s\"\n",
string_value);
if (string_value && meta_ui_parse_modifier (string_value, &mods))
{
@@ -1383,7 +1123,7 @@ mouse_button_mods_handler (MetaPreference pref,
else
{
meta_topic (META_DEBUG_KEYBINDINGS,
- "Failed to parse new mateconf value\n");
+ "Failed to parse new GSettings value\n");
meta_warning (_("\"%s\" found in configuration database is "
"not a valid value for mouse button modifier\n"),
@@ -1419,7 +1159,7 @@ button_layout_equal (const MetaButtonLayout *a,
static MetaButtonFunction
button_function_from_string (const char *str)
{
- /* FIXME: mateconf_string_to_enum is the obvious way to do this */
+ /* FIXME: g_settings_get_enum is the obvious way to do this */
if (strcmp (str, "menu") == 0)
return META_BUTTON_FUNCTION_MENU;
@@ -1646,8 +1386,6 @@ button_layout_handler (MetaPreference pref,
}
}
-#endif /* HAVE_MATECONF */
-
const PangoFontDescription*
meta_prefs_get_titlebar_font (void)
{
@@ -1683,16 +1421,13 @@ meta_prefs_get_disable_workarounds (void)
return disable_workarounds;
}
-#ifdef HAVE_MATECONF
#define MAX_REASONABLE_AUTO_RAISE_DELAY 10000
-
-#endif /* HAVE_MATECONF */
#ifdef WITH_VERBOSE_MODE
const char*
meta_preference_to_string (MetaPreference pref)
{
- /* FIXME: another case for mateconf_string_to_enum */
+ /* FIXME: another case for g_settings_get_enum */
switch (pref)
{
case META_PREF_MOUSE_BUTTON_MODS:
@@ -1799,34 +1534,18 @@ meta_preference_to_string (MetaPreference pref)
void
meta_prefs_set_num_workspaces (int n_workspaces)
{
-#ifdef HAVE_MATECONF
- GError *err;
-
- if (default_client == NULL)
- return;
-
if (n_workspaces < 1)
n_workspaces = 1;
if (n_workspaces > MAX_REASONABLE_WORKSPACES)
n_workspaces = MAX_REASONABLE_WORKSPACES;
- err = NULL;
- mateconf_client_set_int (default_client,
- KEY_NUM_WORKSPACES,
- n_workspaces,
- &err);
+ g_settings_set_int (settings_general,
+ KEY_GENERAL_NUM_WORKSPACES,
+ n_workspaces);
- if (err)
- {
- meta_warning (_("Error setting number of workspaces to %d: %s\n"),
- num_workspaces,
- err->message);
- g_error_free (err);
- }
-#endif /* HAVE_MATECONF */
}
-#define keybind(name, handler, param, flags, stroke, description) \
+#define keybind(name, handler, param, flags) \
{ #name, NULL, !!(flags & BINDING_REVERSES), !!(flags & BINDING_PER_WINDOW) },
static MetaKeyPref key_bindings[] = {
#include "all-keybindings.h"
@@ -1834,165 +1553,70 @@ static MetaKeyPref key_bindings[] = {
};
#undef keybind
-#ifndef HAVE_MATECONF
-
-/**
- * A type to map names of keybindings (such as "switch_windows")
- * to the binding strings themselves (such as "<Alt>Tab").
- * It exists only when MateConf is turned off in ./configure and
- * functions as a sort of ersatz MateConf.
- */
-typedef struct
-{
- const char *name;
- const char *keybinding;
-} MetaSimpleKeyMapping;
-
-/* FIXME: This would be neater if the array only contained entries whose
- * default keystroke was non-null. You COULD do this by defining
- * ONLY_BOUND_BY_DEFAULT around various blocks at the cost of making
- * the bindings file way more complicated. However, we could stop this being
- * data and move it into code. Then the compiler would optimise away
- * the problem lines.
- */
-
-#define keybind(name, handler, param, flags, stroke, description) \
- { #name, stroke },
-
-static MetaSimpleKeyMapping key_string_bindings[] = {
-#include "all-keybindings.h"
- { NULL, NULL }
-};
-#undef keybind
-
-#endif /* NOT HAVE_MATECONF */
-
static void
init_bindings (void)
{
-#ifdef HAVE_MATECONF
const char *prefix[] = {
- KEY_WINDOW_BINDINGS_PREFIX,
- KEY_SCREEN_BINDINGS_PREFIX,
+ KEY_WINDOW_BINDINGS_SCHEMA,
+ KEY_SCREEN_BINDINGS_SCHEMA,
NULL
};
int i;
- GSList *list, *l, *list_val;
- const char *str_val;
- const char *key;
- MateConfEntry *entry;
- MateConfValue *value;
+ gchar **list;
+ gchar *str_val;
+ GSettings *bindings_settings;
for (i = 0; prefix[i]; i++)
{
- list = mateconf_client_all_entries (default_client, prefix[i], NULL);
- for (l = list; l; l = l->next)
+ bindings_settings = g_settings_new (prefix [i]);
+ list = g_settings_list_keys (bindings_settings);
+ while (*list != NULL)
{
- entry = l->data;
- key = mateconf_entry_get_key (entry);
- value = mateconf_entry_get_value (entry);
- if (g_str_has_suffix (key, KEY_LIST_BINDINGS_SUFFIX))
- {
- list_val = mateconf_client_get_list (default_client, key, MATECONF_VALUE_STRING, NULL);
-
- update_key_list_binding (key, list_val);
- g_slist_foreach (list_val, (GFunc)g_free, NULL);
- g_slist_free (list_val);
- }
- else
- {
- str_val = mateconf_value_get_string (value);
- update_key_binding (key, str_val);
- }
- mateconf_entry_free (entry);
+ str_val = g_settings_get_string (bindings_settings, *list);
+ update_key_binding (*list, str_val);
+ list++;
}
- g_slist_free (list);
}
-#else /* HAVE_MATECONF */
- int i = 0;
- int which = 0;
- while (key_string_bindings[i].name)
- {
- if (key_string_bindings[i].keybinding == NULL) {
- ++i;
- continue;
- }
-
- while (strcmp(key_bindings[which].name,
- key_string_bindings[i].name) != 0)
- which++;
-
- /* Set the binding */
- update_binding (&key_bindings[which],
- key_string_bindings[i].keybinding);
+ g_free (str_val);
+ g_object_unref (bindings_settings);
- ++i;
- }
-#endif /* HAVE_MATECONF */
}
static void
init_commands (void)
{
-#ifdef HAVE_MATECONF
- GSList *list, *l;
- const char *str_val;
- const char *key;
- MateConfEntry *entry;
- MateConfValue *value;
+ gchar **list;
+ gchar *str_val;
- list = mateconf_client_all_entries (default_client, KEY_COMMAND_DIRECTORY, NULL);
- for (l = list; l; l = l->next)
+ list = g_settings_list_keys (settings_command);
+ while (*list != NULL)
{
- entry = l->data;
- key = mateconf_entry_get_key (entry);
- value = mateconf_entry_get_value (entry);
- str_val = mateconf_value_get_string (value);
- update_command (key, str_val);
- mateconf_entry_free (entry);
+ str_val = g_settings_get_string (settings_command, *list);
+ update_command (*list, str_val);
+ list++;
}
- g_slist_free (list);
-#else
- int i;
- for (i = 0; i < MAX_COMMANDS; i++)
- commands[i] = NULL;
-#endif /* HAVE_MATECONF */
+ g_free (str_val);
}
static void
init_workspace_names (void)
{
-#ifdef HAVE_MATECONF
- GSList *list, *l;
- const char *str_val;
- const char *key;
- MateConfEntry *entry;
- MateConfValue *value;
+ gchar **list;
+ gchar *str_val;
- list = mateconf_client_all_entries (default_client, KEY_WORKSPACE_NAME_DIRECTORY, NULL);
- for (l = list; l; l = l->next)
+ list = g_settings_list_keys (settings_workspace_names);
+ while (*list != NULL)
{
- entry = l->data;
- key = mateconf_entry_get_key (entry);
- value = mateconf_entry_get_value (entry);
- str_val = mateconf_value_get_string (value);
- update_workspace_name (key, str_val);
- mateconf_entry_free (entry);
+ str_val = g_settings_get_string (settings_workspace_names, *list);
+ update_workspace_name (*list, str_val);
+ list++;
}
- g_slist_free (list);
-#else
- int i;
- for (i = 0; i < MAX_REASONABLE_WORKSPACES; i++)
- workspace_names[i] = g_strdup_printf (_("Workspace %d"), i + 1);
-
- meta_topic (META_DEBUG_PREFS,
- "Initialized workspace names\n");
-#endif /* HAVE_MATECONF */
+ g_free (str_val);
}
static gboolean
update_binding (MetaKeyPref *binding,
- const char *value)
+ gchar *value)
{
unsigned int keysym;
unsigned int keycode;
@@ -2001,7 +1625,7 @@ update_binding (MetaKeyPref *binding,
gboolean changed;
meta_topic (META_DEBUG_KEYBINDINGS,
- "Binding \"%s\" has new mateconf value \"%s\"\n",
+ "Binding \"%s\" has new GSettings value \"%s\"\n",
binding->name, value ? value : "none");
keysym = 0;
@@ -2012,7 +1636,7 @@ update_binding (MetaKeyPref *binding,
if (!meta_ui_parse_accelerator (value, &keysym, &keycode, &mods))
{
meta_topic (META_DEBUG_KEYBINDINGS,
- "Failed to parse new mateconf value\n");
+ "Failed to parse new GSettings value\n");
meta_warning (_("\"%s\" found in configuration database is not a valid value for keybinding \"%s\"\n"),
value, binding->name);
@@ -2030,7 +1654,6 @@ update_binding (MetaKeyPref *binding,
combo = binding->bindings->data;
-#ifdef HAVE_MATECONF
/* Bug 329676: Bindings which can be shifted must not have no modifiers,
* nor only SHIFT as a modifier.
*/
@@ -2040,8 +1663,6 @@ update_binding (MetaKeyPref *binding,
(META_VIRTUAL_SHIFT_MASK == mods || 0 == mods))
{
gchar *old_setting;
- gchar *key;
- GError *err = NULL;
meta_warning ("Cannot bind \"%s\" to %s: it needs a modifier "
"such as Ctrl or Alt.\n",
@@ -2072,30 +1693,18 @@ update_binding (MetaKeyPref *binding,
* So we shouldn't blindly add KEY_SCREEN_BINDINGS_PREFIX
* onto here.
*/
- key = g_strconcat (KEY_SCREEN_BINDINGS_PREFIX, "/",
- binding->name, NULL);
-
- mateconf_client_set_string (mateconf_client_get_default (),
- key, old_setting, &err);
+ g_settings_set_string(settings_screen_bindings,
+ binding->name,
+ old_setting);
- if (err)
- {
- meta_warning ("Error while reverting keybinding: %s\n",
- err->message);
- g_error_free (err);
- err = NULL;
- }
-
g_free (old_setting);
- g_free (key);
- /* The call to mateconf_client_set_string() will cause this function
+ /* The call to g_settings_set_string() will cause this function
* to be called again with the new value, so there's no need to
* carry on.
*/
return TRUE;
}
-#endif
changed = FALSE;
if (keysym != combo->keysym ||
@@ -2122,119 +1731,6 @@ update_binding (MetaKeyPref *binding,
return changed;
}
-#ifdef HAVE_MATECONF
-static gboolean
-update_list_binding (MetaKeyPref *binding,
- GSList *value,
- MetaStringListType type_of_value)
-{
- unsigned int keysym;
- unsigned int keycode;
- MetaVirtualModifier mods;
- gboolean changed = FALSE;
- const gchar *pref_string;
- GSList *pref_iterator = value, *tmp;
- MetaKeyCombo *combo;
-
- meta_topic (META_DEBUG_KEYBINDINGS,
- "Binding \"%s\" has new mateconf value\n",
- binding->name);
-
- if (binding->bindings == NULL)
- {
- /* We need to insert a dummy element into the list, because the first
- * element is the one governed by update_binding. We only handle the
- * subsequent elements.
- */
- MetaKeyCombo *blank = g_malloc0 (sizeof (MetaKeyCombo));
- binding->bindings = g_slist_alloc();
- binding->bindings->data = blank;
- }
-
- /* Okay, so, we're about to provide a new list of key combos for this
- * action. Delete any pre-existing list.
- */
- tmp = binding->bindings->next;
- while (tmp)
- {
- g_free (tmp->data);
- tmp = tmp->next;
- }
- g_slist_free (binding->bindings->next);
- binding->bindings->next = NULL;
-
- while (pref_iterator)
- {
- keysym = 0;
- keycode = 0;
- mods = 0;
-
- if (!pref_iterator->data)
- {
- pref_iterator = pref_iterator->next;
- continue;
- }
-
- switch (type_of_value)
- {
- case META_LIST_OF_STRINGS:
- pref_string = pref_iterator->data;
- break;
- case META_LIST_OF_MATECONFVALUE_STRINGS:
- pref_string = mateconf_value_get_string (pref_iterator->data);
- break;
- default:
- g_assert_not_reached ();
- }
-
- if (!meta_ui_parse_accelerator (pref_string, &keysym, &keycode, &mods))
- {
- meta_topic (META_DEBUG_KEYBINDINGS,
- "Failed to parse new mateconf value\n");
- meta_warning (_("\"%s\" found in configuration database is not a valid value for keybinding \"%s\"\n"),
- pref_string, binding->name);
-
- /* Should we remove this value from the list in mateconf? */
- pref_iterator = pref_iterator->next;
- continue;
- }
-
- /* Bug 329676: Bindings which can be shifted must not have no modifiers,
- * nor only SHIFT as a modifier.
- */
-
- if (binding->add_shift &&
- 0 != keysym &&
- (META_VIRTUAL_SHIFT_MASK == mods || 0 == mods))
- {
- meta_warning ("Cannot bind \"%s\" to %s: it needs a modifier "
- "such as Ctrl or Alt.\n",
- binding->name,
- pref_string);
-
- /* Should we remove this value from the list in mateconf? */
-
- pref_iterator = pref_iterator->next;
- continue;
- }
-
- changed = TRUE;
-
- combo = g_malloc0 (sizeof (MetaKeyCombo));
- combo->keysym = keysym;
- combo->keycode = keycode;
- combo->modifiers = mods;
- binding->bindings->next = g_slist_prepend (binding->bindings->next, combo);
-
- meta_topic (META_DEBUG_KEYBINDINGS,
- "New keybinding for \"%s\" is keysym = 0x%x keycode = 0x%x mods = 0x%x\n",
- binding->name, keysym, keycode, mods);
-
- pref_iterator = pref_iterator->next;
- }
- return changed;
-}
-
static const gchar*
relative_key (const gchar* key)
{
@@ -2253,7 +1749,7 @@ relative_key (const gchar* key)
static gboolean
find_and_update_binding (MetaKeyPref *bindings,
const char *name,
- const char *value)
+ gchar *value)
{
const char *key;
int i;
@@ -2276,48 +1772,12 @@ find_and_update_binding (MetaKeyPref *bindings,
static gboolean
update_key_binding (const char *name,
- const char *value)
+ gchar *value)
{
return find_and_update_binding (key_bindings, name, value);
}
static gboolean
-find_and_update_list_binding (MetaKeyPref *bindings,
- const char *name,
- GSList *value)
-{
- const char *key;
- int i;
- gchar *name_without_suffix = g_strdup(name);
-
- name_without_suffix[strlen(name_without_suffix) - strlen(KEY_LIST_BINDINGS_SUFFIX)] = 0;
-
- if (*name_without_suffix == '/')
- key = relative_key (name_without_suffix);
- else
- key = name_without_suffix;
-
- i = 0;
- while (bindings[i].name &&
- strcmp (key, bindings[i].name) != 0)
- ++i;
-
- g_free (name_without_suffix);
-
- if (bindings[i].name)
- return update_list_binding (&bindings[i], value, META_LIST_OF_MATECONFVALUE_STRINGS);
- else
- return FALSE;
-}
-
-static gboolean
-update_key_list_binding (const char *name,
- GSList *value)
-{
- return find_and_update_list_binding (key_bindings, name, value);
-}
-
-static gboolean
update_command (const char *name,
const char *value)
{
@@ -2385,8 +1845,6 @@ update_command (const char *name,
return TRUE;
}
-#endif /* HAVE_MATECONF */
-
const char*
meta_prefs_get_command (int i)
{
@@ -2396,7 +1854,7 @@ meta_prefs_get_command (int i)
}
char*
-meta_prefs_get_mateconf_key_for_command (int i)
+meta_prefs_get_settings_key_for_command (int i)
{
char *key;
@@ -2406,7 +1864,7 @@ meta_prefs_get_mateconf_key_for_command (int i)
key = g_strdup (KEY_COMMAND_PREFIX "screenshot");
break;
case WIN_SCREENSHOT_COMMAND_IDX:
- key = g_strdup (KEY_COMMAND_PREFIX "window_screenshot");
+ key = g_strdup (KEY_COMMAND_PREFIX "window-screenshot");
break;
default:
key = g_strdup_printf (KEY_COMMAND_PREFIX"%d", i + 1);
@@ -2423,12 +1881,11 @@ meta_prefs_get_terminal_command (void)
}
const char*
-meta_prefs_get_mateconf_key_for_terminal_command (void)
+meta_prefs_get_settings_key_for_terminal_command (void)
{
- return KEY_TERMINAL_COMMAND;
+ return KEY_MATE_TERMINAL_COMMAND;
}
-#ifdef HAVE_MATECONF
static gboolean
update_workspace_name (const char *name,
const char *value)
@@ -2436,11 +1893,11 @@ update_workspace_name (const char *name,
char *p;
int i;
- p = strrchr (name, '_');
+ p = strrchr (name, '-');
if (p == NULL)
{
meta_topic (META_DEBUG_PREFS,
- "Workspace name %s has no underscore?\n", name);
+ "Workspace name %s has no dash?\n", name);
return FALSE;
}
@@ -2505,7 +1962,6 @@ update_workspace_name (const char *name,
return TRUE;
}
-#endif /* HAVE_MATECONF */
const char*
meta_prefs_get_workspace_name (int i)
@@ -2525,9 +1981,7 @@ void
meta_prefs_change_workspace_name (int i,
const char *name)
{
-#ifdef HAVE_MATECONF
char *key;
- GError *err;
g_return_if_fail (i >= 0 && i < MAX_REASONABLE_WORKSPACES);
@@ -2535,12 +1989,6 @@ meta_prefs_change_workspace_name (int i,
"Changing name of workspace %d to %s\n",
i, name ? name : "none");
- /* This is a bad hack. We have to treat empty string as
- * "unset" because the root window property can't contain
- * null. So it gets empty string instead and we don't want
- * that to result in setting the empty string as a value that
- * overrides "unset".
- */
if (name && *name == '\0')
name = NULL;
@@ -2553,36 +2001,22 @@ meta_prefs_change_workspace_name (int i,
return;
}
- key = mateconf_key_for_workspace_name (i);
+ key = settings_key_for_workspace_name (i);
- err = NULL;
if (name != NULL)
- mateconf_client_set_string (default_client,
- key, name,
- &err);
+ g_settings_set_string (settings_workspace_names,
+ key,
+ name);
else
- mateconf_client_unset (default_client,
- key, &err);
+ g_settings_set_string (settings_workspace_names,
+ key,
+ "");
-
- if (err)
- {
- meta_warning (_("Error setting name for workspace %d to \"%s\": %s\n"),
- i, name ? name : "none",
- err->message);
- g_error_free (err);
- }
-
g_free (key);
-#else
- g_free (workspace_names[i]);
- workspace_names[i] = g_strdup (name);
-#endif /* HAVE_MATECONF */
}
-#ifdef HAVE_MATECONF
static char*
-mateconf_key_for_workspace_name (int i)
+settings_key_for_workspace_name (int i)
{
char *key;
@@ -2590,7 +2024,6 @@ mateconf_key_for_workspace_name (int i)
return key;
}
-#endif /* HAVE_MATECONF */
void
meta_prefs_get_button_layout (MetaButtonLayout *button_layout_p)
@@ -2767,86 +2200,20 @@ meta_prefs_get_force_fullscreen (void)
void
meta_prefs_set_compositing_manager (gboolean whether)
{
-#ifdef HAVE_MATECONF
- GError *err = NULL;
+ g_settings_set_boolean (settings_general,
+ KEY_GENERAL_COMPOSITOR,
+ whether);
- mateconf_client_set_bool (default_client,
- KEY_COMPOSITOR,
- whether,
- &err);
-
- if (err)
- {
- meta_warning (_("Error setting compositor status: %s\n"),
- err->message);
- g_error_free (err);
- }
-#else
- compositing_manager = whether;
-#endif
}
void
meta_prefs_set_compositing_fast_alt_tab(gboolean whether)
{
-#ifdef HAVE_MATECONF
- GError *err = NULL;
-
- mateconf_client_set_bool (default_client,
- KEY_COMPOSITOR_FAST_ALT_TAB,
- whether,
- &err);
-
- if (err)
- {
- meta_warning (_("Error setting compositor fast alt-tab status: %s\n"),
- err->message);
- g_error_free (err);
- }
-#else
- compositing_fast_alt_tab = whether;
-#endif
+ g_settings_set_boolean (settings_general,
+ KEY_GENERAL_COMPOSITOR_FAST_ALT_TAB,
+ whether);
}
-#ifndef HAVE_MATECONF
-static void
-init_button_layout(void)
-{
- MetaButtonLayout button_layout_ltr = {
- {
- /* buttons in the group on the left side */
- META_BUTTON_FUNCTION_MENU,
- META_BUTTON_FUNCTION_LAST
- },
- {
- /* buttons in the group on the right side */
- META_BUTTON_FUNCTION_MINIMIZE,
- META_BUTTON_FUNCTION_MAXIMIZE,
- META_BUTTON_FUNCTION_CLOSE,
- META_BUTTON_FUNCTION_LAST
- }
- };
- MetaButtonLayout button_layout_rtl = {
- {
- /* buttons in the group on the left side */
- META_BUTTON_FUNCTION_CLOSE,
- META_BUTTON_FUNCTION_MAXIMIZE,
- META_BUTTON_FUNCTION_MINIMIZE,
- META_BUTTON_FUNCTION_LAST
- },
- {
- /* buttons in the group on the right side */
- META_BUTTON_FUNCTION_MENU,
- META_BUTTON_FUNCTION_LAST
- }
- };
-
- button_layout = meta_ui_get_direction() == META_UI_DIRECTION_LTR ?
- button_layout_ltr : button_layout_rtl;
-};
-
-#endif
-
void
meta_prefs_set_force_fullscreen (gboolean whether)
{