From 999782552986837b063f8f5e95bfd05fef0ddc46 Mon Sep 17 00:00:00 2001 From: Corey Berla Date: Wed, 28 Dec 2022 09:07:34 -0800 Subject: clipboard: Reimplement clipboard_clear_if_colliding_uris This functions clears the clipboard if any of its contents becomes potentially invalid. --- src/nautilus-clipboard.c | 40 ++++++++++++++++++---------------------- src/nautilus-clipboard.h | 2 -- src/nautilus-files-view-dnd.c | 4 +--- 3 files changed, 19 insertions(+), 27 deletions(-) diff --git a/src/nautilus-clipboard.c b/src/nautilus-clipboard.c index fe3a39a8d..c315be6e9 100644 --- a/src/nautilus-clipboard.c +++ b/src/nautilus-clipboard.c @@ -113,46 +113,42 @@ nautilus_clipboard_from_string (char *string, return clip; } -#if 0 && NAUTILUS_DND_NEEDS_GTK4_REIMPLEMENTATION void nautilus_clipboard_clear_if_colliding_uris (GtkWidget *widget, const GList *item_uris) { - GtkSelectionData *data; - GList *clipboard_item_uris, *l; - gboolean collision; - - collision = FALSE; - data = gtk_clipboard_wait_for_contents (gtk_widget_get_clipboard (widget), - copied_files_atom); - if (data == NULL) + GdkClipboard *clipboard = gtk_widget_get_clipboard (widget); + GdkContentFormats *formats = gdk_clipboard_get_formats (clipboard); + g_auto (GValue) value = G_VALUE_INIT; + NautilusClipboard *nautilus_clipboard; + GList *clipboard_item_uris; + + if (!gdk_clipboard_is_local (clipboard) || + !gdk_content_formats_contain_gtype (formats, NAUTILUS_TYPE_CLIPBOARD)) { return; } - clipboard_item_uris = nautilus_clipboard_get_uri_list_from_selection_data (data); + g_value_init (&value, NAUTILUS_TYPE_CLIPBOARD); + if (!gdk_content_provider_get_value (gdk_clipboard_get_content (clipboard), &value, NULL)) + { + return; + } + nautilus_clipboard = g_value_get_boxed (&value); + clipboard_item_uris = nautilus_clipboard_get_uri_list (nautilus_clipboard); - for (l = (GList *) item_uris; l; l = l->next) + for (GList *l = (GList *) item_uris; l != NULL; l = l->next) { if (g_list_find_custom ((GList *) clipboard_item_uris, l->data, (GCompareFunc) g_strcmp0)) { - collision = TRUE; + gdk_clipboard_set_content (clipboard, NULL); break; } } - if (collision) - { - gtk_clipboard_clear (gtk_widget_get_clipboard (widget)); - } - - if (clipboard_item_uris) - { - g_list_free_full (clipboard_item_uris, g_free); - } + g_list_free_full (clipboard_item_uris, g_free); } -#endif /* * This asumes the implementation of GTK_TYPE_FILE_LIST is a GSList. diff --git a/src/nautilus-clipboard.h b/src/nautilus-clipboard.h index 5ac1522ae..bc71305df 100644 --- a/src/nautilus-clipboard.h +++ b/src/nautilus-clipboard.h @@ -28,10 +28,8 @@ typedef struct _NautilusClipboard NautilusClipboard; #define NAUTILUS_TYPE_CLIPBOARD (nautilus_clipboard_get_type()) GType nautilus_clipboard_get_type (void); -#if 0 && NAUTILUS_DND_NEEDS_GTK4_REIMPLEMENTATION void nautilus_clipboard_clear_if_colliding_uris (GtkWidget *widget, const GList *item_uris); -#endif GList *nautilus_clipboard_peek_files (NautilusClipboard *clip); GList *nautilus_clipboard_get_uri_list (NautilusClipboard *clip); gboolean nautilus_clipboard_is_cut (NautilusClipboard *clip); diff --git a/src/nautilus-files-view-dnd.c b/src/nautilus-files-view-dnd.c index 028f76f3f..f694ca2ee 100644 --- a/src/nautilus-files-view-dnd.c +++ b/src/nautilus-files-view-dnd.c @@ -195,11 +195,9 @@ nautilus_files_view_drop_proxy_received_uris (NautilusFilesView *view, return; } - -#if 0 && NAUTILUS_DND_NEEDS_GTK4_REIMPLEMENTATION nautilus_clipboard_clear_if_colliding_uris (GTK_WIDGET (view), source_uri_list); -#endif + nautilus_files_view_move_copy_items (view, source_uri_list, target_uri != NULL ? target_uri : container_uri, action); -- cgit v1.2.1