diff options
author | Sergey V. Udaltsov <svu@gnome.org> | 2010-10-03 08:42:48 +0100 |
---|---|---|
committer | Sergey V. Udaltsov <svu@gnome.org> | 2010-10-03 08:42:48 +0100 |
commit | a177d5a7e194cfc106a906ca0d81b16a99fe02ee (patch) | |
tree | 346094feef799818199a2519665097456247b918 /libgnomekbd/gkbd-keyboard-config.c | |
parent | f05774eace6d681b0fc59b2abee650b847fff8a1 (diff) | |
download | libgnomekbd-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.c | 366 |
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) { |