From a3cea2a32dabf82118399aaaa39c38071238fda1 Mon Sep 17 00:00:00 2001 From: Eric Koegel Date: Sat, 7 Apr 2012 14:58:52 +0300 Subject: [PATCH] Use the selected image's parent as the current folder when adding backdrops (Bug #8618) When the add file button is clicked in the settings app, the first selected image's folder is used as the current folder for the gtk file chooser dialog. --- settings/main.c | 42 ++++++++++++++++++++++++++++++++++++++++-- 1 files changed, 40 insertions(+), 2 deletions(-) diff --git a/settings/main.c b/settings/main.c index 74e7172..15ba3bc 100644 --- a/settings/main.c +++ b/settings/main.c @@ -874,6 +874,37 @@ xfdesktop_settings_save_backdrop_list(AppearancePanel *panel, return ret; } +static gchar* +get_folder_uri_for_first_selected_item(GtkTreeModel *model, + GtkTreeSelection *sel) +{ + gchar *filename = NULL, *image_uri = NULL, *dir_name = NULL; + GtkTreeIter iter; + GList *selected_rows = gtk_tree_selection_get_selected_rows(sel, &model); + + if(selected_rows == NULL) + return NULL; + + gtk_tree_model_get_iter (model, &iter, selected_rows->data); + gtk_tree_model_get(model, &iter, + COL_FILENAME, &filename, + -1); + + g_list_free(selected_rows); + + if(filename == NULL) + return NULL; + + /* trim it down to just the path and convert that to a uri */ + dir_name = g_path_get_dirname(filename); + image_uri = g_filename_to_uri(dir_name, NULL, NULL); + + g_free(filename); + g_free(dir_name); + + return image_uri; +} + static void add_file_button_clicked(GtkWidget *button, gpointer user_data) @@ -881,6 +912,9 @@ add_file_button_clicked(GtkWidget *button, AppearancePanel *panel = user_data; GtkWidget *chooser; GtkFileFilter *filter; + GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(panel->image_treeview)); + GtkTreeSelection *sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(panel->image_treeview)); + gchar *directory_uri; chooser = gtk_file_chooser_dialog_new(_("Add Image File(s)"), GTK_WINDOW(gtk_widget_get_toplevel(button)), @@ -903,9 +937,14 @@ add_file_button_clicked(GtkWidget *button, exo_gtk_file_chooser_add_thumbnail_preview(GTK_FILE_CHOOSER(chooser)); + directory_uri = get_folder_uri_for_first_selected_item(model, sel); + if(directory_uri != NULL) { + gtk_file_chooser_set_current_folder_uri(GTK_FILE_CHOOSER(chooser), directory_uri); + g_free(directory_uri); + } + if(gtk_dialog_run(GTK_DIALOG(chooser)) == GTK_RESPONSE_ACCEPT) { GSList *filenames = gtk_file_chooser_get_filenames(GTK_FILE_CHOOSER(chooser)); - GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(panel->image_treeview)); GSList *l; PreviewData *pdata = g_new0(PreviewData, 1); pdata->model = g_object_ref(G_OBJECT(model)); @@ -917,7 +956,6 @@ add_file_button_clicked(GtkWidget *button, /* auto-select the first one added */ if(l == filenames) { - GtkTreeSelection *sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(panel->image_treeview)); gtk_tree_selection_select_iter(sel, iter); } } -- 1.7.5.4