summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey V. Udaltsov <svu@gnome.org>2010-10-04 09:46:49 +0100
committerSergey V. Udaltsov <svu@gnome.org>2010-10-04 23:02:28 +0100
commit40eb8328020ce2834983b240feee67963b5bdcb2 (patch)
tree7f7cff31ff36735413fc27d327224dadb83a3834
parent9e5bb89dc202fb60c8ebafd8d630e0b7fde30754 (diff)
downloadlibgnomekbd-40eb8328020ce2834983b240feee67963b5bdcb2.tar.gz
code cleanup
some strv functions are provided, hopefully will be in glib one day
-rw-r--r--libgnomekbd/gkbd-desktop-config.c8
-rw-r--r--libgnomekbd/gkbd-indicator-plugin-manager.c24
-rw-r--r--libgnomekbd/gkbd-indicator.c2
-rw-r--r--libgnomekbd/gkbd-keyboard-config.c90
-rw-r--r--libgnomekbd/gkbd-util.c38
-rw-r--r--libgnomekbd/gkbd-util.h6
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