# HG changeset patch # User zas_ # Date 1236602646 0 # Node ID c0afd5cbaa232ba74f81d9d691d81b11f0ee8306 # Parent 03384485676d24cf72afef064a6130b9cb54a555 Only store editors if they match criterias to not be hidden from start, it makes more sense. Fix editor_command_path_parse(). diff -r 03384485676d -r c0afd5cbaa23 src/editors.c --- 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,