wayland: Fix dnd type negotiation
authorMatthias Clasen <mclasen@redhat.com>
Tue, 31 Dec 2019 02:14:17 +0000 (21:14 -0500)
committerMatthias Clasen <mclasen@redhat.com>
Wed, 1 Jan 2020 17:51:19 +0000 (12:51 -0500)
We need to call gdk_content_formats_union_serialize_mime_types
like GdkClipboard does, in order to get mime types that we can
sent out.

gdk/wayland/gdkdrag-wayland.c

index 6da90dca4962c136912d7c041682747a76dd7bbc..cf7e48a251ae6cd4485459766576edbde898b1cb 100644 (file)
@@ -340,6 +340,7 @@ gdk_wayland_drag_create_data_source (GdkDrag *drag)
   GdkDisplay *display = gdk_drag_get_display (drag);
   GdkWaylandDisplay *display_wayland = GDK_WAYLAND_DISPLAY (display);
   const char *const *mimetypes;
+  GdkContentFormats *formats;
   gsize i, n_mimetypes;
 
   drag_wayland->data_source = wl_data_device_manager_create_data_source (display_wayland->data_device_manager);
@@ -347,11 +348,20 @@ gdk_wayland_drag_create_data_source (GdkDrag *drag)
                                &data_source_listener,
                                drag);
 
-  mimetypes = gdk_content_formats_get_mime_types (gdk_drag_get_formats (drag), &n_mimetypes);
+  formats = gdk_content_formats_ref (gdk_drag_get_formats (drag));
+  formats = gdk_content_formats_union_serialize_mime_types (formats);
+
+  mimetypes = gdk_content_formats_get_mime_types (formats, &n_mimetypes);
+
+  GDK_DISPLAY_NOTE (gdk_drag_get_display (drag), EVENTS,
+            {char *s = g_strjoinv (" ", (char **)mimetypes);
+            g_message ("create data source, mime types=%s", s);
+            g_free (s);});
+
   for (i = 0; i < n_mimetypes; i++)
-    {
-      wl_data_source_offer (drag_wayland->data_source, mimetypes[i]);
-    }
+    wl_data_source_offer (drag_wayland->data_source, mimetypes[i]);
+
+  gdk_content_formats_unref (formats);
 }
 
 GdkDrag *