From: Rémi Bernon <rbernon(a)codeweavers.com> --- dlls/winemac.drv/surface.c | 22 ++++++---------------- 1 file changed, 6 insertions(+), 16 deletions(-) diff --git a/dlls/winemac.drv/surface.c b/dlls/winemac.drv/surface.c index b6f0ea2d812..7a7233e98c3 100644 --- a/dlls/winemac.drv/surface.c +++ b/dlls/winemac.drv/surface.c @@ -193,30 +193,20 @@ failed: */ BOOL macdrv_CreateWindowSurface(HWND hwnd, const RECT *surface_rect, struct window_surface **surface) { + struct window_surface *previous; struct macdrv_win_data *data; TRACE("hwnd %p, surface_rect %s, surface %p\n", hwnd, wine_dbgstr_rect(surface_rect), surface); - if (!(data = get_win_data(hwnd))) return TRUE; /* use default surface */ + if ((previous = *surface) && previous->funcs == &macdrv_surface_funcs) return TRUE; - if (*surface) window_surface_release(*surface); - *surface = NULL; - - if (data->surface) + if ((data = get_win_data(hwnd))) { - if (EqualRect(&data->surface->rect, surface_rect)) - { - /* existing surface is good enough */ - window_surface_add_ref(data->surface); - *surface = data->surface; - goto done; - } + *surface = create_surface(hwnd, data->cocoa_window, surface_rect, previous); + release_win_data(data); } - *surface = create_surface(data->hwnd, data->cocoa_window, surface_rect, data->surface); - -done: - release_win_data(data); + if (previous) window_surface_release(previous); return TRUE; } -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/6081