static void find_file(GtkTreeIter *iter) { gchar *pattern_str = NULL; gboolean case_sensitive, full_path; gchar *path; path = build_path(iter); if (show_dialog_find_file(iter ? path : NULL, &pattern_str, &case_sensitive, &full_path) == GTK_RESPONSE_ACCEPT) { GPatternSpec *pattern; if (!case_sensitive) SETPTR(pattern_str, g_utf8_strdown(pattern_str, -1)); pattern = g_pattern_spec_new(pattern_str); msgwin_clear_tab(MSG_MESSAGE); msgwin_set_messages_dir(get_project_base_path()); find_file_recursive(iter, case_sensitive, full_path, pattern); msgwin_switch_tab(MSG_MESSAGE, TRUE); } g_free(pattern_str); g_free(path); }
static void find_file_recursive(GtkTreeIter *iter, gboolean case_sensitive, gboolean full_path, GPatternSpec *pattern) { GtkTreeModel *model = GTK_TREE_MODEL(s_file_store); GtkTreeIter child; gboolean iterate; iterate = gtk_tree_model_iter_children(model, &child, iter); if (iterate) { while (iterate) { find_file_recursive(&child, case_sensitive, full_path, pattern); iterate = gtk_tree_model_iter_next(model, &child); } } else { gchar *utf8_name; if (iter == NULL) return; if (full_path) { gchar *utf8_path, *utf8_base_path; utf8_path = build_path(iter); utf8_base_path = get_project_base_path(); utf8_name = get_relative_path(utf8_base_path, utf8_path); g_free(utf8_path); g_free(utf8_base_path); } else gtk_tree_model_get(GTK_TREE_MODEL(model), iter, FILEVIEW_COLUMN_NAME, &utf8_name, -1); if (!case_sensitive) SETPTR(utf8_name, g_utf8_strdown(utf8_name, -1)); if (g_pattern_match_string(pattern, utf8_name)) { gchar *utf8_base_path = get_project_base_path(); gchar *utf8_path, *rel_path; utf8_path = build_path(iter); rel_path = get_relative_path(utf8_base_path, utf8_path); msgwin_msg_add(COLOR_BLACK, -1, NULL, "%s", rel_path ? rel_path : utf8_path); g_free(utf8_path); g_free(rel_path); g_free(utf8_base_path); } g_free(utf8_name); } }