From a1f0b89d92f0a50ac14b16154d448265d0740122 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Mon, 17 Jan 2005 07:05:17 +0000 Subject: [PATCH] Save and restore the selected row in the bookmark list and the save folder 2005-01-17 Matthias Clasen * gtk/gtkfilechooserdefault.c (shortcuts_add_bookmarks): Save and restore the selected row in the bookmark list and the save folder combo. (#164290) --- ChangeLog | 6 +++ ChangeLog.pre-2-10 | 6 +++ ChangeLog.pre-2-8 | 6 +++ gtk/gtkfilechooserdefault.c | 77 ++++++++++++++++++++++++++++++++----- 4 files changed, 86 insertions(+), 9 deletions(-) diff --git a/ChangeLog b/ChangeLog index 879fde3496..4c426f10e7 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2005-01-17 Matthias Clasen + + * gtk/gtkfilechooserdefault.c (shortcuts_add_bookmarks): Save + and restore the selected row in the bookmark list and the + save folder combo. (#164290) + 2005-01-16 Matthias Clasen * gtk/gtkfilechooserdialog.c (gtk_file_chooser_dialog_new_with_backend): diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10 index 879fde3496..4c426f10e7 100644 --- a/ChangeLog.pre-2-10 +++ b/ChangeLog.pre-2-10 @@ -1,3 +1,9 @@ +2005-01-17 Matthias Clasen + + * gtk/gtkfilechooserdefault.c (shortcuts_add_bookmarks): Save + and restore the selected row in the bookmark list and the + save folder combo. (#164290) + 2005-01-16 Matthias Clasen * gtk/gtkfilechooserdialog.c (gtk_file_chooser_dialog_new_with_backend): diff --git a/ChangeLog.pre-2-8 b/ChangeLog.pre-2-8 index 879fde3496..4c426f10e7 100644 --- a/ChangeLog.pre-2-8 +++ b/ChangeLog.pre-2-8 @@ -1,3 +1,9 @@ +2005-01-17 Matthias Clasen + + * gtk/gtkfilechooserdefault.c (shortcuts_add_bookmarks): Save + and restore the selected row in the bookmark list and the + save folder combo. (#164290) + 2005-01-16 Matthias Clasen * gtk/gtkfilechooserdialog.c (gtk_file_chooser_dialog_new_with_backend): diff --git a/gtk/gtkfilechooserdefault.c b/gtk/gtkfilechooserdefault.c index c161455426..28af0a36d2 100644 --- a/gtk/gtkfilechooserdefault.c +++ b/gtk/gtkfilechooserdefault.c @@ -376,6 +376,8 @@ static gboolean shortcuts_select_func (GtkTreeSelection *selection, GtkTreePath *path, gboolean path_currently_selected, gpointer data); +static gboolean shortcuts_get_selected (GtkFileChooserDefault *impl, + GtkTreeIter *iter); static void shortcuts_activate_iter (GtkFileChooserDefault *impl, GtkTreeIter *iter); static int shortcuts_get_index (GtkFileChooserDefault *impl, @@ -1056,9 +1058,9 @@ shortcuts_reload_icons (GtkFileChooserDefault *impl) } while (gtk_tree_model_iter_next (GTK_TREE_MODEL (impl->shortcuts_model),&iter)); } -/* If a shortcut corresponds to the current folder, selects it */ -static void -shortcuts_find_current_folder (GtkFileChooserDefault *impl) +static void +shortcuts_find_folder (GtkFileChooserDefault *impl, + GtkFilePath *folder) { GtkTreeSelection *selection; int pos; @@ -1066,8 +1068,8 @@ shortcuts_find_current_folder (GtkFileChooserDefault *impl) selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (impl->browse_shortcuts_tree_view)); - g_assert (impl->current_folder != NULL); - pos = shortcut_find_position (impl, impl->current_folder); + g_assert (folder != NULL); + pos = shortcut_find_position (impl, folder); if (pos == -1) { gtk_tree_selection_unselect_all (selection); @@ -1079,6 +1081,13 @@ shortcuts_find_current_folder (GtkFileChooserDefault *impl) gtk_tree_path_free (path); } +/* If a shortcut corresponds to the current folder, selects it */ +static void +shortcuts_find_current_folder (GtkFileChooserDefault *impl) +{ + shortcuts_find_folder (impl, impl->current_folder); +} + /* Convenience function to get the display name and icon info for a path */ static GtkFileInfo * get_file_info (GtkFileSystem *file_system, @@ -1452,10 +1461,41 @@ shortcuts_add_bookmarks (GtkFileChooserDefault *impl) { GSList *bookmarks; gboolean old_changing_folders; - + GtkTreeIter iter; + GtkFilePath *list_selected = NULL; + GtkFilePath *combo_selected = NULL; + gboolean is_volume; + gpointer col_data; + old_changing_folders = impl->changing_folder; impl->changing_folder = TRUE; + if (shortcuts_get_selected (impl, &iter)) + { + gtk_tree_model_get (GTK_TREE_MODEL (impl->shortcuts_model), + &iter, + SHORTCUTS_COL_DATA, &col_data, + SHORTCUTS_COL_IS_VOLUME, &is_volume, + -1); + + if (col_data && !is_volume) + list_selected = gtk_file_path_copy (col_data); + } + + if (impl->save_folder_combo && + gtk_combo_box_get_active_iter (GTK_COMBO_BOX (impl->save_folder_combo), + &iter)) + { + gtk_tree_model_get (GTK_TREE_MODEL (impl->shortcuts_model), + &iter, + SHORTCUTS_COL_DATA, &col_data, + SHORTCUTS_COL_IS_VOLUME, &is_volume, + -1); + + if (col_data && !is_volume) + combo_selected = gtk_file_path_copy (col_data); + } + if (impl->num_bookmarks > 0) shortcuts_remove_rows (impl, shortcuts_get_index (impl, SHORTCUTS_BOOKMARKS_SEPARATOR), @@ -1466,12 +1506,28 @@ shortcuts_add_bookmarks (GtkFileChooserDefault *impl) gtk_file_paths_free (bookmarks); if (impl->num_bookmarks > 0) - { - shortcuts_insert_separator (impl, SHORTCUTS_BOOKMARKS_SEPARATOR); - } + shortcuts_insert_separator (impl, SHORTCUTS_BOOKMARKS_SEPARATOR); + if (impl->shortcuts_filter_model) gtk_tree_model_filter_refilter (GTK_TREE_MODEL_FILTER (impl->shortcuts_filter_model)); + if (list_selected) + { + shortcuts_find_folder (impl, list_selected); + gtk_file_path_free (list_selected); + } + + if (combo_selected) + { + gint pos; + + pos = shortcut_find_position (impl, combo_selected); + if (pos != -1) + gtk_combo_box_set_active (GTK_COMBO_BOX (impl->save_folder_combo), + pos); + gtk_file_path_free (combo_selected); + } + impl->changing_folder = old_changing_folders; } @@ -1918,6 +1974,9 @@ shortcuts_get_selected (GtkFileChooserDefault *impl, GtkTreeSelection *selection; GtkTreeIter parent_iter; + if (!impl->browse_shortcuts_tree_view) + return FALSE; + selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (impl->browse_shortcuts_tree_view)); if (!gtk_tree_selection_get_selected (selection, NULL, &parent_iter))