X11: Fix no window position events during resize

From upstream: fe57e3c292.
This commit is contained in:
Luflosi 2020-01-04 19:22:25 +01:00
parent 2f7bdc274d
commit 74bed658e1
No known key found for this signature in database
GPG Key ID: 4E41E29EDCC345D0
2 changed files with 34 additions and 11 deletions

1
glfw/x11_platform.h vendored
View File

@ -180,6 +180,7 @@ typedef struct _GLFWwindowX11
{ {
Colormap colormap; Colormap colormap;
Window handle; Window handle;
Window parent;
bool iconified; bool iconified;
bool maximized; bool maximized;

44
glfw/x11_window.c vendored
View File

@ -1184,6 +1184,18 @@ static void processEvent(XEvent *event)
switch (event->type) switch (event->type)
{ {
case CreateNotify:
{
window->x11.parent = event->xcreatewindow.parent;
return;
}
case ReparentNotify:
{
window->x11.parent = event->xreparent.parent;
return;
}
case KeyPress: case KeyPress:
{ {
UPDATE_KEYMAP_IF_NEEDED; UPDATE_KEYMAP_IF_NEEDED;
@ -1377,18 +1389,28 @@ static void processEvent(XEvent *event)
window->x11.height = event->xconfigure.height; window->x11.height = event->xconfigure.height;
} }
if (event->xconfigure.x != window->x11.xpos || int xpos = event->xconfigure.x;
event->xconfigure.y != window->x11.ypos) int ypos = event->xconfigure.y;
{
if (event->xany.send_event)
{
_glfwInputWindowPos(window,
event->xconfigure.x,
event->xconfigure.y);
window->x11.xpos = event->xconfigure.x; // NOTE: ConfigureNotify events from the server are in local
window->x11.ypos = event->xconfigure.y; // coordinates, so if we are reparented we need to translate
} // the position into root (screen) coordinates
if (!event->xany.send_event && window->x11.parent != _glfw.x11.root)
{
Window dummy;
XTranslateCoordinates(_glfw.x11.display,
window->x11.parent,
_glfw.x11.root,
xpos, ypos,
&xpos, &ypos,
&dummy);
}
if (xpos != window->x11.xpos || ypos != window->x11.ypos)
{
_glfwInputWindowPos(window, xpos, ypos);
window->x11.xpos = xpos;
window->x11.ypos = ypos;
} }
return; return;