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); } }
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 on_add_external(G_GNUC_UNUSED GtkMenuItem * menuitem, G_GNUC_UNUSED gpointer user_data) { gchar *utf8_base_path = get_project_base_path(); gchar *locale_path = utils_get_locale_from_utf8(utf8_base_path); GtkWidget *dialog; dialog = gtk_file_chooser_dialog_new(_("Add External Directory"), GTK_WINDOW(geany->main_widgets->window), GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER, _("_Cancel"), GTK_RESPONSE_CANCEL, _("Add"), GTK_RESPONSE_ACCEPT, NULL); gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(dialog), locale_path); if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) { gchar *locale_filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog)); gchar *utf8_filename = utils_get_utf8_from_locale(locale_filename); prjorg_project_add_external_dir(utf8_filename); prjorg_sidebar_update(TRUE); project_write_config(); g_free(utf8_filename); g_free(locale_filename); } gtk_widget_destroy(dialog); g_free(utf8_base_path); g_free(locale_path); }
/* utf8 */ static gchar *build_path(GtkTreeIter *iter) { GtkTreeIter node; GtkTreeIter parent; gchar *path = NULL; GtkTreeModel *model; gchar *name; if (!iter) return get_project_base_path(); node = *iter; model = GTK_TREE_MODEL(s_file_store); while (gtk_tree_model_iter_parent(model, &parent, &node)) { gtk_tree_model_get(model, &node, FILEVIEW_COLUMN_NAME, &name, -1); if (path == NULL) path = g_strdup(name); else SETPTR(path, g_build_filename(name, path, NULL)); g_free(name); node = parent; } if (topmost_selected(model, &node, TRUE)) { gchar *utf8_base_path = get_project_base_path(); SETPTR(path, g_build_filename(utf8_base_path, path, NULL)); g_free(utf8_base_path); } else { gtk_tree_model_get(model, &node, FILEVIEW_COLUMN_NAME, &name, -1); SETPTR(path, g_build_filename(name, path, NULL)); g_free(name); } return path; }
static void find_tags(const gchar *name, gboolean declaration, gboolean case_sensitive, MatchType match_type, gchar *path) { GPtrArray *tags_array = geany_data->app->tm_workspace->tags_array; guint i; gchar *name_case; GPatternSpec *pspec; if (case_sensitive) name_case = g_strdup(name); else name_case = g_utf8_strdown(name, -1); pspec = g_pattern_spec_new(name_case); msgwin_set_messages_dir(get_project_base_path()); msgwin_clear_tab(MSG_MESSAGE); for (i = 0; i < tags_array->len; i++) /* TODO: binary search */ { TMTag *tag = tags_array->pdata[i]; if (match(tag, name_case, declaration, case_sensitive, match_type, pspec, path)) { gchar *scopestr = tag->scope ? g_strconcat(tag->scope, "::", NULL) : g_strdup(""); gchar *relpath; relpath = get_relative_path(get_project_base_path(), tag->file->file_name); msgwin_msg_add(COLOR_BLACK, -1, NULL, "%s:%lu:\n\t[%s]\t %s%s%s", relpath, tag->line, tm_tag_type_name(tag), scopestr, tag->name, tag->arglist ? tag->arglist : ""); g_free(scopestr); g_free(relpath); } } msgwin_switch_tab(MSG_MESSAGE, TRUE); g_free(name_case); g_free(pspec); }