From a8043abeda234b49711e8934eb10a9fc55884e12 Mon Sep 17 00:00:00 2001 From: Emmanuele Bassi Date: Mon, 7 May 2007 20:14:37 +0100 Subject: Follow search hits if they are folders If a hit returned by the search query is a folder, follow it and return the file chooser to browse mode, with the current directory changed to the folder path. Signed-off-by: Emmanuele Bassi --- gtk/gtkfilechooserdefault.c | 67 ++++++++++++++++++++++++++++++------------- 1 files changed, 47 insertions(+), 20 deletions(-) diff --git a/gtk/gtkfilechooserdefault.c b/gtk/gtkfilechooserdefault.c index ad22821..885afcd 100644 --- a/gtk/gtkfilechooserdefault.c +++ b/gtk/gtkfilechooserdefault.c @@ -9265,35 +9265,62 @@ list_row_activated (GtkTreeView *tree_view, GtkTreeViewColumn *column, GtkFileChooserDefault *impl) { - GtkTreeIter iter, child_iter; - const GtkFileInfo *info; + GtkTreeIter iter; - if (impl->operation_mode == OPERATION_MODE_SEARCH) + switch (impl->operation_mode) { - g_signal_emit_by_name (impl, "file-activated"); - return; - } + case OPERATION_MODE_SEARCH: + { + GtkFilePath *file_path; + gboolean is_folder; - if (!gtk_tree_model_get_iter (GTK_TREE_MODEL (impl->sort_model), &iter, path)) - return; + if (!gtk_tree_model_get_iter (GTK_TREE_MODEL (impl->search_model), &iter, path)) + return; - gtk_tree_model_sort_convert_iter_to_child_iter (impl->sort_model, &child_iter, &iter); + gtk_tree_model_get (GTK_TREE_MODEL (impl->search_model), &iter, + SEARCH_MODEL_COL_PATH, &file_path, + SEARCH_MODEL_COL_IS_FOLDER, &is_folder, + -1); + + if (is_folder) + { + change_folder_and_display_error (impl, file_path, FALSE); + search_switch_to_browse_mode (impl); + return; + } - info = _gtk_file_system_model_get_info (impl->browse_files_model, &child_iter); + g_signal_emit_by_name (impl, "file-activated"); + } + break; + + case OPERATION_MODE_BROWSE: + { + GtkTreeIter child_iter; + const GtkFileInfo *info; - if (gtk_file_info_get_is_folder (info)) - { - const GtkFilePath *file_path; + if (!gtk_tree_model_get_iter (GTK_TREE_MODEL (impl->sort_model), &iter, path)) + return; + + gtk_tree_model_sort_convert_iter_to_child_iter (impl->sort_model, + &child_iter, &iter); + info = _gtk_file_system_model_get_info (impl->browse_files_model, + &child_iter); - file_path = _gtk_file_system_model_get_path (impl->browse_files_model, &child_iter); - change_folder_and_display_error (impl, file_path, FALSE); + if (gtk_file_info_get_is_folder (info)) + { + const GtkFilePath *file_path; + + file_path = _gtk_file_system_model_get_path (impl->browse_files_model, &child_iter); + change_folder_and_display_error (impl, file_path, FALSE); + return; + } - return; + if (impl->action == GTK_FILE_CHOOSER_ACTION_OPEN || + impl->action == GTK_FILE_CHOOSER_ACTION_SAVE) + g_signal_emit_by_name (impl, "file-activated"); + } + break; } - - if (impl->action == GTK_FILE_CHOOSER_ACTION_OPEN || - impl->action == GTK_FILE_CHOOSER_ACTION_SAVE) - g_signal_emit_by_name (impl, "file-activated"); } static void -- 1.4.4.2