summaryrefslogtreecommitdiff
path: root/libgnomekbd/gkbd-keyboard-config.c
diff options
context:
space:
mode:
authorSergey V. Udaltsov <svu@gnome.org>2010-10-03 08:42:48 +0100
committerSergey V. Udaltsov <svu@gnome.org>2010-10-03 08:42:48 +0100
commita177d5a7e194cfc106a906ca0d81b16a99fe02ee (patch)
tree346094feef799818199a2519665097456247b918 /libgnomekbd/gkbd-keyboard-config.c
parentf05774eace6d681b0fc59b2abee650b847fff8a1 (diff)
downloadlibgnomekbd-a177d5a7e194cfc106a906ca0d81b16a99fe02ee.tar.gz
Moving from gconf to gsettings. API/ABI changes
Diffstat (limited to 'libgnomekbd/gkbd-keyboard-config.c')
-rw-r--r--libgnomekbd/gkbd-keyboard-config.c366
1 files changed, 118 insertions, 248 deletions
diff --git a/libgnomekbd/gkbd-keyboard-config.c b/libgnomekbd/gkbd-keyboard-config.c
index 622c1bd..fdeb6f7 100644
--- a/libgnomekbd/gkbd-keyboard-config.c
+++ b/libgnomekbd/gkbd-keyboard-config.c
@@ -32,18 +32,13 @@
/**
* GkbdKeyboardConfig
*/
-#define GKBD_KEYBOARD_CONFIG_KEY_PREFIX GKBD_CONFIG_KEY_PREFIX "/kbd"
#define GROUP_SWITCHERS_GROUP "grp"
#define DEFAULT_GROUP_SWITCH "grp:shift_caps_toggle"
-const gchar GKBD_KEYBOARD_CONFIG_DIR[] = GKBD_KEYBOARD_CONFIG_KEY_PREFIX;
-const gchar GKBD_KEYBOARD_CONFIG_KEY_MODEL[] =
- GKBD_KEYBOARD_CONFIG_KEY_PREFIX "/model";
-const gchar GKBD_KEYBOARD_CONFIG_KEY_LAYOUTS[] =
- GKBD_KEYBOARD_CONFIG_KEY_PREFIX "/layouts";
-const gchar GKBD_KEYBOARD_CONFIG_KEY_OPTIONS[] =
- GKBD_KEYBOARD_CONFIG_KEY_PREFIX "/options";
+const gchar GKBD_KEYBOARD_CONFIG_KEY_MODEL[] = "model";
+const gchar GKBD_KEYBOARD_CONFIG_KEY_LAYOUTS[] = "layouts";
+const gchar GKBD_KEYBOARD_CONFIG_KEY_OPTIONS[] = "options";
const gchar *GKBD_KEYBOARD_CONFIG_ACTIVE[] = {
GKBD_KEYBOARD_CONFIG_KEY_MODEL,
@@ -54,33 +49,25 @@ const gchar *GKBD_KEYBOARD_CONFIG_ACTIVE[] = {
/**
* static common functions
*/
-static void
-gkbd_keyboard_config_string_list_reset (GSList ** plist)
-{
- while (*plist != NULL) {
- GSList *p = *plist;
- *plist = (*plist)->next;
- g_free (p->data);
- g_slist_free_1 (p);
- }
-}
static gboolean
-gslist_str_equal (GSList * l1, GSList * l2)
+g_strv_equal (gchar ** l1, gchar ** l2)
{
if (l1 == l2)
return TRUE;
while (l1 != NULL && l2 != NULL) {
- if ((l1->data != l2->data) &&
- (l1->data != NULL) &&
- (l2->data != NULL) &&
- g_ascii_strcasecmp (l1->data, l2->data))
- return False;
-
- l1 = l1->next;
- l2 = l2->next;
+ if (*l1 != *l2) {
+ if (*l1 && *l2) {
+ if (g_ascii_strcasecmp (*l1, *l2))
+ return FALSE;
+ } else
+ return FALSE;
+ }
+
+ l1++;
+ l2++;
}
- return (l1 == NULL && l2 == NULL);
+ return (*l1 && *l2);
}
gboolean
@@ -187,49 +174,38 @@ gkbd_keyboard_config_split_items (const gchar * merged, gchar ** parent,
/**
* static GkbdKeyboardConfig functions
*/
-static void
-gkbd_keyboard_config_options_add_full (GkbdKeyboardConfig * kbd_config,
- const gchar * full_option_name)
-{
- kbd_config->options =
- g_slist_append (kbd_config->options,
- g_strdup (full_option_name));
-}
-
-static void
-gkbd_keyboard_config_layouts_add_full (GkbdKeyboardConfig * kbd_config,
- const gchar * full_layout_name)
-{
- kbd_config->layouts_variants =
- g_slist_append (kbd_config->layouts_variants,
- g_strdup (full_layout_name));
-}
static void
gkbd_keyboard_config_copy_from_xkl_config (GkbdKeyboardConfig * kbd_config,
XklConfigRec * pdata)
{
char **p, **p1;
+ int i;
gkbd_keyboard_config_model_set (kbd_config, pdata->model);
xkl_debug (150, "Loaded Kbd model: [%s]\n", pdata->model);
- gkbd_keyboard_config_layouts_reset (kbd_config);
+ g_strfreev (kbd_config->layouts_variants);
p = pdata->layouts;
p1 = pdata->variants;
+ kbd_config->layouts_variants =
+ g_new0 (gchar *, g_strv_length (pdata->layouts) + 1);
+ i = 0;
while (p != NULL && *p != NULL) {
const gchar *full_layout =
gkbd_keyboard_config_merge_items (*p, *p1);
xkl_debug (150,
"Loaded Kbd layout (with variant): [%s]\n",
full_layout);
- gkbd_keyboard_config_layouts_add_full (kbd_config,
- full_layout);
+ kbd_config->layouts_variants[i++] = g_strdup (full_layout);
p++;
p1++;
}
- gkbd_keyboard_config_options_reset (kbd_config);
+ g_strfreev (kbd_config->options);
+ kbd_config->options =
+ g_new0 (gchar *, g_strv_length (pdata->options) + 1);
p = pdata->options;
+ i = 0;
while (p != NULL && *p != NULL) {
char group[XKL_MAX_CI_NAME_LENGTH];
char *option = *p;
@@ -242,7 +218,7 @@ gkbd_keyboard_config_copy_from_xkl_config (GkbdKeyboardConfig * kbd_config,
group[len] = 0;
xkl_debug (150, "Loaded Kbd option: [%s][%s]\n",
group, option);
- gkbd_keyboard_config_options_add (kbd_config,
+ gkbd_keyboard_config_options_set (kbd_config, i++,
group, option);
}
p++;
@@ -261,14 +237,14 @@ gkbd_keyboard_config_copy_to_xkl_config (GkbdKeyboardConfig * kbd_config,
num_layouts =
(kbd_config->layouts_variants ==
- NULL) ? 0 : g_slist_length (kbd_config->layouts_variants);
+ NULL) ? 0 : g_strv_length (kbd_config->layouts_variants);
num_options =
(kbd_config->options ==
- NULL) ? 0 : g_slist_length (kbd_config->options);
+ NULL) ? 0 : g_strv_length (kbd_config->options);
xkl_debug (150, "Taking %d layouts\n", num_layouts);
if (num_layouts != 0) {
- GSList *the_layout_variant = kbd_config->layouts_variants;
+ gchar **the_layout_variant = kbd_config->layouts_variants;
char **p1 = pdata->layouts =
g_new0 (char *, num_layouts + 1);
char **p2 = pdata->variants =
@@ -276,7 +252,7 @@ gkbd_keyboard_config_copy_to_xkl_config (GkbdKeyboardConfig * kbd_config,
for (i = num_layouts; --i >= 0;) {
char *layout, *variant;
if (gkbd_keyboard_config_split_items
- (the_layout_variant->data, &layout, &variant)
+ (*the_layout_variant, &layout, &variant)
&& variant != NULL) {
*p1 =
(layout ==
@@ -288,9 +264,9 @@ gkbd_keyboard_config_copy_to_xkl_config (GkbdKeyboardConfig * kbd_config,
g_strdup (variant);
} else {
*p1 =
- (the_layout_variant->data ==
+ (*the_layout_variant ==
NULL) ? g_strdup ("") :
- g_strdup (the_layout_variant->data);
+ g_strdup (*the_layout_variant);
*p2 = g_strdup ("");
}
xkl_debug (150, "Adding [%s]/%p and [%s]/%p\n",
@@ -298,26 +274,26 @@ gkbd_keyboard_config_copy_to_xkl_config (GkbdKeyboardConfig * kbd_config,
*p2 ? *p2 : "(nil)", *p2);
p1++;
p2++;
- the_layout_variant = the_layout_variant->next;
+ the_layout_variant++;
}
}
if (num_options != 0) {
- GSList *the_option = kbd_config->options;
+ gchar **the_option = kbd_config->options;
char **p = pdata->options =
g_new0 (char *, num_options + 1);
for (i = num_options; --i >= 0;) {
char *group, *option;
if (gkbd_keyboard_config_split_items
- (the_option->data, &group, &option)
+ (*the_option, &group, &option)
&& option != NULL)
*(p++) = g_strdup (option);
else {
*(p++) = g_strdup ("");
xkl_debug (150, "Could not split [%s]\n",
- the_option->data);
+ *the_option);
}
- the_option = the_option->next;
+ the_option++;
}
}
}
@@ -326,20 +302,10 @@ static void
gkbd_keyboard_config_load_params (GkbdKeyboardConfig * kbd_config,
const gchar * param_names[])
{
- GError *gerror = NULL;
gchar *pc;
- GSList *pl, *l;
-
- pc = gconf_client_get_string (kbd_config->conf_client,
- param_names[0], &gerror);
- if (pc == NULL || gerror != NULL) {
- if (gerror != NULL) {
- g_warning ("Error reading configuration:%s\n",
- gerror->message);
- g_error_free (gerror);
- g_free (pc);
- gerror = NULL;
- }
+
+ pc = g_settings_get_string (kbd_config->settings, param_names[0]);
+ if (pc == NULL) {
gkbd_keyboard_config_model_set (kbd_config, NULL);
} else {
gkbd_keyboard_config_model_set (kbd_config, pc);
@@ -348,97 +314,62 @@ gkbd_keyboard_config_load_params (GkbdKeyboardConfig * kbd_config,
xkl_debug (150, "Loaded Kbd model: [%s]\n",
kbd_config->model ? kbd_config->model : "(null)");
- gkbd_keyboard_config_layouts_reset (kbd_config);
-
- l = pl = gconf_client_get_list (kbd_config->conf_client,
- param_names[1],
- GCONF_VALUE_STRING, &gerror);
- if (pl == NULL || gerror != NULL) {
- if (gerror != NULL) {
- g_warning ("Error reading configuration:%s\n",
- gerror->message);
- g_error_free (gerror);
- gerror = NULL;
- }
- }
+ g_strfreev (kbd_config->layouts_variants);
- while (l != NULL) {
- xkl_debug (150, "Loaded Kbd layout: [%s]\n", l->data);
- gkbd_keyboard_config_layouts_add_full (kbd_config,
- l->data);
- l = l->next;
- }
- gkbd_keyboard_config_string_list_reset (&pl);
-
- gkbd_keyboard_config_options_reset (kbd_config);
-
- l = pl = gconf_client_get_list (kbd_config->conf_client,
- param_names[2],
- GCONF_VALUE_STRING, &gerror);
- if (pl == NULL || gerror != NULL) {
- if (gerror != NULL) {
- g_warning ("Error reading configuration:%s\n",
- gerror->message);
- g_error_free (gerror);
- gerror = NULL;
- }
- }
+ kbd_config->layouts_variants =
+ g_settings_get_strv (kbd_config->settings, param_names[1]);
- while (l != NULL) {
- xkl_debug (150, "Loaded Kbd option: [%s]\n", l->data);
- gkbd_keyboard_config_options_add_full (kbd_config,
- (const gchar *)
- l->data);
- l = l->next;
- }
- gkbd_keyboard_config_string_list_reset (&pl);
+ g_strfreev (kbd_config->options);
+
+ kbd_config->options =
+ g_settings_get_strv (kbd_config->settings, param_names[2]);
}
static void
gkbd_keyboard_config_save_params (GkbdKeyboardConfig * kbd_config,
- GConfChangeSet * cs,
const gchar * param_names[])
{
- GSList *pl;
+ gchar **pl;
if (kbd_config->model)
- gconf_change_set_set_string (cs, param_names[0],
- kbd_config->model);
+ g_settings_set_string (kbd_config->settings,
+ param_names[0], kbd_config->model);
else
- gconf_change_set_unset (cs, param_names[0]);
+ g_settings_set_string (kbd_config->settings,
+ param_names[0], NULL);
xkl_debug (150, "Saved Kbd model: [%s]\n",
kbd_config->model ? kbd_config->model : "(null)");
if (kbd_config->layouts_variants) {
pl = kbd_config->layouts_variants;
- while (pl != NULL) {
- xkl_debug (150, "Saved Kbd layout: [%s]\n",
- pl->data);
- pl = pl->next;
+ while (*pl != NULL) {
+ xkl_debug (150, "Saved Kbd layout: [%s]\n", *pl);
+ pl++;
}
- gconf_change_set_set_list (cs,
- param_names[1],
- GCONF_VALUE_STRING,
- kbd_config->layouts_variants);
+ g_settings_set_strv (kbd_config->settings,
+ param_names[1],
+ (const gchar * const *)
+ kbd_config->layouts_variants);
} else {
xkl_debug (150, "Saved Kbd layouts: []\n");
- gconf_change_set_unset (cs, param_names[1]);
+ g_settings_set_strv (kbd_config->settings,
+ param_names[1], NULL);
}
if (kbd_config->options) {
pl = kbd_config->options;
- while (pl != NULL) {
- xkl_debug (150, "Saved Kbd option: [%s]\n",
- pl->data);
- pl = pl->next;
+ while (*pl != NULL) {
+ xkl_debug (150, "Saved Kbd option: [%s]\n", *pl);
+ pl++;
}
- gconf_change_set_set_list (cs,
- param_names[2],
- GCONF_VALUE_STRING,
- kbd_config->options);
+ g_settings_set_strv (kbd_config->settings,
+ param_names[2],
+ (const gchar *
+ const *) kbd_config->options);
} else {
xkl_debug (150, "Saved Kbd options: []\n");
- gconf_change_set_unset (cs, param_names[2]);
+ g_settings_set_strv (kbd_config->settings,
+ param_names[2], NULL);
}
}
@@ -447,23 +378,11 @@ gkbd_keyboard_config_save_params (GkbdKeyboardConfig * kbd_config,
*/
void
gkbd_keyboard_config_init (GkbdKeyboardConfig * kbd_config,
- GConfClient * conf_client, XklEngine * engine)
+ XklEngine * engine)
{
- GError *gerror = NULL;
-
memset (kbd_config, 0, sizeof (*kbd_config));
- kbd_config->conf_client = conf_client;
+ kbd_config->settings = g_settings_new (GKBD_KEYBOARD_SCHEMA);
kbd_config->engine = engine;
- g_object_ref (kbd_config->conf_client);
-
- gconf_client_add_dir (kbd_config->conf_client,
- GKBD_KEYBOARD_CONFIG_DIR,
- GCONF_CLIENT_PRELOAD_NONE, &gerror);
- if (gerror != NULL) {
- g_warning ("err: %s\n", gerror->message);
- g_error_free (gerror);
- gerror = NULL;
- }
}
void
@@ -471,47 +390,37 @@ gkbd_keyboard_config_term (GkbdKeyboardConfig * kbd_config)
{
gkbd_keyboard_config_model_set (kbd_config, NULL);
- gkbd_keyboard_config_layouts_reset (kbd_config);
- gkbd_keyboard_config_options_reset (kbd_config);
+ g_strfreev (kbd_config->layouts_variants);
+ kbd_config->layouts_variants = NULL;
+ g_strfreev (kbd_config->options);
+ kbd_config->options = NULL;
- g_object_unref (kbd_config->conf_client);
- kbd_config->conf_client = NULL;
+ g_object_unref (kbd_config->settings);
+ kbd_config->settings = NULL;
}
void
-gkbd_keyboard_config_load_from_gconf (GkbdKeyboardConfig * kbd_config,
- GkbdKeyboardConfig *
- kbd_config_default)
+gkbd_keyboard_config_load (GkbdKeyboardConfig * kbd_config,
+ GkbdKeyboardConfig * kbd_config_default)
{
gkbd_keyboard_config_load_params (kbd_config,
GKBD_KEYBOARD_CONFIG_ACTIVE);
if (kbd_config_default != NULL) {
- GSList *pl;
if (kbd_config->model == NULL)
kbd_config->model =
g_strdup (kbd_config_default->model);
if (kbd_config->layouts_variants == NULL) {
- pl = kbd_config_default->layouts_variants;
- while (pl != NULL) {
- kbd_config->layouts_variants =
- g_slist_append
- (kbd_config->layouts_variants,
- g_strdup (pl->data));
- pl = pl->next;
- }
+ kbd_config->layouts_variants =
+ g_strdupv
+ (kbd_config_default->layouts_variants);
}
if (kbd_config->options == NULL) {
- pl = kbd_config_default->options;
- while (pl != NULL) {
- kbd_config->options =
- g_slist_append (kbd_config->options,
- g_strdup (pl->data));
- pl = pl->next;
- }
+ kbd_config->options =
+ g_strdupv (kbd_config_default->options);
}
}
}
@@ -565,32 +474,20 @@ gkbd_keyboard_config_equals (GkbdKeyboardConfig * kbd_config1,
(kbd_config2->model != NULL) &&
g_ascii_strcasecmp (kbd_config1->model, kbd_config2->model))
return False;
- return gslist_str_equal (kbd_config1->layouts_variants,
- kbd_config2->layouts_variants)
- && gslist_str_equal (kbd_config1->options,
- kbd_config2->options);
+ return g_strv_equal (kbd_config1->layouts_variants,
+ kbd_config2->layouts_variants)
+ && g_strv_equal (kbd_config1->options, kbd_config2->options);
}
void
-gkbd_keyboard_config_save_to_gconf (GkbdKeyboardConfig * kbd_config)
+gkbd_keyboard_config_save (GkbdKeyboardConfig * kbd_config)
{
- GConfChangeSet *cs;
- GError *gerror = NULL;
-
- cs = gconf_change_set_new ();
+ g_settings_delay (kbd_config->settings);
- gkbd_keyboard_config_save_params (kbd_config, cs,
+ gkbd_keyboard_config_save_params (kbd_config,
GKBD_KEYBOARD_CONFIG_ACTIVE);
- gconf_client_commit_change_set (kbd_config->conf_client, cs, TRUE,
- &gerror);
- if (gerror != NULL) {
- g_warning ("Error saving active configuration: %s\n",
- gerror->message);
- g_error_free (gerror);
- gerror = NULL;
- }
- gconf_change_set_unref (cs);
+ g_settings_apply (kbd_config->settings);
}
void
@@ -605,36 +502,8 @@ gkbd_keyboard_config_model_set (GkbdKeyboardConfig * kbd_config,
}
void
-gkbd_keyboard_config_layouts_add (GkbdKeyboardConfig * kbd_config,
- const gchar * layout_name,
- const gchar * variant_name)
-{
- const gchar *merged;
- if (layout_name == NULL)
- return;
- merged =
- gkbd_keyboard_config_merge_items (layout_name, variant_name);
- if (merged == NULL)
- return;
- gkbd_keyboard_config_layouts_add_full (kbd_config, merged);
-}
-
-void
-gkbd_keyboard_config_layouts_reset (GkbdKeyboardConfig * kbd_config)
-{
- gkbd_keyboard_config_string_list_reset
- (&kbd_config->layouts_variants);
-}
-
-void
-gkbd_keyboard_config_options_reset (GkbdKeyboardConfig * kbd_config)
-{
- gkbd_keyboard_config_string_list_reset (&kbd_config->options);
-}
-
-void
-gkbd_keyboard_config_options_add (GkbdKeyboardConfig * kbd_config,
- const gchar * group_name,
+gkbd_keyboard_config_options_set (GkbdKeyboardConfig * kbd_config,
+ gint idx, const gchar * group_name,
const gchar * option_name)
{
const gchar *merged;
@@ -644,7 +513,7 @@ gkbd_keyboard_config_options_add (GkbdKeyboardConfig * kbd_config,
gkbd_keyboard_config_merge_items (group_name, option_name);
if (merged == NULL)
return;
- gkbd_keyboard_config_options_add_full (kbd_config, merged);
+ kbd_config->options[idx] = g_strdup (merged);
}
gboolean
@@ -652,14 +521,17 @@ gkbd_keyboard_config_options_is_set (GkbdKeyboardConfig * kbd_config,
const gchar * group_name,
const gchar * option_name)
{
+ gchar **p = kbd_config->options;
const gchar *merged =
gkbd_keyboard_config_merge_items (group_name, option_name);
if (merged == NULL)
return FALSE;
- return NULL != g_slist_find_custom (kbd_config->options, (gpointer)
- merged, (GCompareFunc)
- g_ascii_strcasecmp);
+ while (p && *p) {
+ if (!g_ascii_strcasecmp (merged, *p++))
+ return TRUE;
+ }
+ return FALSE;
}
gboolean
@@ -677,21 +549,19 @@ gkbd_keyboard_config_activate (GkbdKeyboardConfig * kbd_config)
void
gkbd_keyboard_config_start_listen (GkbdKeyboardConfig * kbd_config,
- GConfClientNotifyFunc func,
- gpointer user_data)
+ GCallback func, gpointer user_data)
{
- gkbd_desktop_config_add_listener (kbd_config->conf_client,
- GKBD_KEYBOARD_CONFIG_DIR, func,
- user_data,
- &kbd_config->config_listener_id);
+ kbd_config->config_listener_id =
+ g_signal_connect (kbd_config->settings, "changed", func,
+ user_data);
}
void
gkbd_keyboard_config_stop_listen (GkbdKeyboardConfig * kbd_config)
{
- gkbd_desktop_config_remove_listener (kbd_config->conf_client,
- &kbd_config->
- config_listener_id);
+ g_signal_handler_disconnect (kbd_config->settings,
+ kbd_config->config_listener_id);
+ kbd_config->config_listener_id = 0;
}
gboolean
@@ -735,19 +605,18 @@ gkbd_keyboard_config_to_string (const GkbdKeyboardConfig * config)
gchar *layouts = NULL, *options = NULL;
GString *buffer = g_string_new (NULL);
- GSList *iter;
+ gchar **iter;
gint count;
gchar *result;
if (config->layouts_variants) {
/* g_slist_length is "expensive", so we determinate the length on the fly */
- for (iter = config->layouts_variants, count = 0; iter;
- iter = iter->next, ++count) {
+ for (iter = config->layouts_variants, count = 0; *iter;
+ iter++, ++count) {
if (buffer->len)
g_string_append (buffer, " ");
- g_string_append (buffer,
- (const gchar *) iter->data);
+ g_string_append (buffer, *iter);
}
/* Translators: The count is related to the number of options. The %s
@@ -760,13 +629,12 @@ gkbd_keyboard_config_to_string (const GkbdKeyboardConfig * config)
}
if (config->options) {
/* g_slist_length is "expensive", so we determinate the length on the fly */
- for (iter = config->options, count = 0; iter;
- iter = iter->next, ++count) {
+ for (iter = config->options, count = 0; *iter;
+ iter++, ++count) {
if (buffer->len)
g_string_append (buffer, " ");
- g_string_append (buffer,
- (const gchar *) iter->data);
+ g_string_append (buffer, *iter);
}
/* Translators: The count is related to the number of options. The %s
@@ -795,7 +663,9 @@ GSList *
gkbd_keyboard_config_add_default_switch_option_if_necessary (GSList *
layouts_list,
GSList *
- options_list, gboolean *was_appended)
+ options_list,
+ gboolean *
+ was_appended)
{
*was_appended = FALSE;
if (g_slist_length (layouts_list) >= 2) {