Fix bug 1300 by querying current border size in ConfigureNotify, and adjusting window coordinates accordingly.
authorStefanos Apostolopoulos <stapostol@gmail.com>
Sun, 20 Oct 2013 17:23:43 +0200
changeset 7838 909b0d7fe4dd
parent 7837 2f2f0b3b4702
child 7839 d2804f8153fe
Fix bug 1300 by querying current border size in ConfigureNotify, and adjusting window coordinates accordingly.
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) {