فهرست منبع

Fix bug 1300 by querying current border size in ConfigureNotify, and adjusting window coordinates accordingly.

Stefanos Apostolopoulos 12 سال پیش
والد
کامیت
6a3478c235
1فایلهای تغییر یافته به همراه23 افزوده شده و 1 حذف شده
  1. 23 1
      src/video/x11/SDL_x11events.c

+ 23 - 1
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) {