From 987329de82d1e58c5da719f55cec804b97e5341e Mon Sep 17 00:00:00 2001 From: Emmanuele Bassi Date: Fri, 11 May 2007 17:38:42 +0100 Subject: [PATCH] Override GtkTreeDragSource in the recent model Provide an implementation of GtkTreeDragSource::row_draggable() and GtkTreeDragSource::drag_data_get() vfuncs. The overridden functions allow adding a shortcut in OPERATION_MODE_RECENT by dragging and dropping a folder onto the shortcuts pane. --- gtk/gtkfilechooserdefault.c | 32 +++++++++++++++++++++++++++++--- 1 files changed, 29 insertions(+), 3 deletions(-) diff --git a/gtk/gtkfilechooserdefault.c b/gtk/gtkfilechooserdefault.c index 549be48..f4b5ed8 100644 --- a/gtk/gtkfilechooserdefault.c +++ b/gtk/gtkfilechooserdefault.c @@ -11187,10 +11187,19 @@ recent_model_sort_row_draggable (GtkTreeDragSource *drag_source, GtkTreePath *path) { RecentModelSort *model; + GtkTreeIter iter, child_iter; + gboolean is_folder; model = RECENT_MODEL_SORT (drag_source); + if (!gtk_tree_model_get_iter (GTK_TREE_MODEL (model), &iter, path)) + return FALSE; - return TRUE; + recent_get_valid_child_iter (model->impl, &child_iter, &iter); + gtk_tree_model_get (GTK_TREE_MODEL (model->impl->recent_model), &child_iter, + RECENT_MODEL_COL_IS_FOLDER, &is_folder, + -1); + + return is_folder; } static gboolean @@ -11199,12 +11208,29 @@ recent_model_sort_drag_data_get (GtkTreeDragSource *drag_source, GtkSelectionData *selection_data) { RecentModelSort *model; + GtkTreeIter iter, child_iter; + GtkFilePath *file_path; + gchar **uris; model = RECENT_MODEL_SORT (drag_source); + if (!gtk_tree_model_get_iter (GTK_TREE_MODEL (model), &iter, path)) + return FALSE; - /* FIXME */ + recent_get_valid_child_iter (model->impl, &child_iter, &iter); + gtk_tree_model_get (GTK_TREE_MODEL (model->impl->recent_model), &child_iter, + RECENT_MODEL_COL_PATH, &file_path, + -1); + g_assert (file_path != NULL); - return FALSE; + uris = g_new (gchar *, 2); + uris[0] = gtk_file_system_path_to_uri (model->impl->file_system, file_path); + uris[1] = NULL; + + gtk_selection_data_set_uris (selection_data, uris); + + g_strfreev (uris); + + return TRUE; } static void -- 1.4.4.2