summaryrefslogtreecommitdiff
path: root/gtk
diff options
context:
space:
mode:
Diffstat (limited to 'gtk')
-rw-r--r--gtk/gtkfilechooserdefault.c340
-rw-r--r--gtk/gtkfilechooserprivate.h6
2 files changed, 303 insertions, 43 deletions
diff --git a/gtk/gtkfilechooserdefault.c b/gtk/gtkfilechooserdefault.c
index 31f77463e3..71b4884a90 100644
--- a/gtk/gtkfilechooserdefault.c
+++ b/gtk/gtkfilechooserdefault.c
@@ -2645,13 +2645,17 @@ add_bookmark_foreach_cb (GtkTreeModel *model,
break;
case OPERATION_MODE_SEARCH:
- gtk_tree_model_get (GTK_TREE_MODEL (impl->search_model), iter,
+ gtk_tree_model_filter_convert_iter_to_child_iter (impl->search_model_filter,
+ &child_iter, iter);
+ gtk_tree_model_get (GTK_TREE_MODEL (impl->search_model), &child_iter,
SEARCH_MODEL_COL_PATH, &file_path,
-1);
break;
case OPERATION_MODE_RECENT:
- gtk_tree_model_get (GTK_TREE_MODEL (impl->recent_model), iter,
+ gtk_tree_model_filter_convert_iter_to_child_iter (impl->recent_model_filter,
+ &child_iter, iter);
+ gtk_tree_model_get (GTK_TREE_MODEL (impl->recent_model), &child_iter,
RECENT_MODEL_COL_PATH, &file_path,
-1);
break;
@@ -2777,13 +2781,15 @@ selection_check_foreach_cb (GtkTreeModel *model,
break;
case OPERATION_MODE_SEARCH:
- gtk_tree_model_get (GTK_TREE_MODEL (closure->impl->search_model), iter,
+ gtk_tree_model_filter_convert_iter_to_child_iter (closure->impl->search_model_filter, &child_iter, iter);
+ gtk_tree_model_get (GTK_TREE_MODEL (closure->impl->search_model), &child_iter,
SEARCH_MODEL_COL_IS_FOLDER, &is_folder,
-1);
break;
case OPERATION_MODE_RECENT:
- gtk_tree_model_get (GTK_TREE_MODEL (closure->impl->recent_model), iter,
+ gtk_tree_model_filter_convert_iter_to_child_iter (closure->impl->recent_model_filter, &child_iter, iter);
+ gtk_tree_model_get (GTK_TREE_MODEL (closure->impl->recent_model), &child_iter,
RECENT_MODEL_COL_IS_FOLDER, &is_folder,
-1);
break;
@@ -2849,13 +2855,15 @@ get_selected_path_foreach_cb (GtkTreeModel *model,
break;
case OPERATION_MODE_SEARCH:
- gtk_tree_model_get (GTK_TREE_MODEL (closure->impl->search_model), iter,
+ gtk_tree_model_filter_convert_iter_to_child_iter (closure->impl->search_model_filter, &child_iter, iter);
+ gtk_tree_model_get (GTK_TREE_MODEL (closure->impl->search_model), &child_iter,
SEARCH_MODEL_COL_PATH, &closure->path,
-1);
break;
case OPERATION_MODE_RECENT:
- gtk_tree_model_get (GTK_TREE_MODEL (closure->impl->recent_model), iter,
+ gtk_tree_model_filter_convert_iter_to_child_iter (closure->impl->recent_model_filter, &child_iter, iter);
+ gtk_tree_model_get (GTK_TREE_MODEL (closure->impl->recent_model), &child_iter,
RECENT_MODEL_COL_PATH, &closure->path,
-1);
break;
@@ -2910,13 +2918,15 @@ update_tooltip (GtkTreeModel *model,
break;
case OPERATION_MODE_SEARCH:
- gtk_tree_model_get (GTK_TREE_MODEL (udata->impl->search_model), iter,
+ gtk_tree_model_filter_convert_iter_to_child_iter (udata->impl->search_model_filter, &child_iter, iter);
+ gtk_tree_model_get (GTK_TREE_MODEL (udata->impl->search_model), &child_iter,
SEARCH_MODEL_COL_DISPLAY_NAME, &display_name,
-1);
break;
case OPERATION_MODE_RECENT:
- gtk_tree_model_get (GTK_TREE_MODEL (udata->impl->recent_model), iter,
+ gtk_tree_model_filter_convert_iter_to_child_iter (udata->impl->recent_model_filter, &child_iter, iter);
+ gtk_tree_model_get (GTK_TREE_MODEL (udata->impl->recent_model), &child_iter,
RECENT_MODEL_COL_DISPLAY_NAME, &display_name,
-1);
break;
@@ -6636,9 +6646,10 @@ update_chooser_entry (GtkFileChooserDefault *impl)
}
else if (closure.num_selected == 1)
{
+ GtkTreeIter child_iter;
+
if (impl->operation_mode == OPERATION_MODE_BROWSE)
{
- GtkTreeIter child_iter;
const GtkFileInfo *info;
gboolean change_entry;
@@ -6671,15 +6682,19 @@ update_chooser_entry (GtkFileChooserDefault *impl)
}
else if (impl->operation_mode == OPERATION_MODE_SEARCH)
{
- gtk_tree_model_get (GTK_TREE_MODEL (impl->search_model),
- &closure.first_selected_iter,
+ gtk_tree_model_filter_convert_iter_to_child_iter (impl->search_model_filter,
+ &child_iter,
+ &closure.first_selected_iter);
+ gtk_tree_model_get (GTK_TREE_MODEL (impl->search_model), &child_iter,
SEARCH_MODEL_COL_DISPLAY_NAME, &file_part,
-1);
}
else if (impl->operation_mode == OPERATION_MODE_RECENT)
{
- gtk_tree_model_get (GTK_TREE_MODEL (impl->recent_model),
- &closure.first_selected_iter,
+ gtk_tree_model_filter_convert_iter_to_child_iter (impl->recent_model_filter,
+ &child_iter,
+ &closure.first_selected_iter);
+ gtk_tree_model_get (GTK_TREE_MODEL (impl->recent_model), &child_iter,
RECENT_MODEL_COL_DISPLAY_NAME, &file_part,
-1);
}
@@ -8734,7 +8749,7 @@ search_engine_finished_cb (GtkSearchEngine *engine,
* but it'll make the search look like blocked.
*/
gtk_tree_view_set_model (GTK_TREE_VIEW (impl->browse_files_tree_view),
- GTK_TREE_MODEL (impl->search_model));
+ GTK_TREE_MODEL (impl->search_model_filter));
#endif
/* FMQ: if search was empty, say that we got no hits */
@@ -8811,6 +8826,9 @@ search_clear_model (GtkFileChooserDefault *impl,
g_object_unref (impl->search_model);
impl->search_model = NULL;
+
+ g_object_unref (impl->search_model_filter);
+ impl->search_model_filter = NULL;
if (remove_from_treeview)
gtk_tree_view_set_model (GTK_TREE_VIEW (impl->browse_files_tree_view), NULL);
@@ -8872,9 +8890,20 @@ search_column_path_sort_func (GtkTreeModel *model,
gpointer user_data)
{
const char *collation_key_a, *collation_key_b;
+ gboolean is_folder_a, is_folder_b;
- gtk_tree_model_get (model, a, SEARCH_MODEL_COL_COLLATION_KEY, &collation_key_a, -1);
- gtk_tree_model_get (model, b, SEARCH_MODEL_COL_COLLATION_KEY, &collation_key_b, -1);
+ gtk_tree_model_get (model, a,
+ SEARCH_MODEL_COL_IS_FOLDER, &is_folder_a,
+ SEARCH_MODEL_COL_COLLATION_KEY, &collation_key_a,
+ -1);
+ gtk_tree_model_get (model, b,
+ SEARCH_MODEL_COL_IS_FOLDER, &is_folder_b,
+ SEARCH_MODEL_COL_COLLATION_KEY, &collation_key_b,
+ -1);
+
+ /* always show folders first */
+ if (is_folder_a != is_folder_b)
+ return is_folder_a ? 1 : -1;
return strcmp (collation_key_a, collation_key_b);
}
@@ -8887,6 +8916,7 @@ search_column_mtime_sort_func (GtkTreeModel *model,
gpointer user_data)
{
const struct stat *statbuf_a, *statbuf_b;
+ gboolean is_folder_a, is_folder_b;
/* Note that although we store a whole struct stat in the model, we only
* compare the mtime here. If we add another column relative to a struct stat
@@ -8894,8 +8924,17 @@ search_column_mtime_sort_func (GtkTreeModel *model,
* one as well.
*/
- gtk_tree_model_get (model, a, SEARCH_MODEL_COL_STAT, &statbuf_a, -1);
- gtk_tree_model_get (model, b, SEARCH_MODEL_COL_STAT, &statbuf_b, -1);
+ gtk_tree_model_get (model, a,
+ SEARCH_MODEL_COL_IS_FOLDER, &is_folder_a,
+ SEARCH_MODEL_COL_STAT, &statbuf_a,
+ -1);
+ gtk_tree_model_get (model, b,
+ SEARCH_MODEL_COL_IS_FOLDER, &is_folder_b,
+ SEARCH_MODEL_COL_STAT, &statbuf_b,
+ -1);
+
+ if (is_folder_a != is_folder_b)
+ return is_folder_a ? 1 : -1;
if (statbuf_a->st_mtime < statbuf_b->st_mtime)
return -1;
@@ -8905,11 +8944,90 @@ search_column_mtime_sort_func (GtkTreeModel *model,
return 0;
}
+static gboolean
+search_get_is_filtered (GtkFileChooserDefault *impl,
+ const GtkFilePath *path,
+ const gchar *display_name,
+ const gchar *mime_type)
+{
+ GtkFileFilterInfo filter_info;
+ GtkFileFilterFlags needed;
+ gboolean result;
+
+ if (!impl->current_filter)
+ return FALSE;
+
+ filter_info.contains = GTK_FILE_FILTER_DISPLAY_NAME | GTK_FILE_FILTER_MIME_TYPE;
+ needed = gtk_file_filter_get_needed (impl->current_filter);
+
+ filter_info.display_name = display_name;
+ filter_info.mime_type = mime_type;
+
+ if (needed & GTK_FILE_FILTER_FILENAME)
+ {
+ filter_info.filename = gtk_file_system_path_to_filename (impl->file_system, path);
+ if (filter_info.filename)
+ filter_info.contains |= GTK_FILE_FILTER_FILENAME;
+ }
+ else
+ filter_info.filename = NULL;
+
+ if (needed & GTK_FILE_FILTER_URI)
+ {
+ filter_info.uri = gtk_file_system_path_to_uri (impl->file_system, path);
+ if (filter_info.uri)
+ filter_info.contains |= GTK_FILE_FILTER_URI;
+ }
+ else
+ filter_info.uri = NULL;
+
+ result = gtk_file_filter_filter (impl->current_filter, &filter_info);
+
+ if (filter_info.filename)
+ g_free ((gchar *) filter_info.filename);
+ if (filter_info.uri)
+ g_free ((gchar *) filter_info.uri);
+
+ return !result;
+
+}
+
+/* Visibility function for the recent filter model */
+static gboolean
+search_model_visible_func (GtkTreeModel *model,
+ GtkTreeIter *iter,
+ gpointer user_data)
+{
+ GtkFileChooserDefault *impl = user_data;
+ GtkFilePath *file_path;
+ gchar *display_name, *mime_type;
+ gboolean is_folder;
+
+ if (!impl->current_filter)
+ return TRUE;
+
+ gtk_tree_model_get (model, iter,
+ SEARCH_MODEL_COL_PATH, &file_path,
+ SEARCH_MODEL_COL_IS_FOLDER, &is_folder,
+ SEARCH_MODEL_COL_DISPLAY_NAME, &display_name,
+ SEARCH_MODEL_COL_MIME_TYPE, &mime_type,
+ -1);
+
+ if (!display_name)
+ return TRUE;
+
+ if (is_folder)
+ return TRUE;
+
+ return !search_get_is_filtered (impl, file_path, display_name, mime_type);
+}
+
/* Creates the search_model and puts it in the tree view */
static void
search_setup_model (GtkFileChooserDefault *impl)
{
g_assert (impl->search_model == NULL);
+ g_assert (impl->search_model_filter == NULL);
/* We store these columns in the search model:
*
@@ -8952,12 +9070,18 @@ search_setup_model (GtkFileChooserDefault *impl)
SEARCH_MODEL_COL_STAT,
GTK_SORT_DESCENDING);
+ impl->search_model_filter =
+ GTK_TREE_MODEL_FILTER (gtk_tree_model_filter_new (GTK_TREE_MODEL (impl->search_model), NULL));
+ gtk_tree_model_filter_set_visible_func (impl->search_model_filter,
+ search_model_visible_func,
+ impl, NULL);
+
/* EB: setting the model here will make the hits list update feel
* more "alive" than setting the model at the end of the search
* run
*/
gtk_tree_view_set_model (GTK_TREE_VIEW (impl->browse_files_tree_view),
- GTK_TREE_MODEL (impl->search_model));
+ GTK_TREE_MODEL (impl->search_model_filter));
}
/* Creates a new query with the specified text and launches it */
@@ -9122,6 +9246,7 @@ search_activate (GtkFileChooserDefault *impl)
g_assert (impl->search_hbox == NULL);
g_assert (impl->search_entry == NULL);
g_assert (impl->search_model == NULL);
+ g_assert (impl->search_model_filter == NULL);
search_setup_widgets (impl);
file_list_set_sort_column_ids (impl);
@@ -9173,6 +9298,9 @@ recent_clear_model (GtkFileChooserDefault *impl,
g_object_unref (impl->recent_model);
impl->recent_model = NULL;
+ g_object_unref (impl->recent_model_filter);
+ impl->recent_model_filter = NULL;
+
if (remove_from_treeview)
gtk_tree_view_set_model (GTK_TREE_VIEW (impl->browse_files_tree_view), NULL);
}
@@ -9226,9 +9354,20 @@ recent_column_mtime_sort_func (GtkTreeModel *model,
gpointer user_data)
{
GtkRecentInfo *info_a, *info_b;
+ gboolean is_folder_a, is_folder_b;
+
+ gtk_tree_model_get (model, a,
+ RECENT_MODEL_COL_IS_FOLDER, &is_folder_a,
+ RECENT_MODEL_COL_INFO, &info_a,
+ -1);
+ gtk_tree_model_get (model, b,
+ RECENT_MODEL_COL_IS_FOLDER, &is_folder_b,
+ RECENT_MODEL_COL_INFO, &info_b,
+ -1);
- gtk_tree_model_get (model, a, RECENT_MODEL_COL_INFO, &info_a, -1);
- gtk_tree_model_get (model, b, RECENT_MODEL_COL_INFO, &info_b, -1);
+ /* folders always go first */
+ if (is_folder_a != is_folder_b)
+ return is_folder_a ? 1 : -1;
if (gtk_recent_info_get_modified (info_a) < gtk_recent_info_get_modified (info_b))
return -1;
@@ -9238,11 +9377,86 @@ recent_column_mtime_sort_func (GtkTreeModel *model,
return 0;
}
+static gboolean
+recent_get_is_filtered (GtkFileChooserDefault *impl,
+ const GtkFilePath *path,
+ GtkRecentInfo *recent_info)
+{
+ GtkFileFilterInfo filter_info;
+ GtkFileFilterFlags needed;
+ gboolean result;
+
+ if (!impl->current_filter)
+ return FALSE;
+
+ filter_info.contains = GTK_FILE_FILTER_DISPLAY_NAME | GTK_FILE_FILTER_MIME_TYPE;
+ needed = gtk_file_filter_get_needed (impl->current_filter);
+
+ filter_info.display_name = gtk_recent_info_get_display_name (recent_info);
+ filter_info.mime_type = gtk_recent_info_get_mime_type (recent_info);
+
+ if (needed & GTK_FILE_FILTER_FILENAME)
+ {
+ filter_info.filename = gtk_file_system_path_to_filename (impl->file_system, path);
+ if (filter_info.filename)
+ filter_info.contains |= GTK_FILE_FILTER_FILENAME;
+ }
+ else
+ filter_info.filename = NULL;
+
+ if (needed & GTK_FILE_FILTER_URI)
+ {
+ filter_info.uri = gtk_file_system_path_to_uri (impl->file_system, path);
+ if (filter_info.uri)
+ filter_info.contains |= GTK_FILE_FILTER_URI;
+ }
+ else
+ filter_info.uri = NULL;
+
+ result = gtk_file_filter_filter (impl->current_filter, &filter_info);
+
+ if (filter_info.filename)
+ g_free ((gchar *) filter_info.filename);
+ if (filter_info.uri)
+ g_free ((gchar *) filter_info.uri);
+
+ return !result;
+}
+
+/* Visibility function for the recent filter model */
+static gboolean
+recent_model_visible_func (GtkTreeModel *model,
+ GtkTreeIter *iter,
+ gpointer user_data)
+{
+ GtkFileChooserDefault *impl = user_data;
+ GtkFilePath *file_path;
+ GtkRecentInfo *recent_info;
+ gboolean is_folder;
+
+ if (!impl->current_filter)
+ return TRUE;
+
+ gtk_tree_model_get (model, iter,
+ RECENT_MODEL_COL_INFO, &recent_info,
+ RECENT_MODEL_COL_PATH, &file_path,
+ RECENT_MODEL_COL_IS_FOLDER, &is_folder,
+ -1);
+
+ if (!recent_info)
+ return TRUE;
+
+ if (is_folder)
+ return TRUE;
+
+ return !recent_get_is_filtered (impl, file_path, recent_info);
+}
static void
recent_setup_model (GtkFileChooserDefault *impl)
{
g_assert (impl->recent_model == NULL);
+ g_assert (impl->recent_model_filter == NULL);
/* We store these columns in the search model:
*
@@ -9271,10 +9485,16 @@ recent_setup_model (GtkFileChooserDefault *impl)
recent_column_mtime_sort_func,
impl,
NULL);
-
gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (impl->recent_model),
RECENT_MODEL_COL_INFO,
GTK_SORT_DESCENDING);
+
+ impl->recent_model_filter =
+ GTK_TREE_MODEL_FILTER (gtk_tree_model_filter_new (GTK_TREE_MODEL (impl->recent_model), NULL));
+ gtk_tree_model_filter_set_visible_func (impl->recent_model_filter,
+ recent_model_visible_func,
+ impl,
+ NULL);
}
typedef struct
@@ -9292,7 +9512,7 @@ recent_idle_cleanup (gpointer data)
GtkFileChooserDefault *impl = load_data->impl;
gtk_tree_view_set_model (GTK_TREE_VIEW (impl->browse_files_tree_view),
- GTK_TREE_MODEL (impl->recent_model));
+ GTK_TREE_MODEL (impl->recent_model_filter));
set_busy_cursor (impl, FALSE);
@@ -9602,6 +9822,12 @@ set_current_filter (GtkFileChooserDefault *impl,
if (impl->browse_files_model)
install_list_model_filter (impl);
+ if (impl->search_model_filter)
+ gtk_tree_model_filter_refilter (impl->search_model_filter);
+
+ if (impl->recent_model_filter)
+ gtk_tree_model_filter_refilter (impl->recent_model_filter);
+
g_object_notify (G_OBJECT (impl), "filter");
}
}
@@ -9628,12 +9854,13 @@ check_preview_change (GtkFileChooserDefault *impl)
new_display_name = NULL;
if (cursor_path)
{
+ GtkTreeIter child_iter;
+
if (impl->operation_mode == OPERATION_MODE_BROWSE)
{
if (impl->sort_model)
{
GtkTreeIter iter;
- GtkTreeIter child_iter;
const GtkFileInfo *new_info;
gtk_tree_model_get_iter (GTK_TREE_MODEL (impl->sort_model), &iter, cursor_path);
@@ -9651,10 +9878,13 @@ check_preview_change (GtkFileChooserDefault *impl)
{
GtkTreeIter iter;
- gtk_tree_model_get_iter (GTK_TREE_MODEL (impl->search_model), &iter, cursor_path);
+ gtk_tree_model_get_iter (GTK_TREE_MODEL (impl->search_model_filter),
+ &iter, cursor_path);
gtk_tree_path_free (cursor_path);
- gtk_tree_model_get (GTK_TREE_MODEL (impl->search_model), &iter,
+ gtk_tree_model_filter_convert_iter_to_child_iter (impl->search_model_filter,
+ &child_iter, &iter);
+ gtk_tree_model_get (GTK_TREE_MODEL (impl->search_model), &child_iter,
SEARCH_MODEL_COL_PATH, &new_path,
SEARCH_MODEL_COL_DISPLAY_NAME, &new_display_name,
-1);
@@ -9663,10 +9893,14 @@ check_preview_change (GtkFileChooserDefault *impl)
{
GtkTreeIter iter;
- gtk_tree_model_get_iter (GTK_TREE_MODEL (impl->recent_model), &iter, cursor_path);
+ gtk_tree_model_get_iter (GTK_TREE_MODEL (impl->recent_model_filter),
+ &iter, cursor_path);
gtk_tree_path_free (cursor_path);
- gtk_tree_model_get (GTK_TREE_MODEL (impl->recent_model), &iter,
+ gtk_tree_model_filter_convert_iter_to_child_iter (impl->recent_model_filter,
+ &child_iter, &iter);
+
+ gtk_tree_model_get (GTK_TREE_MODEL (impl->recent_model), &child_iter,
RECENT_MODEL_COL_PATH, &new_path,
RECENT_MODEL_COL_DISPLAY_NAME, &new_display_name,
-1);
@@ -10030,6 +10264,7 @@ list_row_activated (GtkTreeView *tree_view,
GtkFileChooserDefault *impl)
{
GtkTreeIter iter;
+ GtkTreeIter child_iter;
switch (impl->operation_mode)
{
@@ -10038,10 +10273,12 @@ list_row_activated (GtkTreeView *tree_view,
GtkFilePath *file_path;
gboolean is_folder;
- if (!gtk_tree_model_get_iter (GTK_TREE_MODEL (impl->search_model), &iter, path))
+ if (!gtk_tree_model_get_iter (GTK_TREE_MODEL (impl->search_model_filter), &iter, path))
return;
- gtk_tree_model_get (GTK_TREE_MODEL (impl->search_model), &iter,
+ gtk_tree_model_filter_convert_iter_to_child_iter (impl->search_model_filter,
+ &child_iter, &iter);
+ gtk_tree_model_get (GTK_TREE_MODEL (impl->search_model), &child_iter,
SEARCH_MODEL_COL_PATH, &file_path,
SEARCH_MODEL_COL_IS_FOLDER, &is_folder,
-1);
@@ -10061,10 +10298,13 @@ list_row_activated (GtkTreeView *tree_view,
GtkFilePath *file_path;
gboolean is_folder;
- if (!gtk_tree_model_get_iter (GTK_TREE_MODEL (impl->recent_model), &iter, path))
+ if (!gtk_tree_model_get_iter (GTK_TREE_MODEL (impl->recent_model_filter), &iter, path))
return;
+
+ gtk_tree_model_filter_convert_iter_to_child_iter (impl->recent_model_filter,
+ &child_iter, &iter);
- gtk_tree_model_get (GTK_TREE_MODEL (impl->recent_model), &iter,
+ gtk_tree_model_get (GTK_TREE_MODEL (impl->recent_model), &child_iter,
RECENT_MODEL_COL_PATH, &file_path,
RECENT_MODEL_COL_IS_FOLDER, &is_folder,
-1);
@@ -10081,7 +10321,6 @@ list_row_activated (GtkTreeView *tree_view,
case OPERATION_MODE_BROWSE:
{
- GtkTreeIter child_iter;
const GtkFileInfo *info;
if (!gtk_tree_model_get_iter (GTK_TREE_MODEL (impl->sort_model), &iter, path))
@@ -10160,17 +10399,27 @@ list_icon_data_func (GtkTreeViewColumn *tree_column,
switch (impl->operation_mode)
{
case OPERATION_MODE_SEARCH:
- gtk_tree_model_get (GTK_TREE_MODEL (impl->search_model), iter,
- SEARCH_MODEL_COL_PIXBUF, &pixbuf,
+ {
+ GtkTreeIter child_iter;
+
+ gtk_tree_model_filter_convert_iter_to_child_iter (impl->search_model_filter,
+ &child_iter, iter);
+ gtk_tree_model_get (GTK_TREE_MODEL (impl->search_model), &child_iter,
+ SEARCH_MODEL_COL_PIXBUF, &pixbuf,
-1);
- sensitive = TRUE;
+ sensitive = TRUE;
+ }
break;
case OPERATION_MODE_RECENT:
{
+ GtkTreeIter child_iter;
GtkRecentInfo *info;
- gtk_tree_model_get (GTK_TREE_MODEL (impl->recent_model), iter,
+ gtk_tree_model_filter_convert_iter_to_child_iter (impl->recent_model_filter,
+ &child_iter, iter);
+
+ gtk_tree_model_get (GTK_TREE_MODEL (impl->recent_model), &child_iter,
RECENT_MODEL_COL_INFO, &info,
-1);
@@ -10239,11 +10488,13 @@ list_name_data_func (GtkTreeViewColumn *tree_column,
if (impl->operation_mode == OPERATION_MODE_SEARCH)
{
+ GtkTreeIter child_iter;
GtkFilePath *file_path;
gchar *display_name, *tmp;
gchar *text;
- gtk_tree_model_get (GTK_TREE_MODEL (impl->search_model), iter,
+ gtk_tree_model_filter_convert_iter_to_child_iter (impl->search_model_filter, &child_iter, iter);
+ gtk_tree_model_get (GTK_TREE_MODEL (impl->search_model), &child_iter,
SEARCH_MODEL_COL_PATH, &file_path,
SEARCH_MODEL_COL_DISPLAY_NAME, &display_name,
-1);
@@ -10265,10 +10516,13 @@ list_name_data_func (GtkTreeViewColumn *tree_column,
if (impl->operation_mode == OPERATION_MODE_RECENT)
{
+ GtkTreeIter child_iter;
GtkRecentInfo *recent_info;
char *tmp, *text;
- gtk_tree_model_get (GTK_TREE_MODEL (impl->recent_model), iter,
+ gtk_tree_model_filter_convert_iter_to_child_iter (impl->recent_model_filter, &child_iter, iter);
+
+ gtk_tree_model_get (GTK_TREE_MODEL (impl->recent_model), &child_iter,
RECENT_MODEL_COL_INFO, &recent_info,
-1);
@@ -10384,18 +10638,22 @@ list_mtime_data_func (GtkTreeViewColumn *tree_column,
if (impl->operation_mode == OPERATION_MODE_SEARCH)
{
+ GtkTreeIter child_iter;
struct stat *statbuf;
- gtk_tree_model_get (GTK_TREE_MODEL (impl->search_model), iter,
+ gtk_tree_model_filter_convert_iter_to_child_iter (impl->search_model_filter, &child_iter, iter);
+ gtk_tree_model_get (GTK_TREE_MODEL (impl->search_model), &child_iter,
SEARCH_MODEL_COL_STAT, &statbuf,
-1);
time_mtime = statbuf->st_mtime;
}
else if (impl->operation_mode == OPERATION_MODE_RECENT)
{
+ GtkTreeIter child_iter;
GtkRecentInfo *info;
- gtk_tree_model_get (GTK_TREE_MODEL (impl->recent_model), iter,
+ gtk_tree_model_filter_convert_iter_to_child_iter (impl->recent_model_filter, &child_iter, iter);
+ gtk_tree_model_get (GTK_TREE_MODEL (impl->recent_model), &child_iter,
RECENT_MODEL_COL_INFO, &info,
-1);
time_mtime = (GtkFileTime) gtk_recent_info_get_modified (info);
diff --git a/gtk/gtkfilechooserprivate.h b/gtk/gtkfilechooserprivate.h
index 1750627676..d5e87d8470 100644
--- a/gtk/gtkfilechooserprivate.h
+++ b/gtk/gtkfilechooserprivate.h
@@ -190,17 +190,19 @@ struct _GtkFileChooserDefault
GtkFileSystemModel *browse_files_model;
char *browse_files_last_selected_name;
- /* Search */
+ /* OPERATION_MODE_SEARCH */
GtkWidget *search_hbox;
GtkWidget *search_entry;
GtkSearchEngine *search_engine;
GtkQuery *search_query;
GtkListStore *search_model;
+ GtkTreeModelFilter *search_model_filter;
- /* Recently Used */
+ /* OPERATION_MODE_RECENT */
GtkRecentManager *recent_manager;
GtkListStore *recent_model;
guint load_recent_id;
+ GtkTreeModelFilter *recent_model_filter;
GtkWidget *filter_combo_hbox;
GtkWidget *filter_combo;