From: Rémi Bernon rbernon@codeweavers.com
They look unnecessary, we are drawing entire window surfaces now, or to individual client views when GL/VK is involved. --- dlls/winemac.drv/macdrv.h | 1 - dlls/winemac.drv/window.c | 255 ++++++-------------------------------- 2 files changed, 40 insertions(+), 216 deletions(-)
diff --git a/dlls/winemac.drv/macdrv.h b/dlls/winemac.drv/macdrv.h index 9c76fe78c38..ce34a231cf4 100644 --- a/dlls/winemac.drv/macdrv.h +++ b/dlls/winemac.drv/macdrv.h @@ -178,7 +178,6 @@ extern BOOL macdrv_SystemParametersInfo(UINT action, UINT int_param, void *ptr_p { HWND hwnd; /* hwnd that this private data belongs to */ macdrv_window cocoa_window; - macdrv_view cocoa_view; macdrv_view client_cocoa_view; struct window_rects rects; /* window rects in monitor DPI, relative to parent client area */ int pixel_format; /* pixel format for GL */ diff --git a/dlls/winemac.drv/window.c b/dlls/winemac.drv/window.c index c9a4fcd5060..93dc5fb3cbb 100644 --- a/dlls/winemac.drv/window.c +++ b/dlls/winemac.drv/window.c @@ -231,21 +231,6 @@ macdrv_window macdrv_get_cocoa_window(HWND hwnd, BOOL require_on_screen) }
-/*********************************************************************** - * macdrv_get_cocoa_view - * - * Return the Cocoa view associated with a window - */ -macdrv_view macdrv_get_cocoa_view(HWND hwnd) -{ - struct macdrv_win_data *data = get_win_data(hwnd); - macdrv_view ret = data ? data->cocoa_view : NULL; - - release_win_data(data); - return ret; -} - - /*********************************************************************** * macdrv_get_client_cocoa_view * @@ -491,7 +476,7 @@ static void create_client_cocoa_view(struct macdrv_win_data *data) data->client_cocoa_view = macdrv_create_view(cgrect_from_rect(rect)); macdrv_set_view_hidden(data->client_cocoa_view, FALSE); } - macdrv_set_view_superview(data->client_cocoa_view, data->cocoa_view, data->cocoa_window, NULL, NULL); + macdrv_set_view_superview(data->client_cocoa_view, NULL, data->cocoa_window, NULL, NULL); }
@@ -572,71 +557,6 @@ static void destroy_cocoa_window(struct macdrv_win_data *data) }
-/********************************************************************** - * create_cocoa_view - * - * Create the Cocoa view for a given Windows child window - */ -static void create_cocoa_view(struct macdrv_win_data *data) -{ - BOOL equal = EqualRect(&data->rects.window, &data->rects.client); - CGRect frame = cgrect_from_rect(data->rects.window); - - data->shaped = FALSE; - data->rects.visible = data->rects.window; - - TRACE("creating %p window %s whole %s client %s\n", data->hwnd, wine_dbgstr_rect(&data->rects.window), - wine_dbgstr_rect(&data->rects.visible), wine_dbgstr_rect(&data->rects.client)); - - if (!equal) - data->cocoa_view = macdrv_create_view(frame); - create_client_cocoa_view(data); - if (equal) - { - data->cocoa_view = data->client_cocoa_view; - macdrv_set_view_hidden(data->cocoa_view, TRUE); - macdrv_set_view_frame(data->cocoa_view, frame); - } -} - - -/********************************************************************** - * destroy_cocoa_view - * - * Destroy the Cocoa view for a given window. - */ -static void destroy_cocoa_view(struct macdrv_win_data *data) -{ - if (!data->cocoa_view) return; - - TRACE("win %p Cocoa view %p\n", data->hwnd, data->cocoa_view); - - if (data->cocoa_view != data->client_cocoa_view) - macdrv_dispose_view(data->cocoa_view); - data->cocoa_view = NULL; - data->on_screen = FALSE; -} - - -/*********************************************************************** - * set_cocoa_view_parent - */ -static void set_cocoa_view_parent(struct macdrv_win_data *data, HWND parent) -{ - struct macdrv_win_data *parent_data = get_win_data(parent); - macdrv_window cocoa_window = parent_data ? parent_data->cocoa_window : NULL; - macdrv_view superview = parent_data ? parent_data->client_cocoa_view : NULL; - - TRACE("win %p/%p parent %p/%p\n", data->hwnd, data->cocoa_view, parent, cocoa_window ? (void*)cocoa_window : (void*)superview); - - if (!cocoa_window && !superview) - WARN("hwnd %p new parent %p has no Cocoa window or view in this process\n", data->hwnd, parent); - - macdrv_set_view_superview(data->cocoa_view, superview, cocoa_window, NULL, NULL); - release_win_data(parent_data); -} - - /*********************************************************************** * macdrv_create_win_data * @@ -668,16 +588,10 @@ static struct macdrv_win_data *macdrv_create_win_data(HWND hwnd, const struct wi hwnd, data->cocoa_window, wine_dbgstr_rect(&data->rects.window), wine_dbgstr_rect(&data->rects.visible), wine_dbgstr_rect(&data->rects.client)); } - else - { - create_cocoa_view(data); - TRACE("win %p/%p window %s whole %s client %s\n", - hwnd, data->cocoa_view, wine_dbgstr_rect(&data->rects.window), - wine_dbgstr_rect(&data->rects.visible), wine_dbgstr_rect(&data->rects.client)); - - set_cocoa_view_parent(data, parent); - }
+ TRACE("win %p/%p window %s whole %s client %s\n", + hwnd, data->cocoa_window, wine_dbgstr_rect(&data->rects.window), + wine_dbgstr_rect(&data->rects.visible), wine_dbgstr_rect(&data->rects.client)); return data; }
@@ -753,51 +667,41 @@ static void set_focus(HWND hwnd, BOOL raise) */ static void show_window(struct macdrv_win_data *data) { - if (data->cocoa_window) - { - HWND prev = NULL; - HWND next = NULL; - macdrv_window prev_window = NULL; - macdrv_window next_window = NULL; - BOOL activate = FALSE; - GUITHREADINFO info; - - /* find window that this one must be after */ - prev = NtUserGetWindowRelative(data->hwnd, GW_HWNDPREV); - while (prev && !((NtUserGetWindowLongW(prev, GWL_STYLE) & (WS_VISIBLE | WS_MINIMIZE)) == WS_VISIBLE && - (prev_window = macdrv_get_cocoa_window(prev, TRUE)))) - prev = NtUserGetWindowRelative(prev, GW_HWNDPREV); - if (!prev_window) - { - /* find window that this one must be before */ - next = NtUserGetWindowRelative(data->hwnd, GW_HWNDNEXT); - while (next && !((NtUserGetWindowLongW(next, GWL_STYLE) & (WS_VISIBLE | WS_MINIMIZE)) == WS_VISIBLE && - (next_window = macdrv_get_cocoa_window(next, TRUE)))) - next = NtUserGetWindowRelative(next, GW_HWNDNEXT); - } + HWND prev = NULL; + HWND next = NULL; + macdrv_window prev_window = NULL; + macdrv_window next_window = NULL; + BOOL activate = FALSE; + GUITHREADINFO info;
- TRACE("win %p/%p below %p/%p above %p/%p\n", - data->hwnd, data->cocoa_window, prev, prev_window, next, next_window); + /* find window that this one must be after */ + prev = NtUserGetWindowRelative(data->hwnd, GW_HWNDPREV); + while (prev && !((NtUserGetWindowLongW(prev, GWL_STYLE) & (WS_VISIBLE | WS_MINIMIZE)) == WS_VISIBLE && + (prev_window = macdrv_get_cocoa_window(prev, TRUE)))) + prev = NtUserGetWindowRelative(prev, GW_HWNDPREV); + if (!prev_window) + { + /* find window that this one must be before */ + next = NtUserGetWindowRelative(data->hwnd, GW_HWNDNEXT); + while (next && !((NtUserGetWindowLongW(next, GWL_STYLE) & (WS_VISIBLE | WS_MINIMIZE)) == WS_VISIBLE && + (next_window = macdrv_get_cocoa_window(next, TRUE)))) + next = NtUserGetWindowRelative(next, GW_HWNDNEXT); + }
- if (!prev_window) - activate = activate_on_focus_time && (NtGetTickCount() - activate_on_focus_time < 2000); - macdrv_order_cocoa_window(data->cocoa_window, prev_window, next_window, activate); - data->on_screen = TRUE; + TRACE("win %p/%p below %p/%p above %p/%p\n", + data->hwnd, data->cocoa_window, prev, prev_window, next, next_window);
- info.cbSize = sizeof(info); - if (NtUserGetGUIThreadInfo(NtUserGetWindowThread(data->hwnd, NULL), &info) && info.hwndFocus && - (data->hwnd == info.hwndFocus || NtUserIsChild(data->hwnd, info.hwndFocus))) - set_focus(info.hwndFocus, FALSE); - if (activate) - activate_on_focus_time = 0; - } - else - { - TRACE("win %p/%p showing view\n", data->hwnd, data->cocoa_view); + if (!prev_window) + activate = activate_on_focus_time && (NtGetTickCount() - activate_on_focus_time < 2000); + macdrv_order_cocoa_window(data->cocoa_window, prev_window, next_window, activate); + data->on_screen = TRUE;
- macdrv_set_view_hidden(data->cocoa_view, FALSE); - data->on_screen = TRUE; - } + info.cbSize = sizeof(info); + if (NtUserGetGUIThreadInfo(NtUserGetWindowThread(data->hwnd, NULL), &info) && info.hwndFocus && + (data->hwnd == info.hwndFocus || NtUserIsChild(data->hwnd, info.hwndFocus))) + set_focus(info.hwndFocus, FALSE); + if (activate) + activate_on_focus_time = 0; }
@@ -810,56 +714,10 @@ static void hide_window(struct macdrv_win_data *data)
if (data->cocoa_window) macdrv_hide_cocoa_window(data->cocoa_window); - else - macdrv_set_view_hidden(data->cocoa_view, TRUE); data->on_screen = FALSE; }
-/*********************************************************************** - * sync_window_z_order - */ -static void sync_window_z_order(struct macdrv_win_data *data) -{ - if (data->cocoa_view) - { - HWND parent = NtUserGetAncestor(data->hwnd, GA_PARENT); - macdrv_view superview = macdrv_get_client_cocoa_view(parent); - macdrv_window window = NULL; - HWND prev; - HWND next = NULL; - macdrv_view prev_view = NULL; - macdrv_view next_view = NULL; - - if (!superview) - { - window = macdrv_get_cocoa_window(parent, FALSE); - if (!window) - WARN("hwnd %p/%p parent %p has no Cocoa window or view in this process\n", data->hwnd, data->cocoa_view, parent); - } - - /* find window that this one must be after */ - prev = NtUserGetWindowRelative(data->hwnd, GW_HWNDPREV); - while (prev && !(prev_view = macdrv_get_cocoa_view(prev))) - prev = NtUserGetWindowRelative(prev, GW_HWNDPREV); - if (!prev_view) - { - /* find window that this one must be before */ - next = NtUserGetWindowRelative(data->hwnd, GW_HWNDNEXT); - while (next && !(next_view = macdrv_get_cocoa_view(next))) - next = NtUserGetWindowRelative(next, GW_HWNDNEXT); - } - - TRACE("win %p/%p below %p/%p above %p/%p\n", - data->hwnd, data->cocoa_view, prev, prev_view, next, next_view); - - macdrv_set_view_superview(data->cocoa_view, superview, window, prev_view, next_view); - } - else if (data->on_screen) - show_window(data); -} - - /*********************************************************************** * get_region_data * @@ -932,7 +790,7 @@ RGNDATA *get_region_data(HRGN hrgn, HDC hdc_lptodp) */ static void sync_client_view_position(struct macdrv_win_data *data) { - if (data->cocoa_view != data->client_cocoa_view) + if (data->client_cocoa_view) { RECT rect = data->rects.client; OffsetRect(&rect, -data->rects.visible.left, -data->rects.visible.top); @@ -950,7 +808,6 @@ static void sync_client_view_position(struct macdrv_win_data *data) static void sync_window_position(struct macdrv_win_data *data, UINT swp_flags, const struct window_rects *old_rects) { CGRect frame = cgrect_from_rect(data->rects.visible); - BOOL force_z_order = FALSE;
if (data->cocoa_window) { @@ -962,30 +819,6 @@ static void sync_window_position(struct macdrv_win_data *data, UINT swp_flags, c
macdrv_set_cocoa_window_frame(data->cocoa_window, &frame); } - else - { - BOOL were_equal = (data->cocoa_view == data->client_cocoa_view); - BOOL now_equal = EqualRect(&data->rects.visible, &data->rects.client); - - if (were_equal && !now_equal) - { - data->cocoa_view = macdrv_create_view(frame); - macdrv_set_view_hidden(data->cocoa_view, !data->on_screen); - macdrv_set_view_superview(data->client_cocoa_view, data->cocoa_view, NULL, NULL, NULL); - macdrv_set_view_hidden(data->client_cocoa_view, FALSE); - force_z_order = TRUE; - } - else if (!were_equal && now_equal) - { - macdrv_dispose_view(data->cocoa_view); - data->cocoa_view = data->client_cocoa_view; - macdrv_set_view_hidden(data->cocoa_view, !data->on_screen); - macdrv_set_view_frame(data->cocoa_view, frame); - force_z_order = TRUE; - } - else if (!EqualRect(&data->rects.visible, &old_rects->visible)) - macdrv_set_view_frame(data->cocoa_view, frame); - }
sync_client_view_position(data);
@@ -995,12 +828,11 @@ static void sync_window_position(struct macdrv_win_data *data, UINT swp_flags, c old_rects->window.top - old_rects->visible.top != data->rects.window.top - data->rects.visible.top)) sync_window_region(data, (HRGN)1);
- TRACE("win %p/%p whole_rect %s frame %s\n", data->hwnd, - data->cocoa_window ? (void*)data->cocoa_window : (void*)data->cocoa_view, + TRACE("win %p/%p whole_rect %s frame %s\n", data->hwnd, data->cocoa_window, wine_dbgstr_rect(&data->rects.visible), wine_dbgstr_cgrect(frame));
- if (force_z_order || !(swp_flags & SWP_NOZORDER) || (swp_flags & SWP_SHOWWINDOW)) - sync_window_z_order(data); + if (data->cocoa_window && data->on_screen && (!(swp_flags & SWP_NOZORDER) || (swp_flags & SWP_SHOWWINDOW))) + show_window(data); }
@@ -1377,7 +1209,6 @@ void macdrv_DestroyWindow(HWND hwnd) if (data->drag_event) NtSetEvent(data->drag_event, NULL);
destroy_cocoa_window(data); - destroy_cocoa_view(data); if (data->client_cocoa_view) macdrv_dispose_view(data->client_cocoa_view);
CFDictionaryRemoveValue(win_datas, hwnd); @@ -1450,14 +1281,10 @@ void macdrv_SetParent(HWND hwnd, HWND parent, HWND old_parent) { /* destroy the old Mac window */ destroy_cocoa_window(data); - create_cocoa_view(data); } - - set_cocoa_view_parent(data, parent); } else /* new top level window */ { - destroy_cocoa_view(data); create_cocoa_window(data); } release_win_data(data); @@ -1736,7 +1563,7 @@ void macdrv_WindowPosChanged(HWND hwnd, HWND insert_after, HWND owner_hint, UINT TRACE("win %p/%p new_rects %s style %08x flags %08x surface %p\n", hwnd, data->cocoa_window, debugstr_window_rects(new_rects), new_style, swp_flags, surface);
- if (!data->cocoa_window && !data->cocoa_view) goto done; + if (!data->cocoa_window) goto done;
if (data->on_screen) { @@ -1772,8 +1599,6 @@ void macdrv_WindowPosChanged(HWND hwnd, HWND insert_after, HWND owner_hint, UINT (data->layered || !(NtUserGetWindowLongW( hwnd, GWL_EXSTYLE ) & WS_EX_LAYERED))) show_window(data); } - else if (!data->on_screen) - show_window(data); }
done: