changeset 1406:c0afd5cbaa23

Only store editors if they match criterias to not be hidden from start, it makes more sense. Fix editor_command_path_parse().
author zas_
date Mon, 09 Mar 2009 12:44:06 +0000
parents 03384485676d
children 57421a728682
files src/editors.c
diffstat 1 files changed, 18 insertions(+), 18 deletions(-) [+]
line wrap: on
line diff
--- a/src/editors.c	Sun Mar 08 23:12:49 2009 +0000
+++ b/src/editors.c	Mon Mar 09 12:44:06 2009 +0000
@@ -152,6 +152,7 @@
 	const gchar *key = filename_from_path(path);
 	gchar **categories, **only_show_in, **not_show_in;
 	gchar *try_exec;
+	gboolean hidden = FALSE;
 
 	if (g_hash_table_lookup(editors, key)) return FALSE; /* the file found earlier wins */
 	
@@ -169,17 +170,10 @@
 		return FALSE;
 		}
 	
-	editor = g_new0(EditorDescription, 1);
-	
-	editor->key = g_strdup(key);
-	editor->file = g_strdup(path);
-
-	g_hash_table_insert(editors, editor->key, editor);
-
 	if (g_key_file_get_boolean(key_file, DESKTOP_GROUP, "Hidden", NULL)
 	    || g_key_file_get_boolean(key_file, DESKTOP_GROUP, "NoDisplay", NULL))
 	    	{
-	    	editor->hidden = TRUE;
+	    	hidden = TRUE;
 		}
 
 	categories = g_key_file_get_string_list(key_file, DESKTOP_GROUP, "Categories", NULL, NULL);
@@ -195,12 +189,12 @@
 				found = TRUE;
 				break;
 				}
-		if (!found) editor->hidden = TRUE;
+		if (!found) hidden = TRUE;
 		g_strfreev(categories);
 		}
 	else
 		{
-		editor->hidden = TRUE;
+		hidden = TRUE;
 		}
 
 	only_show_in = g_key_file_get_string_list(key_file, DESKTOP_GROUP, "OnlyShowIn", NULL, NULL);
@@ -214,7 +208,7 @@
 				found = TRUE;
 				break;
 				}
-		if (!found) editor->hidden = TRUE;
+		if (!found) hidden = TRUE;
 		g_strfreev(only_show_in);
 		}
 
@@ -229,27 +223,34 @@
 				found = TRUE;
 				break;
 				}
-		if (found) editor->hidden = TRUE;
+		if (found) hidden = TRUE;
 		g_strfreev(not_show_in);
 		}
 		
-		
 	try_exec = g_key_file_get_string(key_file, DESKTOP_GROUP, "TryExec", NULL);
 	if (try_exec && !editor->hidden)
 		{
 		gchar *try_exec_res = g_find_program_in_path(try_exec);
-		if (!try_exec_res) editor->hidden = TRUE;
+		if (!try_exec_res) hidden = TRUE;
 		g_free(try_exec_res);
 		g_free(try_exec);
 		}
 		
-	if (editor->hidden) 
+	if (hidden) 
 		{
 		/* hidden editors will be deleted, no need to parse the rest */
 		g_key_file_free(key_file);
-		return TRUE;
+		return FALSE;
 		}
+
+	editor = g_new0(EditorDescription, 1);
 	
+	editor->key = g_strdup(key);
+	editor->file = g_strdup(path);
+	editor->hidden = hidden;
+
+	g_hash_table_insert(editors, editor->key, editor);
+
 	editor->name = g_key_file_get_locale_string(key_file, DESKTOP_GROUP, "Name", NULL, NULL);
 	editor->icon = g_key_file_get_string(key_file, DESKTOP_GROUP, "Icon", NULL);
 
@@ -570,7 +571,7 @@
 {
 	GString *string;
 	gchar *pathl;
-	const gchar *p;
+	const gchar *p = NULL;
 
 	string = g_string_new("");
 
@@ -620,7 +621,6 @@
 			p = "";
 		}
 
-	g_assert(p);
 	while (*p != '\0')
 		{
 		/* must escape \, ", `, and $ to avoid problems,