Make operation_mode_set() handle SEARCH and RECENT modes as well

Signed-off-by: Federico Mena Quintero <federico@gnome.org>
This commit is contained in:
Federico Mena Quintero 2011-07-26 16:43:36 -05:00
parent cccf35f862
commit c1fbdb4fd0

View File

@ -406,6 +406,8 @@ static void location_switch_to_path_bar (GtkFileChooserDefault *impl);
static void stop_loading_and_clear_list_model (GtkFileChooserDefault *impl, static void stop_loading_and_clear_list_model (GtkFileChooserDefault *impl,
gboolean remove_from_treeview); gboolean remove_from_treeview);
static void search_setup_widgets (GtkFileChooserDefault *impl);
static void search_stop_searching (GtkFileChooserDefault *impl, static void search_stop_searching (GtkFileChooserDefault *impl,
gboolean remove_query); gboolean remove_query);
static void search_clear_model (GtkFileChooserDefault *impl, static void search_clear_model (GtkFileChooserDefault *impl,
@ -416,6 +418,7 @@ static void search_entry_activate_cb (GtkEntry *entry,
gpointer data); gpointer data);
static void settings_load (GtkFileChooserDefault *impl); static void settings_load (GtkFileChooserDefault *impl);
static void recent_start_loading (GtkFileChooserDefault *impl);
static void recent_stop_loading (GtkFileChooserDefault *impl); static void recent_stop_loading (GtkFileChooserDefault *impl);
static void recent_clear_model (GtkFileChooserDefault *impl, static void recent_clear_model (GtkFileChooserDefault *impl,
gboolean remove_from_treeview); gboolean remove_from_treeview);
@ -4151,7 +4154,9 @@ typedef struct {
gint model_column; gint model_column;
} ColumnMap; } ColumnMap;
/* Sets the sort column IDs for the file list based on the operation mode */ /* Sets the sort column IDs for the file list; needs to be done whenever we
* change the model on the treeview.
*/
static void static void
file_list_set_sort_column_ids (GtkFileChooserDefault *impl) file_list_set_sort_column_ids (GtkFileChooserDefault *impl)
{ {
@ -5267,13 +5272,57 @@ operation_mode_set_browse (GtkFileChooserDefault *impl)
if (impl->location_mode == LOCATION_MODE_FILENAME_ENTRY) if (impl->location_mode == LOCATION_MODE_FILENAME_ENTRY)
gtk_widget_show (impl->location_entry_box); gtk_widget_show (impl->location_entry_box);
} }
}
file_list_set_sort_column_ids (impl); static void
operation_mode_set_search (GtkFileChooserDefault *impl)
{
g_assert (impl->search_hbox == NULL);
g_assert (impl->search_entry == NULL);
g_assert (impl->search_model == NULL);
search_setup_widgets (impl);
}
static void
operation_mode_set_recent (GtkFileChooserDefault *impl)
{
path_bar_update (impl);
/* Hide the location widgets temporarily */
if (impl->action == GTK_FILE_CHOOSER_ACTION_OPEN ||
impl->action == GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER)
{
gtk_widget_hide (impl->location_button);
gtk_widget_hide (impl->location_entry_box);
}
recent_start_loading (impl);
}
/* Sometimes we need to frob the selection in the shortcuts list manually */
static void
shortcuts_select_item_without_activating (GtkFileChooserDefault *impl, int pos)
{
GtkTreeSelection *selection;
GtkTreePath *path;
selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (impl->browse_shortcuts_tree_view));
g_signal_handlers_block_by_func (selection, G_CALLBACK (shortcuts_selection_changed_cb), impl);
path = gtk_tree_path_new_from_indices (pos, -1);
gtk_tree_selection_select_path (selection, path);
gtk_tree_path_free (path);
g_signal_handlers_unblock_by_func (selection, G_CALLBACK (shortcuts_selection_changed_cb), impl);
} }
static void static void
operation_mode_set (GtkFileChooserDefault *impl, OperationMode mode) operation_mode_set (GtkFileChooserDefault *impl, OperationMode mode)
{ {
ShortcutsIndex shortcut_to_select;
operation_mode_stop (impl, impl->operation_mode); operation_mode_stop (impl, impl->operation_mode);
impl->operation_mode = mode; impl->operation_mode = mode;
@ -5282,12 +5331,26 @@ operation_mode_set (GtkFileChooserDefault *impl, OperationMode mode)
{ {
case OPERATION_MODE_BROWSE: case OPERATION_MODE_BROWSE:
operation_mode_set_browse (impl); operation_mode_set_browse (impl);
shortcut_to_select = SHORTCUTS_CURRENT_FOLDER;
break;
case OPERATION_MODE_SEARCH:
operation_mode_set_search (impl);
shortcut_to_select = SHORTCUTS_SEARCH;
break;
case OPERATION_MODE_RECENT:
operation_mode_set_recent (impl);
shortcut_to_select = SHORTCUTS_RECENT;
break; break;
default: default:
g_assert_not_reached (); g_assert_not_reached ();
return;
} }
if (shortcut_to_select != SHORTCUTS_CURRENT_FOLDER)
shortcuts_select_item_without_activating (impl, shortcuts_get_index (impl, shortcut_to_select));
} }
/* This function is basically a do_all function. /* This function is basically a do_all function.
@ -6162,6 +6225,7 @@ load_set_model (GtkFileChooserDefault *impl)
gtk_tree_view_columns_autosize (GTK_TREE_VIEW (impl->browse_files_tree_view)); gtk_tree_view_columns_autosize (GTK_TREE_VIEW (impl->browse_files_tree_view));
gtk_tree_view_set_search_column (GTK_TREE_VIEW (impl->browse_files_tree_view), gtk_tree_view_set_search_column (GTK_TREE_VIEW (impl->browse_files_tree_view),
MODEL_COL_NAME); MODEL_COL_NAME);
file_list_set_sort_column_ids (impl);
set_sort_column (impl); set_sort_column (impl);
profile_msg (" gtk_tree_view_set_model end", NULL); profile_msg (" gtk_tree_view_set_model end", NULL);
impl->list_sort_ascending = TRUE; impl->list_sort_ascending = TRUE;
@ -8950,6 +9014,7 @@ search_engine_finished_cb (GtkSearchEngine *engine,
*/ */
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));
file_list_set_sort_column_ids (impl);
#endif #endif
/* FMQ: if search was empty, say that we got no hits */ /* FMQ: if search was empty, say that we got no hits */
@ -9049,6 +9114,7 @@ search_setup_model (GtkFileChooserDefault *impl)
*/ */
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));
file_list_set_sort_column_ids (impl);
} }
/* Creates a new query with the specified text and launches it */ /* Creates a new query with the specified text and launches it */
@ -9198,53 +9264,6 @@ search_setup_widgets (GtkFileChooserDefault *impl)
/* FMQ: hide the filter combo? */ /* FMQ: hide the filter combo? */
} }
/* Sometimes we need to frob the selection in the shortcuts list manually */
static void
shortcuts_select_item_without_activating (GtkFileChooserDefault *impl, int pos)
{
GtkTreeSelection *selection;
GtkTreePath *path;
selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (impl->browse_shortcuts_tree_view));
g_signal_handlers_block_by_func (selection, G_CALLBACK (shortcuts_selection_changed_cb), impl);
path = gtk_tree_path_new_from_indices (pos, -1);
gtk_tree_selection_select_path (selection, path);
gtk_tree_path_free (path);
g_signal_handlers_unblock_by_func (selection, G_CALLBACK (shortcuts_selection_changed_cb), impl);
}
/* Main entry point to the searching functions; this gets called when the user
* activates the Search shortcut.
*/
static void
search_activate (GtkFileChooserDefault *impl)
{
OperationMode previous_mode;
if (impl->operation_mode == OPERATION_MODE_SEARCH)
{
focus_search_entry_in_idle (impl);
return;
}
previous_mode = impl->operation_mode;
impl->operation_mode = OPERATION_MODE_SEARCH;
shortcuts_select_item_without_activating (impl, shortcuts_get_index (impl, SHORTCUTS_SEARCH));
operation_mode_stop (impl, previous_mode);
g_assert (impl->search_hbox == NULL);
g_assert (impl->search_entry == NULL);
g_assert (impl->search_model == NULL);
search_setup_widgets (impl);
file_list_set_sort_column_ids (impl);
}
/* /*
* Recent files support * Recent files support
*/ */
@ -9318,6 +9337,7 @@ recent_idle_cleanup (gpointer data)
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->recent_model)); GTK_TREE_MODEL (impl->recent_model));
file_list_set_sort_column_ids (impl);
set_busy_cursor (impl, FALSE); set_busy_cursor (impl, FALSE);
@ -9510,45 +9530,6 @@ recent_should_respond (GtkFileChooserDefault *impl)
return (gtk_tree_selection_count_selected_rows (selection) != 0); return (gtk_tree_selection_count_selected_rows (selection) != 0);
} }
/* Hide the location widgets temporarily */
static void
recent_hide_entry (GtkFileChooserDefault *impl)
{
path_bar_update (impl);
/* Hide the location widgets temporarily */
if (impl->action == GTK_FILE_CHOOSER_ACTION_OPEN ||
impl->action == GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER)
{
gtk_widget_hide (impl->location_button);
gtk_widget_hide (impl->location_entry_box);
}
}
/* Main entry point to the recent files functions; this gets called when
* the user activates the Recently Used shortcut.
*/
static void
recent_activate (GtkFileChooserDefault *impl)
{
OperationMode previous_mode;
if (impl->operation_mode == OPERATION_MODE_RECENT)
return;
previous_mode = impl->operation_mode;
impl->operation_mode = OPERATION_MODE_RECENT;
shortcuts_select_item_without_activating (impl, shortcuts_get_index (impl, SHORTCUTS_RECENT));
operation_mode_stop (impl, previous_mode);
recent_hide_entry (impl);
file_list_set_sort_column_ids (impl);
recent_start_loading (impl);
}
static void static void
set_current_filter (GtkFileChooserDefault *impl, set_current_filter (GtkFileChooserDefault *impl,
GtkFileFilter *filter) GtkFileFilter *filter)
@ -9891,11 +9872,11 @@ shortcuts_activate_iter (GtkFileChooserDefault *impl,
} }
else if (shortcut_type == SHORTCUT_TYPE_SEARCH) else if (shortcut_type == SHORTCUT_TYPE_SEARCH)
{ {
search_activate (impl); operation_mode_set (impl, OPERATION_MODE_SEARCH);
} }
else if (shortcut_type == SHORTCUT_TYPE_RECENT) else if (shortcut_type == SHORTCUT_TYPE_RECENT)
{ {
recent_activate (impl); operation_mode_set (impl, OPERATION_MODE_RECENT);
} }
} }