The following patch queries the border size of the window inside the
ConfigureNotify event, and adjusts the window coordinates accordingly
before passing them to the SDL event queue.
HG changeset patch
User Stefanos Apostolopoulos <@Stefanos_A>
Date 1382282623 -7200
Sun Oct 20 17:23:43 2013 +0200
Node ID 909b0d7fe4dd0af23585e750bd3396a0b53d2a6b
Parent 2f2f0b3b4702482cb47a98904fb1822080e60266
Fix bug 1300 by querying current border size in ConfigureNotify, and
adjusting window coordinates accordingly.
diff -r 2f2f0b3b4702 -r 909b0d7fe4dd src/video/x11/SDL_x11events.c
— a/src/video/x11/SDL_x11events.c Sat Oct 19 01:29:23 2013 -0700
+++ b/src/video/x11/SDL_x11events.c Sun Oct 20 17:23:43 2013 +0200
@@ -519,10 +519,32 @@
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) {