diff options
author | Corey Berla <corey@berla.me> | 2022-12-28 09:07:34 -0800 |
---|---|---|
committer | António Fernandes <antoniof@gnome.org> | 2023-01-09 13:43:59 +0000 |
commit | 999782552986837b063f8f5e95bfd05fef0ddc46 (patch) | |
tree | b444729e5d7300730187384e5cf5627c8fcbc5da | |
parent | cd0ece2696a8d794af4b95e24eee8e6f54da6520 (diff) | |
download | nautilus-999782552986837b063f8f5e95bfd05fef0ddc46.tar.gz |
clipboard: Reimplement clipboard_clear_if_colliding_uris
This functions clears the clipboard if any of its contents becomes
potentially invalid.
-rw-r--r-- | src/nautilus-clipboard.c | 40 | ||||
-rw-r--r-- | src/nautilus-clipboard.h | 2 | ||||
-rw-r--r-- | 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<GFile>. 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); |