From 6b7ad80d940d13050d8f739b6dcb07f344f33430 Mon Sep 17 00:00:00 2001 From: Emmanuele Bassi Date: Wed, 9 May 2007 14:47:59 +0100 Subject: Update add bookmark sensitivity check when not in browse mode Add branches for OPERATION_MODE_SEARCH and OPERATION_MODE_RECENT in the selection_check(), get_selected_path() and the update_tooltip() function helpers iterating on the browse_files_tree_view selection, to take into account the different models used by the different modes. Signed-off-by: Emmanuele Bassi --- gtk/gtkfilechooserdefault.c | 117 ++++++++++++++++++++++++++++-------------- 1 files changed, 78 insertions(+), 39 deletions(-) diff --git a/gtk/gtkfilechooserdefault.c b/gtk/gtkfilechooserdefault.c index 5f81a17..e04acdf 100644 --- a/gtk/gtkfilechooserdefault.c +++ b/gtk/gtkfilechooserdefault.c @@ -2751,10 +2751,26 @@ selection_check_foreach_cb (GtkTreeModel *model, closure = data; 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); - is_folder = info ? gtk_file_info_get_is_folder (info) : FALSE; + case OPERATION_MODE_SEARCH: + 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_files = closure->all_files && !is_folder; @@ -2808,8 +2824,25 @@ get_selected_path_foreach_cb (GtkTreeModel *model, closure = data; - 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); + 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); + 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 */ @@ -2847,13 +2880,33 @@ update_tooltip (GtkTreeModel *model, if (udata->tip == NULL) { - 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); + const gchar *display_name; + + switch (udata->impl->operation_mode) + { + 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"), - gtk_file_info_get_display_name (info)); + display_name); } } @@ -2870,20 +2923,6 @@ bookmarks_check_add_sensitivity (GtkFileChooserDefault *impl) gboolean active; 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); if (num_selected == 0) @@ -2902,26 +2941,26 @@ bookmarks_check_add_sensitivity (GtkFileChooserDefault *impl) if (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 (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) - tip = g_strdup_printf (_("Add the selected folders to the bookmarks")); + tip = g_strdup_printf (_("Add the selected folders to the bookmarks")); else - { - GtkTreeSelection *selection; - UpdateTooltipData data; - - selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (impl->browse_files_tree_view)); - data.impl = impl; - data.tip = NULL; - gtk_tree_selection_selected_foreach (selection, update_tooltip, &data); - tip = data.tip; - - } + { + GtkTreeSelection *selection; + UpdateTooltipData data; + + selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (impl->browse_files_tree_view)); + data.impl = impl; + data.tip = NULL; + gtk_tree_selection_selected_foreach (selection, update_tooltip, &data); + tip = data.tip; + } + gtk_tooltips_set_tip (impl->tooltips, impl->browse_shortcuts_add_button, tip, NULL); g_free (tip); } -- 1.4.4.2