From: Rémi Bernon rbernon@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; }