From 6a3478c235154faefb40712f3536bbc9c28801d5 Mon Sep 17 00:00:00 2001 From: Stefanos Apostolopoulos Date: Sun, 20 Oct 2013 17:23:43 +0200 Subject: [PATCH] Fix bug 1300 by querying current border size in ConfigureNotify, and adjusting window coordinates accordingly. --- src/video/x11/SDL_x11events.c | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/src/video/x11/SDL_x11events.c b/src/video/x11/SDL_x11events.c index 593b2bee151b8..e425212bb8660 100644 --- a/src/video/x11/SDL_x11events.c +++ b/src/video/x11/SDL_x11events.c @@ -519,10 +519,32 @@ X11_DispatchEvent(_THIS) xevent.xconfigure.x, xevent.xconfigure.y, xevent.xconfigure.width, xevent.xconfigure.height); #endif + long border_left = 0; + long border_right = 0; + long border_top = 0; + long border_bottom = 0; + if (data->xwindow) { + Atom _net_frame_extents = XInternAtom(display, "_NET_FRAME_EXTENTS", 0); + Atom type; + int format; + unsigned long nitems, bytes_after; + unsigned char *property; + XGetWindowProperty(display, data->xwindow, + _net_frame_extents, 0, 16, 0, + XA_CARDINAL, &type, &format, + &nitems, &bytes_after, &property); + + border_left = ((long*)property)[0]; + border_right = ((long*)property)[1]; + border_top = ((long*)property)[2]; + border_bottom = ((long*)property)[3]; + } + if (xevent.xconfigure.x != data->last_xconfigure.x || xevent.xconfigure.y != data->last_xconfigure.y) { SDL_SendWindowEvent(data->window, SDL_WINDOWEVENT_MOVED, - xevent.xconfigure.x, xevent.xconfigure.y); + xevent.xconfigure.x - border_left, + xevent.xconfigure.y - border_top); } if (xevent.xconfigure.width != data->last_xconfigure.width || xevent.xconfigure.height != data->last_xconfigure.height) {