Updating branch refs/heads/master to c21dc002c6cac3347bb94bc73627aef1d407cca6 (commit) from 8fc3176fb50dbd00f381c16262917171840ff4ba (commit)
commit c21dc002c6cac3347bb94bc73627aef1d407cca6 Author: Nick Schermer <n...@xfce.org> Date: Tue Sep 18 21:40:18 2012 +0200 Improve view response when using dnd between 2 windows. thunar/thunar-standard-view.c | 46 ++++++++++++++++++++++++++++++++--------- 1 files changed, 36 insertions(+), 10 deletions(-) diff --git a/thunar/thunar-standard-view.c b/thunar/thunar-standard-view.c index 50bf0d7..0077d8b 100644 --- a/thunar/thunar-standard-view.c +++ b/thunar/thunar-standard-view.c @@ -189,7 +189,8 @@ static void thunar_standard_view_action_rename (Gtk ThunarStandardView *standard_view); static void thunar_standard_view_action_restore (GtkAction *action, ThunarStandardView *standard_view); -static GClosure *thunar_standard_view_new_files_closure (ThunarStandardView *standard_view); +static GClosure *thunar_standard_view_new_files_closure (ThunarStandardView *standard_view, + GtkWidget *source_view); static void thunar_standard_view_new_files (ThunarStandardView *standard_view, GList *path_list); static gboolean thunar_standard_view_button_release_event (GtkWidget *view, @@ -1848,7 +1849,7 @@ thunar_standard_view_action_create_empty_file (GtkAction *action, /* launch the operation */ application = thunar_application_get (); thunar_application_creat (application, GTK_WIDGET (standard_view), &path_list, - thunar_standard_view_new_files_closure (standard_view)); + thunar_standard_view_new_files_closure (standard_view, NULL)); g_object_unref (application); /* release the path */ @@ -1892,7 +1893,7 @@ thunar_standard_view_action_create_folder (GtkAction *action, /* launch the operation */ application = thunar_application_get (); thunar_application_mkdir (application, GTK_WIDGET (standard_view), &path_list, - thunar_standard_view_new_files_closure (standard_view)); + thunar_standard_view_new_files_closure (standard_view, NULL)); g_object_unref (G_OBJECT (application)); /* release the path */ @@ -1950,7 +1951,7 @@ thunar_standard_view_action_create_template (GtkAction *action, /* launch the operation */ application = thunar_application_get (); thunar_application_copy_to (application, GTK_WIDGET (standard_view), &source_path_list, &target_path_list, - thunar_standard_view_new_files_closure (standard_view)); + thunar_standard_view_new_files_closure (standard_view, NULL)); g_object_unref (G_OBJECT (application)); /* release the target path */ @@ -2045,7 +2046,7 @@ thunar_standard_view_action_paste (GtkAction *action, if (G_LIKELY (current_directory != NULL)) { thunar_clipboard_manager_paste_files (standard_view->clipboard, thunar_file_get_file (current_directory), - GTK_WIDGET (standard_view), thunar_standard_view_new_files_closure (standard_view)); + GTK_WIDGET (standard_view), thunar_standard_view_new_files_closure (standard_view, NULL)); } } @@ -2185,7 +2186,7 @@ thunar_standard_view_action_duplicate (GtkAction *action, * creates duplicates of the files. */ application = thunar_application_get (); - new_files_closure = thunar_standard_view_new_files_closure (standard_view); + new_files_closure = thunar_standard_view_new_files_closure (standard_view, NULL); thunar_application_copy_into (application, GTK_WIDGET (standard_view), selected_files, thunar_file_get_file (current_directory), new_files_closure); g_object_unref (G_OBJECT (application)); @@ -2222,7 +2223,7 @@ thunar_standard_view_action_make_link (GtkAction *action, * creates new unique links for the files. */ application = thunar_application_get (); - new_files_closure = thunar_standard_view_new_files_closure (standard_view); + new_files_closure = thunar_standard_view_new_files_closure (standard_view, NULL); thunar_application_link_into (application, GTK_WIDGET (standard_view), selected_files, thunar_file_get_file (current_directory), new_files_closure); g_object_unref (G_OBJECT (application)); @@ -2338,15 +2339,18 @@ thunar_standard_view_action_restore (GtkAction *action, /* restore the selected files */ application = thunar_application_get (); thunar_application_restore_files (application, GTK_WIDGET (standard_view), standard_view->priv->selected_files, - thunar_standard_view_new_files_closure (standard_view)); + thunar_standard_view_new_files_closure (standard_view, NULL)); g_object_unref (G_OBJECT (application)); } static GClosure* -thunar_standard_view_new_files_closure (ThunarStandardView *standard_view) +thunar_standard_view_new_files_closure (ThunarStandardView *standard_view, + GtkWidget *source_view) { + _thunar_return_val_if_fail (source_view == NULL || THUNAR_IS_VIEW (source_view), NULL); + /* drop any previous "new-files" closure */ if (G_UNLIKELY (standard_view->priv->new_files_closure != NULL)) { @@ -2354,6 +2358,9 @@ thunar_standard_view_new_files_closure (ThunarStandardView *standard_view) g_closure_unref (standard_view->priv->new_files_closure); } + /* set the remove view data we possibly need to reload */ + g_object_set_data (G_OBJECT (standard_view), I_("source-view"), source_view); + /* allocate a new "new-files" closure */ standard_view->priv->new_files_closure = g_cclosure_new_swap (G_CALLBACK (thunar_standard_view_new_files), standard_view, NULL); g_closure_ref (standard_view->priv->new_files_closure); @@ -2372,6 +2379,7 @@ thunar_standard_view_new_files (ThunarStandardView *standard_view, ThunarFile*file; GList *file_list = NULL; GList *lp; + GtkWidget *source_view; _thunar_return_if_fail (THUNAR_IS_STANDARD_VIEW (standard_view)); @@ -2411,6 +2419,11 @@ thunar_standard_view_new_files (ThunarStandardView *standard_view, gtk_widget_grab_focus (GTK_BIN (standard_view)->child); } } + + /* when performing dnd between 2 views, we force a review on the source as well */ + source_view = g_object_get_data (G_OBJECT (standard_view), I_("source-view")); + if (THUNAR_IS_VIEW (source_view)) + thunar_view_reload (THUNAR_VIEW (source_view)); } @@ -2697,6 +2710,8 @@ thunar_standard_view_drag_data_received (GtkWidget *view, gchar **bits; gint pid; gint n = 0; + GtkWidget *source_widget; + GtkWidget *source_view = NULL; /* check if we don't already know the drop data */ if (G_LIKELY (!standard_view->priv->drop_data_ready)) @@ -2831,8 +2846,19 @@ thunar_standard_view_drag_data_received (GtkWidget *view, /* perform the requested action */ if (G_LIKELY (action != 0)) { + /* look if we can find the drag source widget */ + source_widget = gtk_drag_get_source_widget (context); + if (source_widget != NULL) + { + /* if this is a source view, attach it to the view receiving + * the data, see thunar_standard_view_new_files */ + source_view = gtk_widget_get_parent (source_widget); + if (!THUNAR_IS_VIEW (source_view)) + source_view = NULL; + } + succeed = thunar_dnd_perform (GTK_WIDGET (standard_view), file, standard_view->priv->drop_file_list, - action, thunar_standard_view_new_files_closure (standard_view)); + action, thunar_standard_view_new_files_closure (standard_view, source_view)); } } _______________________________________________ Xfce4-commits mailing list Xfce4-commits@xfce.org https://mail.xfce.org/mailman/listinfo/xfce4-commits