From: Rémi Bernon rbernon@codeweavers.com
--- dlls/winex11.drv/event.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+)
diff --git a/dlls/winex11.drv/event.c b/dlls/winex11.drv/event.c index 3bddde9c9b4..795320881bd 100644 --- a/dlls/winex11.drv/event.c +++ b/dlls/winex11.drv/event.c @@ -175,9 +175,11 @@ static inline void free_event_data( XEvent *event ) static BOOL host_window_filter_event( XEvent *event ) { struct host_window *win; + RECT old_rect; HWND hwnd;
if (!(win = get_host_window( event->xany.window, FALSE ))) return FALSE; + old_rect = win->rect;
switch (event->type) { @@ -210,6 +212,27 @@ static BOOL host_window_filter_event( XEvent *event ) } }
+ if (old_rect.left != win->rect.left || old_rect.top != win->rect.top) + { + XConfigureEvent configure = {.type = ConfigureNotify, .serial = event->xany.serial, .display = event->xany.display}; + unsigned int i; + + for (i = 0; i < win->children_count; i++) + { + RECT rect = win->children[i].rect; + + configure.event = win->children[i].window; + configure.window = configure.event; + configure.x = rect.left; + configure.y = rect.top; + configure.width = rect.right - rect.left; + configure.height = rect.bottom - rect.top; + configure.send_event = 0; + + XPutBackEvent( configure.display, (XEvent *)&configure ); + } + } + /* keep processing the event for foreign windows */ if (!XFindContext( event->xany.display, event->xany.window, winContext, (char **)&hwnd )) return FALSE; return TRUE;