diff --git a/include/Mw/LowLevel/X11.h b/include/Mw/LowLevel/X11.h index e1a0e28..6e4c8fb 100644 --- a/include/Mw/LowLevel/X11.h +++ b/include/Mw/LowLevel/X11.h @@ -33,6 +33,7 @@ struct _MwLLX11 { XIC xic; int top; + int toplevel; int grabbed; int force_render; diff --git a/src/backend/x11.c b/src/backend/x11.c index cbc53f9..2fc02b2 100644 --- a/src/backend/x11.c +++ b/src/backend/x11.c @@ -151,10 +151,12 @@ static MwLL MwLLCreateImpl(MwLL parent, int x, int y, int width, int height) { r->x11.display = XOpenDisplay(NULL); p = XRootWindow(r->x11.display, XDefaultScreen(r->x11.display)); r->x11.top = 1; + r->x11.toplevel = 1; } else { r->x11.display = parent->x11.display; p = parent->x11.window; r->x11.top = 0; + r->x11.toplevel = 0; } r->x11.window = XCreateSimpleWindow(r->x11.display, p, px, py, width, height, 0, 0, WhitePixel(r->x11.display, DefaultScreen(r->x11.display))); sh.flags = PWinGravity; @@ -252,6 +254,8 @@ static void MwLLDestroyImpl(MwLL handle) { XSync(handle->x11.display, False); + if(handle->x11.toplevel) XCloseDisplay(handle->x11.display); + free(handle); }