[libgnomekbd] code cleanup



commit 40eb8328020ce2834983b240feee67963b5bdcb2
Author: Sergey V. Udaltsov <svu gnome org>
Date:   Mon Oct 4 09:46:49 2010 +0100

    code cleanup
    
    some strv functions are provided, hopefully will be in glib one day

 libgnomekbd/gkbd-desktop-config.c           |    8 +-
 libgnomekbd/gkbd-indicator-plugin-manager.c |   24 ++------
 libgnomekbd/gkbd-indicator.c                |    2 +-
 libgnomekbd/gkbd-keyboard-config.c          |   90 +++++++++++++++------------
 libgnomekbd/gkbd-util.c                     |   38 +++++++++++
 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



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]