wayland: Use a magic mime type for local DND
Otherwise the compositor gets all confused when it's trying to make drag happen but we know it's not going to happen. After all, we exchange data behind its back, we just need to keep it informed.
This commit is contained in:
@@ -1127,6 +1127,10 @@ data_offer_offer (void *data,
|
||||
return;
|
||||
}
|
||||
|
||||
/* skip magic mime types */
|
||||
if (g_str_equal (type, GDK_WAYLAND_LOCAL_DND_MIME_TYPE))
|
||||
return;
|
||||
|
||||
gdk_content_formats_builder_add_mime_type (seat->pending_builder, type);
|
||||
}
|
||||
|
||||
|
||||
@@ -358,6 +358,7 @@ gdk_wayland_drag_create_data_source (GdkDrag *drag)
|
||||
g_message ("create data source, mime types=%s", s);
|
||||
g_free (s);});
|
||||
|
||||
wl_data_source_offer (drag_wayland->data_source, GDK_WAYLAND_LOCAL_DND_MIME_TYPE);
|
||||
for (i = 0; i < n_mimetypes; i++)
|
||||
wl_data_source_offer (drag_wayland->data_source, mimetypes[i]);
|
||||
|
||||
|
||||
@@ -97,6 +97,13 @@ gdk_wayland_drop_drop_set_status (GdkWaylandDrop *drop_wayland,
|
||||
const char *const *mimetypes;
|
||||
gsize i, n_mimetypes;
|
||||
|
||||
/* This is a local drag, treat it like that */
|
||||
if (gdk_drop_get_drag (GDK_DROP (drop_wayland)))
|
||||
{
|
||||
wl_data_offer_accept (drop_wayland->offer, drop_wayland->serial, GDK_WAYLAND_LOCAL_DND_MIME_TYPE);
|
||||
return;
|
||||
}
|
||||
|
||||
mimetypes = gdk_content_formats_get_mime_types (gdk_drop_get_formats (GDK_DROP (drop_wayland)), &n_mimetypes);
|
||||
for (i = 0; i < n_mimetypes; i++)
|
||||
{
|
||||
|
||||
@@ -44,6 +44,13 @@
|
||||
#define WL_SURFACE_HAS_BUFFER_SCALE 3
|
||||
#define WL_POINTER_HAS_FRAME 5
|
||||
|
||||
/* the magic mime type we use for local DND operations.
|
||||
* We offer it to every dnd operation, but will strip it out on the drop
|
||||
* site unless we can prove it's a local DND - then we will use only
|
||||
* this type
|
||||
*/
|
||||
#define GDK_WAYLAND_LOCAL_DND_MIME_TYPE "application/x-gtk-local-dnd"
|
||||
|
||||
GdkKeymap *_gdk_wayland_keymap_new (GdkDisplay *display);
|
||||
void _gdk_wayland_keymap_update_from_fd (GdkKeymap *keymap,
|
||||
uint32_t format,
|
||||
|
||||
Reference in New Issue
Block a user