summaryrefslogtreecommitdiff
path: root/libmatekbd/matekbd-keyboard-config.c
diff options
context:
space:
mode:
authorStefano Karapetsas <[email protected]>2012-09-03 17:14:37 +0200
committerStefano Karapetsas <[email protected]>2012-09-03 17:14:37 +0200
commit74e8c123722068886a8b12872601b14f5cc3bbe9 (patch)
treedd680caed288f9056b31d26221c8f007dc1740d6 /libmatekbd/matekbd-keyboard-config.c
parent35c8125877e60b0c3279dd15b26bf0e85df5b136 (diff)
downloadlibmatekbd-74e8c123722068886a8b12872601b14f5cc3bbe9.tar.bz2
libmatekbd-74e8c123722068886a8b12872601b14f5cc3bbe9.tar.xz
migrate to gsettings
Diffstat (limited to 'libmatekbd/matekbd-keyboard-config.c')
-rw-r--r--libmatekbd/matekbd-keyboard-config.c539
1 files changed, 252 insertions, 287 deletions
diff --git a/libmatekbd/matekbd-keyboard-config.c b/libmatekbd/matekbd-keyboard-config.c
index 8be2a37..9de35f4 100644
--- a/libmatekbd/matekbd-keyboard-config.c
+++ b/libmatekbd/matekbd-keyboard-config.c
@@ -24,26 +24,23 @@
#include <stdlib.h>
#include <X11/keysym.h>
-#include <glib/gi18n.h>
+#include <glib/gi18n-lib.h>
#include <matekbd-keyboard-config.h>
#include <matekbd-config-private.h>
+#include <matekbd-util.h>
/**
* MatekbdKeyboardConfig
*/
-#define MATEKBD_KEYBOARD_CONFIG_KEY_PREFIX MATEKBD_CONFIG_KEY_PREFIX "/kbd"
+#define MATEKBD_KEYBOARD_CONFIG_SCHEMA MATEKBD_CONFIG_SCHEMA ".kbd"
#define GROUP_SWITCHERS_GROUP "grp"
#define DEFAULT_GROUP_SWITCH "grp:shift_caps_toggle"
-const gchar MATEKBD_KEYBOARD_CONFIG_DIR[] = MATEKBD_KEYBOARD_CONFIG_KEY_PREFIX;
-const gchar MATEKBD_KEYBOARD_CONFIG_KEY_MODEL[] =
- MATEKBD_KEYBOARD_CONFIG_KEY_PREFIX "/model";
-const gchar MATEKBD_KEYBOARD_CONFIG_KEY_LAYOUTS[] =
- MATEKBD_KEYBOARD_CONFIG_KEY_PREFIX "/layouts";
-const gchar MATEKBD_KEYBOARD_CONFIG_KEY_OPTIONS[] =
- MATEKBD_KEYBOARD_CONFIG_KEY_PREFIX "/options";
+const gchar MATEKBD_KEYBOARD_CONFIG_KEY_MODEL[] = "model";
+const gchar MATEKBD_KEYBOARD_CONFIG_KEY_LAYOUTS[] = "layouts";
+const gchar MATEKBD_KEYBOARD_CONFIG_KEY_OPTIONS[] = "options";
const gchar *MATEKBD_KEYBOARD_CONFIG_ACTIVE[] = {
MATEKBD_KEYBOARD_CONFIG_KEY_MODEL,
@@ -54,33 +51,30 @@ const gchar *MATEKBD_KEYBOARD_CONFIG_ACTIVE[] = {
/**
* static common functions
*/
-static void
-matekbd_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 == NULL)
+ return g_strv_length (l2) == 0;
+ if (l2 == NULL)
+ return g_strv_length (l1) == 0;
+
+ while ((*l1 != NULL) && (*l2 != NULL)) {
+ 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 == NULL) && (*l2 == NULL);
}
gboolean
@@ -188,64 +182,65 @@ matekbd_keyboard_config_split_items (const gchar * merged, gchar ** parent,
* static MatekbdKeyboardConfig functions
*/
static void
-matekbd_keyboard_config_options_add_full (MatekbdKeyboardConfig * kbd_config,
- const gchar * full_option_name)
-{
- kbd_config->options =
- g_slist_append (kbd_config->options,
- g_strdup (full_option_name));
-}
-
-static void
-matekbd_keyboard_config_layouts_add_full (MatekbdKeyboardConfig * 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
matekbd_keyboard_config_copy_from_xkl_config (MatekbdKeyboardConfig * kbd_config,
XklConfigRec * pdata)
{
char **p, **p1;
+ int i;
matekbd_keyboard_config_model_set (kbd_config, pdata->model);
xkl_debug (150, "Loaded Kbd model: [%s]\n", pdata->model);
- matekbd_keyboard_config_layouts_reset (kbd_config);
- p = pdata->layouts;
- p1 = pdata->variants;
- while (p != NULL && *p != NULL) {
- const gchar *full_layout =
- matekbd_keyboard_config_merge_items (*p, *p1);
- xkl_debug (150,
- "Loaded Kbd layout (with variant): [%s]\n",
- full_layout);
- matekbd_keyboard_config_layouts_add_full (kbd_config,
- full_layout);
- p++;
- p1++;
+ /* Layouts */
+ g_strfreev (kbd_config->layouts_variants);
+ kbd_config->layouts_variants = NULL;
+ if (pdata->layouts != NULL) {
+ p = pdata->layouts;
+ p1 = pdata->variants;
+ kbd_config->layouts_variants =
+ g_new0 (gchar *, g_strv_length (pdata->layouts) + 1);
+ i = 0;
+ while (*p != NULL) {
+ const gchar *full_layout =
+ matekbd_keyboard_config_merge_items (*p, *p1);
+ xkl_debug (150,
+ "Loaded Kbd layout (with variant): [%s]\n",
+ full_layout);
+ kbd_config->layouts_variants[i++] =
+ g_strdup (full_layout);
+ p++;
+ p1++;
+ }
}
- matekbd_keyboard_config_options_reset (kbd_config);
- p = pdata->options;
- while (p != NULL && *p != NULL) {
- char group[XKL_MAX_CI_NAME_LENGTH];
- char *option = *p;
- char *delim =
- (option != NULL) ? strchr (option, ':') : NULL;
- int len;
- if ((delim != NULL) &&
- ((len = (delim - option)) < XKL_MAX_CI_NAME_LENGTH)) {
- strncpy (group, option, len);
- group[len] = 0;
- xkl_debug (150, "Loaded Kbd option: [%s][%s]\n",
- group, option);
- matekbd_keyboard_config_options_add (kbd_config,
- group, option);
+ /* Options */
+ g_strfreev (kbd_config->options);
+ kbd_config->options = NULL;
+
+ if (pdata->options != NULL) {
+ p = pdata->options;
+ kbd_config->options =
+ g_new0 (gchar *, g_strv_length (pdata->options) + 1);
+ i = 0;
+ while (*p != NULL) {
+ char group[XKL_MAX_CI_NAME_LENGTH];
+ char *option = *p;
+ char *delim =
+ (option != NULL) ? strchr (option, ':') : NULL;
+ int len;
+ if ((delim != NULL) &&
+ ((len =
+ (delim - option)) <
+ XKL_MAX_CI_NAME_LENGTH)) {
+ strncpy (group, option, len);
+ group[len] = 0;
+ xkl_debug (150,
+ "Loaded Kbd option: [%s][%s]\n",
+ group, option);
+ matekbd_keyboard_config_options_set
+ (kbd_config, i++, group, option);
+ }
+ p++;
}
- p++;
}
}
@@ -261,14 +256,14 @@ matekbd_keyboard_config_copy_to_xkl_config (MatekbdKeyboardConfig * 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 +271,7 @@ matekbd_keyboard_config_copy_to_xkl_config (MatekbdKeyboardConfig * kbd_config,
for (i = num_layouts; --i >= 0;) {
char *layout, *variant;
if (matekbd_keyboard_config_split_items
- (the_layout_variant->data, &layout, &variant)
+ (*the_layout_variant, &layout, &variant)
&& variant != NULL) {
*p1 =
(layout ==
@@ -288,9 +283,9 @@ matekbd_keyboard_config_copy_to_xkl_config (MatekbdKeyboardConfig * 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 +293,26 @@ matekbd_keyboard_config_copy_to_xkl_config (MatekbdKeyboardConfig * 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 (matekbd_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 +321,10 @@ static void
matekbd_keyboard_config_load_params (MatekbdKeyboardConfig * kbd_config,
const gchar * param_names[])
{
- GError *gerror = NULL;
gchar *pc;
- GSList *pl, *l;
-
- pc = mateconf_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) {
matekbd_keyboard_config_model_set (kbd_config, NULL);
} else {
matekbd_keyboard_config_model_set (kbd_config, pc);
@@ -348,97 +333,73 @@ matekbd_keyboard_config_load_params (MatekbdKeyboardConfig * kbd_config,
xkl_debug (150, "Loaded Kbd model: [%s]\n",
kbd_config->model ? kbd_config->model : "(null)");
- matekbd_keyboard_config_layouts_reset (kbd_config);
-
- l = pl = mateconf_client_get_list (kbd_config->conf_client,
- param_names[1],
- MATECONF_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);
- matekbd_keyboard_config_layouts_add_full (kbd_config,
- l->data);
- l = l->next;
- }
- matekbd_keyboard_config_string_list_reset (&pl);
-
- matekbd_keyboard_config_options_reset (kbd_config);
-
- l = pl = mateconf_client_get_list (kbd_config->conf_client,
- param_names[2],
- MATECONF_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]);
+
+ if (kbd_config->layouts_variants != NULL
+ && kbd_config->layouts_variants[0] == NULL) {
+ g_strfreev (kbd_config->layouts_variants);
+ kbd_config->layouts_variants = NULL;
}
- while (l != NULL) {
- xkl_debug (150, "Loaded Kbd option: [%s]\n", l->data);
- matekbd_keyboard_config_options_add_full (kbd_config,
- (const gchar *)
- l->data);
- l = l->next;
+ g_strfreev (kbd_config->options);
+
+ kbd_config->options =
+ g_settings_get_strv (kbd_config->settings, param_names[2]);
+
+ if (kbd_config->options != NULL && kbd_config->options[0] == NULL) {
+ g_strfreev (kbd_config->options);
+ kbd_config->options = NULL;
}
- matekbd_keyboard_config_string_list_reset (&pl);
}
static void
matekbd_keyboard_config_save_params (MatekbdKeyboardConfig * kbd_config,
- MateConfChangeSet * cs,
const gchar * param_names[])
{
- GSList *pl;
+ gchar **pl;
if (kbd_config->model)
- mateconf_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
- mateconf_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++;
}
- mateconf_change_set_set_list (cs,
- param_names[1],
- MATECONF_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");
- mateconf_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++;
}
- mateconf_change_set_set_list (cs,
- param_names[2],
- MATECONF_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");
- mateconf_change_set_unset (cs, param_names[2]);
+ g_settings_set_strv (kbd_config->settings,
+ param_names[2], NULL);
}
}
@@ -447,23 +408,11 @@ matekbd_keyboard_config_save_params (MatekbdKeyboardConfig * kbd_config,
*/
void
matekbd_keyboard_config_init (MatekbdKeyboardConfig * kbd_config,
- MateConfClient * 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 (MATEKBD_KEYBOARD_CONFIG_SCHEMA);
kbd_config->engine = engine;
- g_object_ref (kbd_config->conf_client);
-
- mateconf_client_add_dir (kbd_config->conf_client,
- MATEKBD_KEYBOARD_CONFIG_DIR,
- MATECONF_CLIENT_PRELOAD_NONE, &gerror);
- if (gerror != NULL) {
- g_warning ("err: %s\n", gerror->message);
- g_error_free (gerror);
- gerror = NULL;
- }
}
void
@@ -471,15 +420,17 @@ matekbd_keyboard_config_term (MatekbdKeyboardConfig * kbd_config)
{
matekbd_keyboard_config_model_set (kbd_config, NULL);
- matekbd_keyboard_config_layouts_reset (kbd_config);
- matekbd_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
-matekbd_keyboard_config_load_from_mateconf (MatekbdKeyboardConfig * kbd_config,
+matekbd_keyboard_config_load_from_gsettings (MatekbdKeyboardConfig * kbd_config,
MatekbdKeyboardConfig *
kbd_config_default)
{
@@ -487,31 +438,20 @@ matekbd_keyboard_config_load_from_mateconf (MatekbdKeyboardConfig * kbd_config,
MATEKBD_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);
}
}
}
@@ -554,6 +494,56 @@ matekbd_keyboard_config_load_from_x_initial (MatekbdKeyboardConfig * kbd_config,
g_object_unref (G_OBJECT (data));
}
+static gboolean
+matekbd_keyboard_config_options_equals (MatekbdKeyboardConfig * kbd_config1,
+ MatekbdKeyboardConfig * kbd_config2)
+{
+ int num_options, num_options2;
+
+ num_options =
+ (kbd_config1->options ==
+ NULL) ? 0 : g_strv_length (kbd_config1->options);
+ num_options2 =
+ (kbd_config2->options ==
+ NULL) ? 0 : g_strv_length (kbd_config2->options);
+
+ if (num_options != num_options2)
+ return False;
+
+ if (num_options != 0) {
+ int i;
+ char *group1, *option1;
+
+ for (i = 0; i < num_options; i++) {
+ int j;
+ char *group2, *option2;
+ gboolean are_equal = FALSE;
+
+ if (!matekbd_keyboard_config_split_items
+ (kbd_config1->options[i], &group1, &option1))
+ continue;
+
+ option1 = g_strdup (option1);
+
+ for (j = 0; j < num_options && !are_equal; j++) {
+ if (matekbd_keyboard_config_split_items
+ (kbd_config2->options[j], &group2,
+ &option2)) {
+ are_equal =
+ strcmp (option1, option2) == 0;
+ }
+ }
+
+ g_free (option1);
+
+ if (!are_equal)
+ return False;
+ }
+ }
+
+ return True;
+}
+
gboolean
matekbd_keyboard_config_equals (MatekbdKeyboardConfig * kbd_config1,
MatekbdKeyboardConfig * kbd_config2)
@@ -565,32 +555,26 @@ matekbd_keyboard_config_equals (MatekbdKeyboardConfig * 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);
+ if (!g_strv_equal (kbd_config1->layouts_variants,
+ kbd_config2->layouts_variants))
+ return False;
+
+ if (!matekbd_keyboard_config_options_equals
+ (kbd_config1, kbd_config2))
+ return False;
+
+ return True;
}
void
-matekbd_keyboard_config_save_to_mateconf (MatekbdKeyboardConfig * kbd_config)
+matekbd_keyboard_config_save_to_gsettings (MatekbdKeyboardConfig * kbd_config)
{
- MateConfChangeSet *cs;
- GError *gerror = NULL;
+ g_settings_delay (kbd_config->settings);
- cs = mateconf_change_set_new ();
+ matekbd_keyboard_config_save_params (kbd_config,
+ MATEKBD_KEYBOARD_CONFIG_ACTIVE);
- matekbd_keyboard_config_save_params (kbd_config, cs,
- MATEKBD_KEYBOARD_CONFIG_ACTIVE);
-
- mateconf_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;
- }
- mateconf_change_set_unref (cs);
+ g_settings_apply (kbd_config->settings);
}
void
@@ -605,35 +589,8 @@ matekbd_keyboard_config_model_set (MatekbdKeyboardConfig * kbd_config,
}
void
-matekbd_keyboard_config_layouts_add (MatekbdKeyboardConfig * kbd_config,
- const gchar * layout_name,
- const gchar * variant_name)
-{
- const gchar *merged;
- if (layout_name == NULL)
- return;
- merged =
- matekbd_keyboard_config_merge_items (layout_name, variant_name);
- if (merged == NULL)
- return;
- matekbd_keyboard_config_layouts_add_full (kbd_config, merged);
-}
-
-void
-matekbd_keyboard_config_layouts_reset (MatekbdKeyboardConfig * kbd_config)
-{
- matekbd_keyboard_config_string_list_reset
- (&kbd_config->layouts_variants);
-}
-
-void
-matekbd_keyboard_config_options_reset (MatekbdKeyboardConfig * kbd_config)
-{
- matekbd_keyboard_config_string_list_reset (&kbd_config->options);
-}
-
-void
-matekbd_keyboard_config_options_add (MatekbdKeyboardConfig * kbd_config,
+matekbd_keyboard_config_options_set (MatekbdKeyboardConfig * kbd_config,
+ gint idx,
const gchar * group_name,
const gchar * option_name)
{
@@ -644,7 +601,7 @@ matekbd_keyboard_config_options_add (MatekbdKeyboardConfig * kbd_config,
matekbd_keyboard_config_merge_items (group_name, option_name);
if (merged == NULL)
return;
- matekbd_keyboard_config_options_add_full (kbd_config, merged);
+ kbd_config->options[idx] = g_strdup (merged);
}
gboolean
@@ -652,14 +609,17 @@ matekbd_keyboard_config_options_is_set (MatekbdKeyboardConfig * kbd_config,
const gchar * group_name,
const gchar * option_name)
{
+ gchar **p = kbd_config->options;
const gchar *merged =
matekbd_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 +637,20 @@ matekbd_keyboard_config_activate (MatekbdKeyboardConfig * kbd_config)
void
matekbd_keyboard_config_start_listen (MatekbdKeyboardConfig * kbd_config,
- MateConfClientNotifyFunc func,
+ GCallback func,
gpointer user_data)
{
- matekbd_desktop_config_add_listener (kbd_config->conf_client,
- MATEKBD_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
matekbd_keyboard_config_stop_listen (MatekbdKeyboardConfig * kbd_config)
{
- matekbd_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 +694,18 @@ matekbd_keyboard_config_to_string (const MatekbdKeyboardConfig * 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 +718,12 @@ matekbd_keyboard_config_to_string (const MatekbdKeyboardConfig * 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
@@ -791,27 +748,35 @@ matekbd_keyboard_config_to_string (const MatekbdKeyboardConfig * config)
return result;
}
-GSList *
-matekbd_keyboard_config_add_default_switch_option_if_necessary (GSList *
- layouts_list,
- GSList *
- options_list, gboolean *was_appended)
+/**
+ * matekbd_keyboard_config_add_default_switch_option_if_necessary:
+ *
+ * Returns: (transfer full) (array zero-terminated=1): List of options
+ */
+gchar **
+matekbd_keyboard_config_add_default_switch_option_if_necessary (gchar **
+ layouts_list,
+ gchar **
+ options_list,
+ gboolean *was_appended)
{
*was_appended = FALSE;
- if (g_slist_length (layouts_list) >= 2) {
+ if (g_strv_length (layouts_list) >= 2) {
gboolean any_switcher = False;
- GSList *option = options_list;
- while (option != NULL) {
- char *g, *o;
- if (matekbd_keyboard_config_split_items
- (option->data, &g, &o)) {
- if (!g_ascii_strcasecmp
- (g, GROUP_SWITCHERS_GROUP)) {
- any_switcher = True;
- break;
+ if (*options_list != NULL) {
+ gchar **option = options_list;
+ while (*option != NULL) {
+ char *g, *o;
+ if (matekbd_keyboard_config_split_items
+ (*option, &g, &o)) {
+ if (!g_ascii_strcasecmp
+ (g, GROUP_SWITCHERS_GROUP)) {
+ any_switcher = True;
+ break;
+ }
}
+ option++;
}
- option = option->next;
}
if (!any_switcher) {
const gchar *id =
@@ -819,7 +784,7 @@ matekbd_keyboard_config_add_default_switch_option_if_necessary (GSList *
(GROUP_SWITCHERS_GROUP,
DEFAULT_GROUP_SWITCH);
options_list =
- g_slist_append (options_list, g_strdup (id));
+ matekbd_strv_append (options_list, g_strdup (id));
*was_appended = TRUE;
}
}