From: Rémi Bernon rbernon@codeweavers.com
--- dlls/winemac.drv/window.c | 7 +++---- include/wine/gdi_driver.h | 13 +++++++++++++ 2 files changed, 16 insertions(+), 4 deletions(-)
diff --git a/dlls/winemac.drv/window.c b/dlls/winemac.drv/window.c index 8cf1c3281ca..d3959a005f8 100644 --- a/dlls/winemac.drv/window.c +++ b/dlls/winemac.drv/window.c @@ -529,7 +529,7 @@ static void sync_window_min_max_info(HWND hwnd) CGSize min_size, max_size;
SetRect(&min_rect, 0, 0, minmax.ptMinTrackSize.x, minmax.ptMinTrackSize.y); - macdrv_window_to_mac_rect(data, style, &min_rect, &data->rects.window, &data->rects.client); + min_rect = visible_rect_from_window(&data->rects, min_rect); min_size = CGSizeMake(min_rect.right - min_rect.left, min_rect.bottom - min_rect.top);
if (minmax.ptMaxTrackSize.x == NtUserGetSystemMetrics(SM_CXMAXTRACK) && @@ -538,7 +538,7 @@ static void sync_window_min_max_info(HWND hwnd) else { SetRect(&max_rect, 0, 0, minmax.ptMaxTrackSize.x, minmax.ptMaxTrackSize.y); - macdrv_window_to_mac_rect(data, style, &max_rect, &data->rects.window, &data->rects.client); + max_rect = visible_rect_from_window(&data->rects, max_rect); max_size = CGSizeMake(max_rect.right - max_rect.left, max_rect.bottom - max_rect.top); }
@@ -2400,8 +2400,7 @@ BOOL query_resize_size(HWND hwnd, macdrv_query *query)
if (send_message(hwnd, WM_SIZING, corner, (LPARAM)&rect)) { - macdrv_window_to_mac_rect(data, NtUserGetWindowLongW(hwnd, GWL_STYLE), &rect, - &data->rects.window, &data->rects.client); + rect = visible_rect_from_window(&data->rects, rect); query->resize_size.rect = cgrect_from_rect(rect); ret = TRUE; } diff --git a/include/wine/gdi_driver.h b/include/wine/gdi_driver.h index d77479299ce..e9274da5d62 100644 --- a/include/wine/gdi_driver.h +++ b/include/wine/gdi_driver.h @@ -71,6 +71,19 @@ static inline RECT window_rect_from_visible( struct window_rects *rects, RECT vi return rect; }
+/* convert a window rect to the corresponding visible rect, using the window_rects offsets */ +static inline RECT visible_rect_from_window( struct window_rects *rects, RECT window_rect ) +{ + RECT rect = window_rect; + + rect.left += rects->visible.left - rects->window.left; + rect.top += rects->visible.top - rects->window.top; + rect.right += rects->visible.right - rects->window.right; + rect.bottom += rects->visible.bottom - rects->window.bottom; + + return rect; +} + typedef struct gdi_physdev { const struct gdi_dc_funcs *funcs;