diff options
author | Sergey V. Udaltsov <svu@gnome.org> | 2010-10-04 09:46:49 +0100 |
---|---|---|
committer | Sergey V. Udaltsov <svu@gnome.org> | 2010-10-04 23:02:28 +0100 |
commit | 40eb8328020ce2834983b240feee67963b5bdcb2 (patch) | |
tree | 7f7cff31ff36735413fc27d327224dadb83a3834 | |
parent | 9e5bb89dc202fb60c8ebafd8d630e0b7fde30754 (diff) | |
download | libgnomekbd-40eb8328020ce2834983b240feee67963b5bdcb2.tar.gz |
code cleanup
some strv functions are provided, hopefully will be in glib one day
-rw-r--r-- | libgnomekbd/gkbd-desktop-config.c | 8 | ||||
-rw-r--r-- | libgnomekbd/gkbd-indicator-plugin-manager.c | 24 | ||||
-rw-r--r-- | libgnomekbd/gkbd-indicator.c | 2 | ||||
-rw-r--r-- | libgnomekbd/gkbd-keyboard-config.c | 90 | ||||
-rw-r--r-- | libgnomekbd/gkbd-util.c | 38 | ||||
-rw-r--r-- | libgnomekbd/gkbd-util.h | 6 |
6 files changed, 103 insertions, 65 deletions
diff --git a/libgnomekbd/gkbd-desktop-config.c b/libgnomekbd/gkbd-desktop-config.c index ac5ef41..b0b0ff3 100644 --- a/libgnomekbd/gkbd-desktop-config.c +++ b/libgnomekbd/gkbd-desktop-config.c @@ -70,13 +70,13 @@ static gboolean pv = variant_ids; total_layouts = g_strv_length ((char **) layout_ids); sld = *short_layout_descriptions = - g_new0 (char *, total_layouts + 1); + g_new0 (gchar *, total_layouts + 1); lld = *long_layout_descriptions = - g_new0 (char *, total_layouts + 1); + g_new0 (gchar *, total_layouts + 1); svd = *short_variant_descriptions = - g_new0 (char *, total_layouts + 1); + g_new0 (gchar *, total_layouts + 1); lvd = *long_variant_descriptions = - g_new0 (char *, total_layouts + 1); + g_new0 (gchar *, total_layouts + 1); while (pl != NULL && *pl != NULL) { diff --git a/libgnomekbd/gkbd-indicator-plugin-manager.c b/libgnomekbd/gkbd-indicator-plugin-manager.c index b07e3b6..70a5d6d 100644 --- a/libgnomekbd/gkbd-indicator-plugin-manager.c +++ b/libgnomekbd/gkbd-indicator-plugin-manager.c @@ -25,6 +25,7 @@ #include <gkbd-indicator-plugin-manager.h> #include <gkbd-config-private.h> +#include <gkbd-util.h> #define FOREACH_INITED_PLUGIN() \ { \ @@ -324,14 +325,9 @@ void if (NULL != gkbd_indicator_plugin_manager_get_plugin (manager, full_path)) { - gint old_length = g_strv_length (*enabled_plugins); - gchar **new_enabled_plugins = - g_new0 (gchar *, old_length + 2); - memcpy (new_enabled_plugins, *enabled_plugins, - old_length * sizeof (gchar *)); - new_enabled_plugins[old_length] = g_strdup (full_path); - g_free (*enabled_plugins); - *enabled_plugins = new_enabled_plugins; + *enabled_plugins = + gkbd_strv_append (*enabled_plugins, + g_strdup (full_path)); } } @@ -339,17 +335,7 @@ void gkbd_indicator_plugin_manager_disable_plugin (GkbdIndicatorPluginManager * manager, gchar *** enabled_plugins, const char *full_path) { - gchar **p = *enabled_plugins; - if (p != NULL) { - while (*p != NULL) { - if (!strcmp (*p, full_path)) { - gint remains = g_strv_length (p); - memmove (p, p + 1, remains * sizeof(gchar*)); - return; - } - p++; - } - } + gkbd_strv_remove (*enabled_plugins, full_path); } int diff --git a/libgnomekbd/gkbd-indicator.c b/libgnomekbd/gkbd-indicator.c index 6411c2e..39b3818 100644 --- a/libgnomekbd/gkbd-indicator.c +++ b/libgnomekbd/gkbd-indicator.c @@ -534,7 +534,7 @@ gkbd_indicator_load_group_names (const gchar ** layout_ids, g_strdupv (globals.kbd_cfg.layouts_variants); } else { globals.full_group_names = - g_new0 (char *, total_groups + 1); + g_new0 (gchar *, total_groups + 1); for (i = total_groups; --i >= 0;) { globals.full_group_names[i] = g_strdup_printf ("Group %d", i); diff --git a/libgnomekbd/gkbd-keyboard-config.c b/libgnomekbd/gkbd-keyboard-config.c index 2ec754f..5c48be9 100644 --- a/libgnomekbd/gkbd-keyboard-config.c +++ b/libgnomekbd/gkbd-keyboard-config.c @@ -28,6 +28,7 @@ #include <gkbd-keyboard-config.h> #include <gkbd-config-private.h> +#include <gkbd-util.h> /** * GkbdKeyboardConfig @@ -184,44 +185,57 @@ gkbd_keyboard_config_copy_from_xkl_config (GkbdKeyboardConfig * kbd_config, gkbd_keyboard_config_model_set (kbd_config, pdata->model); xkl_debug (150, "Loaded Kbd model: [%s]\n", pdata->model); + /* Layouts */ 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); - kbd_config->layouts_variants[i++] = g_strdup (full_layout); - p++; - p1++; + 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 = + gkbd_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++; + } } + /* Options */ 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; - 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); - gkbd_keyboard_config_options_set (kbd_config, i++, - group, option); + 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); + gkbd_keyboard_config_options_set + (kbd_config, i++, group, option); + } + p++; } - p++; } } @@ -690,14 +704,8 @@ gkbd_keyboard_config_add_default_switch_option_if_necessary (gchar ** gkbd_keyboard_config_merge_items (GROUP_SWITCHERS_GROUP, DEFAULT_GROUP_SWITCH); - gint old_size = g_strv_length (options_list); - gchar **new_options_list = - g_new0 (gchar *, old_size + 2); - memcpy (new_options_list, options_list, - old_size * sizeof (gchar *)); - new_options_list[old_size] = g_strdup (id); - g_free (options_list); - options_list = new_options_list; + options_list = + gkbd_strv_append (options_list, g_strdup (id)); *was_appended = TRUE; } } diff --git a/libgnomekbd/gkbd-util.c b/libgnomekbd/gkbd-util.c index 0812804..af5002b 100644 --- a/libgnomekbd/gkbd-util.c +++ b/libgnomekbd/gkbd-util.c @@ -114,3 +114,41 @@ gkbd_preview_save_position (GdkRectangle * rect) g_settings_apply (settings); g_object_unref (G_OBJECT (settings)); } + +gboolean +gkbd_strv_remove (gchar ** arr, const gchar * element) +{ + gchar **p = arr; + if (p != NULL) { + while (*p != NULL) { + if (!strcmp (*p, element)) { + gkbd_strv_behead (p); + return TRUE; + } + p++; + } + } + return FALSE; +} + +gchar ** +gkbd_strv_append (gchar ** arr, gchar * element) +{ + gint old_length = (arr == NULL) ? 0 : g_strv_length (arr); + gchar **new_arr = g_new0 (gchar *, old_length + 2); + if (arr != NULL) { + memcpy (new_arr, arr, old_length * sizeof (gchar *)); + g_free (arr); + } + new_arr[old_length] = element; + return new_arr; +} + +void +gkbd_strv_behead (gchar ** arr) +{ + if (arr == NULL || *arr == NULL) + return; + g_free (*arr); + memmove (arr, arr + 1, g_strv_length (arr) * sizeof (gchar *)); +} diff --git a/libgnomekbd/gkbd-util.h b/libgnomekbd/gkbd-util.h index 88d98e9..fb6e9c1 100644 --- a/libgnomekbd/gkbd-util.h +++ b/libgnomekbd/gkbd-util.h @@ -29,5 +29,11 @@ extern GdkRectangle *gkbd_preview_load_position (void); extern void gkbd_preview_save_position (GdkRectangle * rect); +/* Missing in glib */ +extern gboolean gkbd_strv_remove (gchar ** arr, const gchar * element); + +extern gchar **gkbd_strv_append (gchar ** arr, gchar * element); + +extern void gkbd_strv_behead (gchar ** arr); #endif |