summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCorey Berla <corey@berla.me>2022-12-28 09:07:34 -0800
committerAntónio Fernandes <antoniof@gnome.org>2023-01-09 13:43:59 +0000
commit999782552986837b063f8f5e95bfd05fef0ddc46 (patch)
treeb444729e5d7300730187384e5cf5627c8fcbc5da
parentcd0ece2696a8d794af4b95e24eee8e6f54da6520 (diff)
downloadnautilus-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.c40
-rw-r--r--src/nautilus-clipboard.h2
-rw-r--r--src/nautilus-files-view-dnd.c4
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);