diff options
author | Benjamin Otte <otte@redhat.com> | 2017-12-16 00:17:40 +0100 |
---|---|---|
committer | Benjamin Otte <otte@redhat.com> | 2017-12-16 02:48:12 +0100 |
commit | 5f326d7ec6453c2f75cdb59e94ae97f9d2283442 (patch) | |
tree | aee710b599c90cf5d1da096ed040a11767749111 /gdk/x11/gdkdnd-x11.c | |
parent | 4573d2d19b91a1c4152e74b0582d36a8b0f2dc13 (diff) | |
download | gtk+-5f326d7ec6453c2f75cdb59e94ae97f9d2283442.tar.gz |
x11: Create IPC window outselves
Ignore the passed in IPC window.
Diffstat (limited to 'gdk/x11/gdkdnd-x11.c')
-rw-r--r-- | gdk/x11/gdkdnd-x11.c | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/gdk/x11/gdkdnd-x11.c b/gdk/x11/gdkdnd-x11.c index 706f124fe9..b566ddb7c2 100644 --- a/gdk/x11/gdkdnd-x11.c +++ b/gdk/x11/gdkdnd-x11.c @@ -406,7 +406,7 @@ gdk_x11_drag_context_finalize (GObject *object) { GdkDragContext *context = GDK_DRAG_CONTEXT (object); GdkX11DragContext *x11_context = GDK_X11_DRAG_CONTEXT (object); - GdkWindow *drag_window; + GdkWindow *drag_window, *ipc_window; if (context->source_window) { @@ -420,11 +420,14 @@ gdk_x11_drag_context_finalize (GObject *object) contexts = g_list_remove (contexts, context); drag_window = context->drag_window; + ipc_window = x11_context->ipc_window; G_OBJECT_CLASS (gdk_x11_drag_context_parent_class)->finalize (object); if (drag_window) gdk_window_destroy (drag_window); + if (ipc_window) + gdk_window_destroy (ipc_window); } /* Drag Contexts */ @@ -2978,7 +2981,10 @@ _gdk_x11_window_drag_begin (GdkWindow *window, context->protocol = GDK_DRAG_PROTO_XDND; x11_context->actions = actions; - x11_context->ipc_window = g_object_ref (window); + x11_context->ipc_window = gdk_window_new_popup (display, &(GdkRectangle) { -99, -99, 1, 1 }); + if (gdk_window_get_group (window)) + gdk_window_set_group (x11_context->ipc_window, window); + gdk_window_show (x11_context->ipc_window); x11_context->drag_window = create_drag_window (display); @@ -2994,9 +3000,9 @@ _gdk_x11_window_drag_begin (GdkWindow *window, xselection = gdk_x11_get_xatom_by_name_for_display (display, "XdndSelection"); XSetSelectionOwner (GDK_DISPLAY_XDISPLAY (display), xselection, - GDK_WINDOW_XID (window), + GDK_WINDOW_XID (x11_context->ipc_window), x11_context->timestamp); - if (XGetSelectionOwner (GDK_DISPLAY_XDISPLAY (display), xselection) != GDK_WINDOW_XID (window)) + if (XGetSelectionOwner (GDK_DISPLAY_XDISPLAY (display), xselection) != GDK_WINDOW_XID (x11_context->ipc_window)) { GDK_NOTE(DND, g_printerr ("failed XSetSelectionOwner() on \"XdndSelection\", aborting DND\n")); g_object_unref (context); |