winex11: Fetch the current X window position on ShowWindow resulting from a window manager event.
This ensures that we get the correct size for maximized windows too,
which cannot be done with SetWindowPlacement.
diff --git a/dlls/winex11.drv/window.c b/dlls/winex11.drv/window.c
index a45f04b..3143765 100644
--- a/dlls/winex11.drv/window.c
+++ b/dlls/winex11.drv/window.c
@@ -2056,6 +2056,48 @@
}
+/***********************************************************************
+ * ShowWindow (X11DRV.@)
+ */
+UINT X11DRV_ShowWindow( HWND hwnd, INT cmd, RECT *rect, UINT swp )
+{
+ int x, y;
+ unsigned int width, height, border, depth;
+ Window root, top;
+ DWORD style = GetWindowLongW( hwnd, GWL_STYLE );
+ struct x11drv_thread_data *thread_data = x11drv_thread_data();
+ struct x11drv_win_data *data = X11DRV_get_win_data( hwnd );
+
+ if (!data || !data->whole_window || !data->managed || !data->mapped || data->iconic) return swp;
+ if (style & WS_MINIMIZE) return swp;
+
+ /* only fetch the new rectangle if the ShowWindow was a result of a window manager event */
+
+ if (!thread_data->current_event || thread_data->current_event->xany.window != data->whole_window)
+ return swp;
+
+ if (thread_data->current_event->type != ConfigureNotify &&
+ thread_data->current_event->type != PropertyNotify)
+ return swp;
+
+ TRACE( "win %p/%lx cmd %d at %s flags %08x\n",
+ hwnd, data->whole_window, cmd, wine_dbgstr_rect(rect), swp );
+
+ wine_tsx11_lock();
+ XGetGeometry( thread_data->display, data->whole_window,
+ &root, &x, &y, &width, &height, &border, &depth );
+ XTranslateCoordinates( thread_data->display, data->whole_window, root, 0, 0, &x, &y, &top );
+ wine_tsx11_unlock();
+ rect->left = x;
+ rect->top = y;
+ rect->right = x + width;
+ rect->bottom = y + height;
+ OffsetRect( rect, virtual_screen_rect.left, virtual_screen_rect.top );
+ X11DRV_X_to_window_rect( data, rect );
+ return swp & ~(SWP_NOMOVE | SWP_NOCLIENTMOVE | SWP_NOSIZE | SWP_NOCLIENTSIZE);
+}
+
+
/**********************************************************************
* SetWindowIcon (X11DRV.@)
*