GtkFileChooser search fixes and recent files support. (#435342)
2007-05-11 Emmanuele Bassi <ebassi@gnome.org> GtkFileChooser search fixes and recent files support. (#435342) * gtk/gtkfilechooserdefault.c: Update the add bookmark button sensitivity when in search or recent files mode, and allow adding a bookmark for a folder. svn path=/trunk/; revision=17826
This commit is contained in:

committed by
Emmanuele Bassi

parent
588d09cfc0
commit
2957c052b8
@ -1,3 +1,11 @@
|
|||||||
|
2007-05-11 Emmanuele Bassi <ebassi@gnome.org>
|
||||||
|
|
||||||
|
GtkFileChooser search fixes and recent files support. (#435342)
|
||||||
|
|
||||||
|
* gtk/gtkfilechooserdefault.c: Update the add bookmark button
|
||||||
|
sensitivity when in search or recent files mode, and allow
|
||||||
|
adding a bookmark for a folder.
|
||||||
|
|
||||||
2007-05-11 Emmanuele Bassi <ebassi@gnome.org>
|
2007-05-11 Emmanuele Bassi <ebassi@gnome.org>
|
||||||
|
|
||||||
GtkFileChooser search fixes and recent files support. (#435342)
|
GtkFileChooser search fixes and recent files support. (#435342)
|
||||||
|
@ -2636,10 +2636,27 @@ add_bookmark_foreach_cb (GtkTreeModel *model,
|
|||||||
|
|
||||||
impl = (GtkFileChooserDefault *) data;
|
impl = (GtkFileChooserDefault *) data;
|
||||||
|
|
||||||
fs_model = impl->browse_files_model;
|
switch (impl->operation_mode)
|
||||||
gtk_tree_model_sort_convert_iter_to_child_iter (impl->sort_model, &child_iter, iter);
|
{
|
||||||
|
case OPERATION_MODE_BROWSE:
|
||||||
|
fs_model = impl->browse_files_model;
|
||||||
|
gtk_tree_model_sort_convert_iter_to_child_iter (impl->sort_model, &child_iter, iter);
|
||||||
|
file_path = _gtk_file_system_model_get_path (fs_model, &child_iter);
|
||||||
|
break;
|
||||||
|
|
||||||
file_path = _gtk_file_system_model_get_path (fs_model, &child_iter);
|
case OPERATION_MODE_SEARCH:
|
||||||
|
gtk_tree_model_get (GTK_TREE_MODEL (impl->search_model), iter,
|
||||||
|
SEARCH_MODEL_COL_PATH, &file_path,
|
||||||
|
-1);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case OPERATION_MODE_RECENT:
|
||||||
|
gtk_tree_model_get (GTK_TREE_MODEL (impl->recent_model), iter,
|
||||||
|
RECENT_MODEL_COL_PATH, &file_path,
|
||||||
|
-1);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
shortcuts_add_bookmark_from_path (impl, file_path, -1);
|
shortcuts_add_bookmark_from_path (impl, file_path, -1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2751,10 +2768,26 @@ selection_check_foreach_cb (GtkTreeModel *model,
|
|||||||
closure = data;
|
closure = data;
|
||||||
closure->num_selected++;
|
closure->num_selected++;
|
||||||
|
|
||||||
gtk_tree_model_sort_convert_iter_to_child_iter (closure->impl->sort_model, &child_iter, iter);
|
switch (closure->impl->operation_mode)
|
||||||
|
{
|
||||||
|
case OPERATION_MODE_BROWSE:
|
||||||
|
gtk_tree_model_sort_convert_iter_to_child_iter (closure->impl->sort_model, &child_iter, iter);
|
||||||
|
info = _gtk_file_system_model_get_info (closure->impl->browse_files_model, &child_iter);
|
||||||
|
is_folder = info ? gtk_file_info_get_is_folder (info) : FALSE;
|
||||||
|
break;
|
||||||
|
|
||||||
info = _gtk_file_system_model_get_info (closure->impl->browse_files_model, &child_iter);
|
case OPERATION_MODE_SEARCH:
|
||||||
is_folder = info ? gtk_file_info_get_is_folder (info) : FALSE;
|
gtk_tree_model_get (GTK_TREE_MODEL (closure->impl->search_model), 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,
|
||||||
|
RECENT_MODEL_COL_IS_FOLDER, &is_folder,
|
||||||
|
-1);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
closure->all_folders = closure->all_folders && is_folder;
|
closure->all_folders = closure->all_folders && is_folder;
|
||||||
closure->all_files = closure->all_files && !is_folder;
|
closure->all_files = closure->all_files && !is_folder;
|
||||||
@ -2808,8 +2841,25 @@ get_selected_path_foreach_cb (GtkTreeModel *model,
|
|||||||
|
|
||||||
closure = data;
|
closure = data;
|
||||||
|
|
||||||
gtk_tree_model_sort_convert_iter_to_child_iter (closure->impl->sort_model, &child_iter, iter);
|
switch (closure->impl->operation_mode)
|
||||||
closure->path = _gtk_file_system_model_get_path (closure->impl->browse_files_model, &child_iter);
|
{
|
||||||
|
case OPERATION_MODE_BROWSE:
|
||||||
|
gtk_tree_model_sort_convert_iter_to_child_iter (closure->impl->sort_model, &child_iter, iter);
|
||||||
|
closure->path = _gtk_file_system_model_get_path (closure->impl->browse_files_model, &child_iter);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case OPERATION_MODE_SEARCH:
|
||||||
|
gtk_tree_model_get (GTK_TREE_MODEL (closure->impl->search_model), 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,
|
||||||
|
RECENT_MODEL_COL_PATH, &closure->path,
|
||||||
|
-1);
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Returns a selected path from the file list */
|
/* Returns a selected path from the file list */
|
||||||
@ -2847,13 +2897,33 @@ update_tooltip (GtkTreeModel *model,
|
|||||||
|
|
||||||
if (udata->tip == NULL)
|
if (udata->tip == NULL)
|
||||||
{
|
{
|
||||||
gtk_tree_model_sort_convert_iter_to_child_iter (udata->impl->sort_model,
|
const gchar *display_name;
|
||||||
&child_iter,
|
|
||||||
iter);
|
switch (udata->impl->operation_mode)
|
||||||
|
{
|
||||||
info = _gtk_file_system_model_get_info (udata->impl->browse_files_model, &child_iter);
|
case OPERATION_MODE_BROWSE:
|
||||||
|
gtk_tree_model_sort_convert_iter_to_child_iter (udata->impl->sort_model,
|
||||||
|
&child_iter,
|
||||||
|
iter);
|
||||||
|
info = _gtk_file_system_model_get_info (udata->impl->browse_files_model, &child_iter);
|
||||||
|
display_name = gtk_file_info_get_display_name (info);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case OPERATION_MODE_SEARCH:
|
||||||
|
gtk_tree_model_get (GTK_TREE_MODEL (udata->impl->search_model), 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,
|
||||||
|
RECENT_MODEL_COL_DISPLAY_NAME, &display_name,
|
||||||
|
-1);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
udata->tip = g_strdup_printf (_("Add the folder '%s' to the bookmarks"),
|
udata->tip = g_strdup_printf (_("Add the folder '%s' to the bookmarks"),
|
||||||
gtk_file_info_get_display_name (info));
|
display_name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2870,20 +2940,6 @@ bookmarks_check_add_sensitivity (GtkFileChooserDefault *impl)
|
|||||||
gboolean active;
|
gboolean active;
|
||||||
gchar *tip;
|
gchar *tip;
|
||||||
|
|
||||||
/* FIXME - Find a way to enable bookmarking items returned by
|
|
||||||
* a search query or inside the recently used files list
|
|
||||||
*/
|
|
||||||
if (impl->operation_mode == OPERATION_MODE_SEARCH ||
|
|
||||||
impl->operation_mode == OPERATION_MODE_RECENT)
|
|
||||||
{
|
|
||||||
gtk_widget_set_sensitive (impl->browse_shortcuts_add_button, FALSE);
|
|
||||||
|
|
||||||
if (impl->browse_files_popup_menu_add_shortcut_item)
|
|
||||||
gtk_widget_set_sensitive (impl->browse_files_popup_menu_add_shortcut_item, FALSE);
|
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
selection_check (impl, &num_selected, NULL, &all_folders);
|
selection_check (impl, &num_selected, NULL, &all_folders);
|
||||||
|
|
||||||
if (num_selected == 0)
|
if (num_selected == 0)
|
||||||
@ -2902,26 +2958,26 @@ bookmarks_check_add_sensitivity (GtkFileChooserDefault *impl)
|
|||||||
|
|
||||||
if (impl->browse_files_popup_menu_add_shortcut_item)
|
if (impl->browse_files_popup_menu_add_shortcut_item)
|
||||||
gtk_widget_set_sensitive (impl->browse_files_popup_menu_add_shortcut_item,
|
gtk_widget_set_sensitive (impl->browse_files_popup_menu_add_shortcut_item,
|
||||||
(num_selected == 0) ? FALSE : active);
|
(num_selected == 0) ? FALSE : active);
|
||||||
|
|
||||||
if (active)
|
if (active)
|
||||||
{
|
{
|
||||||
if (num_selected == 0)
|
if (num_selected == 0)
|
||||||
tip = g_strdup_printf (_("Add the current folder to the bookmarks"));
|
tip = g_strdup_printf (_("Add the current folder to the bookmarks"));
|
||||||
else if (num_selected > 1)
|
else if (num_selected > 1)
|
||||||
tip = g_strdup_printf (_("Add the selected folders to the bookmarks"));
|
tip = g_strdup_printf (_("Add the selected folders to the bookmarks"));
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
GtkTreeSelection *selection;
|
GtkTreeSelection *selection;
|
||||||
UpdateTooltipData data;
|
UpdateTooltipData data;
|
||||||
|
|
||||||
selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (impl->browse_files_tree_view));
|
selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (impl->browse_files_tree_view));
|
||||||
data.impl = impl;
|
data.impl = impl;
|
||||||
data.tip = NULL;
|
data.tip = NULL;
|
||||||
gtk_tree_selection_selected_foreach (selection, update_tooltip, &data);
|
gtk_tree_selection_selected_foreach (selection, update_tooltip, &data);
|
||||||
tip = data.tip;
|
tip = data.tip;
|
||||||
|
}
|
||||||
}
|
|
||||||
gtk_tooltips_set_tip (impl->tooltips, impl->browse_shortcuts_add_button, tip, NULL);
|
gtk_tooltips_set_tip (impl->tooltips, impl->browse_shortcuts_add_button, tip, NULL);
|
||||||
g_free (tip);
|
g_free (tip);
|
||||||
}
|
}
|
||||||
@ -8673,8 +8729,15 @@ search_engine_finished_cb (GtkSearchEngine *engine,
|
|||||||
|
|
||||||
impl = GTK_FILE_CHOOSER_DEFAULT (data);
|
impl = GTK_FILE_CHOOSER_DEFAULT (data);
|
||||||
|
|
||||||
/* FMQ: if search was empty, say that we got no hits */
|
#if 0
|
||||||
|
/* EB: setting the model here will avoid loads of row events,
|
||||||
|
* 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));
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* FMQ: if search was empty, say that we got no hits */
|
||||||
set_busy_cursor (impl, FALSE);
|
set_busy_cursor (impl, FALSE);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -8888,7 +8951,11 @@ search_setup_model (GtkFileChooserDefault *impl)
|
|||||||
gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (impl->search_model),
|
gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (impl->search_model),
|
||||||
SEARCH_MODEL_COL_STAT,
|
SEARCH_MODEL_COL_STAT,
|
||||||
GTK_SORT_DESCENDING);
|
GTK_SORT_DESCENDING);
|
||||||
|
|
||||||
|
/* 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_view_set_model (GTK_TREE_VIEW (impl->browse_files_tree_view),
|
||||||
GTK_TREE_MODEL (impl->search_model));
|
GTK_TREE_MODEL (impl->search_model));
|
||||||
}
|
}
|
||||||
@ -9208,9 +9275,6 @@ recent_setup_model (GtkFileChooserDefault *impl)
|
|||||||
gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (impl->recent_model),
|
gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (impl->recent_model),
|
||||||
RECENT_MODEL_COL_INFO,
|
RECENT_MODEL_COL_INFO,
|
||||||
GTK_SORT_DESCENDING);
|
GTK_SORT_DESCENDING);
|
||||||
|
|
||||||
gtk_tree_view_set_model (GTK_TREE_VIEW (impl->browse_files_tree_view),
|
|
||||||
GTK_TREE_MODEL (impl->recent_model));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
@ -9225,10 +9289,14 @@ static void
|
|||||||
recent_idle_cleanup (gpointer data)
|
recent_idle_cleanup (gpointer data)
|
||||||
{
|
{
|
||||||
RecentLoadData *load_data = data;
|
RecentLoadData *load_data = data;
|
||||||
|
GtkFileChooserDefault *impl = load_data->impl;
|
||||||
|
|
||||||
set_busy_cursor (load_data->impl, FALSE);
|
gtk_tree_view_set_model (GTK_TREE_VIEW (impl->browse_files_tree_view),
|
||||||
|
GTK_TREE_MODEL (impl->recent_model));
|
||||||
|
|
||||||
load_data->impl->load_recent_id = 0;
|
set_busy_cursor (impl, FALSE);
|
||||||
|
|
||||||
|
impl->load_recent_id = 0;
|
||||||
|
|
||||||
if (load_data->items)
|
if (load_data->items)
|
||||||
{
|
{
|
||||||
@ -9981,7 +10049,6 @@ list_row_activated (GtkTreeView *tree_view,
|
|||||||
if (is_folder)
|
if (is_folder)
|
||||||
{
|
{
|
||||||
change_folder_and_display_error (impl, file_path, FALSE);
|
change_folder_and_display_error (impl, file_path, FALSE);
|
||||||
search_switch_to_browse_mode (impl);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -10005,7 +10072,6 @@ list_row_activated (GtkTreeView *tree_view,
|
|||||||
if (is_folder)
|
if (is_folder)
|
||||||
{
|
{
|
||||||
change_folder_and_display_error (impl, file_path, FALSE);
|
change_folder_and_display_error (impl, file_path, FALSE);
|
||||||
recent_switch_to_browse_mode (impl);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user