From e702d425975a603f9e73f7de222406d9b5969a50 Mon Sep 17 00:00:00 2001 From: Alexander Larsson Date: Thu, 14 May 2020 09:42:53 +0200 Subject: [PATCH] x11 drag: Fix mapped error In the gtk-demo drag-and-drop demo i can't drag anything, all I get is: (gtk4-demo:358993): Gdk-CRITICAL **: 09:36:19.617: Surface 0x7e1bb0 has not been mapped in GdkSeatGrabPrepareFunc This is because GdkX11Drag.ipc_surface is not considered mapped, even though we called gdk_x11_surface_show() on it, because the GDK_SURFACE_STATE_WITHDRAWN flag is still set. I added calls to gdk_synthesize_surface_state() to match what e.g. show_popup() and gdk_x11_toplevel_present() does. --- gdk/x11/gdkdrag-x11.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/gdk/x11/gdkdrag-x11.c b/gdk/x11/gdkdrag-x11.c index 3ae250c965..61160f9406 100644 --- a/gdk/x11/gdkdrag-x11.c +++ b/gdk/x11/gdkdrag-x11.c @@ -2028,6 +2028,8 @@ _gdk_x11_surface_drag_begin (GdkSurface *surface, x11_drag->ipc_surface = ipc_surface; if (gdk_x11_surface_get_group (surface)) gdk_x11_surface_set_group (x11_drag->ipc_surface, surface); + + gdk_synthesize_surface_state (x11_drag->ipc_surface, GDK_SURFACE_STATE_WITHDRAWN, 0); gdk_x11_surface_show (x11_drag->ipc_surface, FALSE); x11_drag->drag_surface = create_drag_surface (display);