server: Don't clip update regions to the desktop window.

Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Alexandre Julliard 2018-07-05 12:48:13 +02:00
parent d3876ca84e
commit 8cfac3b218
2 changed files with 10 additions and 17 deletions

View File

@ -4760,7 +4760,7 @@ static void test_showwindow(void)
flush_sequence();
ShowWindow(hwnd, SW_SHOWMAXIMIZED);
ok_sequence(WmShowMaxPopupResizedSeq_todo,
"ShowWindow(SW_SHOWMAXIMIZED):invisible maximized and resized popup TODO", TRUE);
"ShowWindow(SW_SHOWMAXIMIZED):invisible maximized and resized popup TODO", FALSE);
DestroyWindow(hwnd);
flush_sequence();
@ -5339,7 +5339,7 @@ static void test_messages(void)
hwnd = CreateWindowExA(0, "TestWindowClass", "Test Popup", WS_POPUP | WS_VISIBLE,
-10, -10, 10000, 10000, NULL, 0, 0, NULL );
ok (hwnd != 0, "Failed to create popup window\n");
ok_sequence(WmShowPopupExtremeLocationSeq, "RedrawWindow:show_popup_extreme_location", TRUE);
ok_sequence(WmShowPopupExtremeLocationSeq, "RedrawWindow:show_popup_extreme_location", FALSE);
DestroyWindow(hwnd);

View File

@ -1141,27 +1141,20 @@ struct window_class* get_window_class( user_handle_t window )
/* the returned rectangle is in window coordinates; return 0 if rectangle is empty */
static int get_window_visible_rect( struct window *win, rectangle_t *rect, int frame )
{
int offset_x = 0, offset_y = 0;
if (!(win->style & WS_VISIBLE)) return 0;
int offset_x = win->window_rect.left, offset_y = win->window_rect.top;
*rect = frame ? win->window_rect : win->client_rect;
if (!is_desktop_window(win))
{
offset_x = win->window_rect.left;
offset_y = win->window_rect.top;
}
while (win->parent)
if (!(win->style & WS_VISIBLE)) return 0;
if (is_desktop_window( win )) return 1;
while (!is_desktop_window( win->parent ))
{
win = win->parent;
if (!(win->style & WS_VISIBLE) || win->style & WS_MINIMIZE) return 0;
if (!is_desktop_window(win))
{
offset_x += win->client_rect.left;
offset_y += win->client_rect.top;
offset_rect( rect, win->client_rect.left, win->client_rect.top );
}
offset_x += win->client_rect.left;
offset_y += win->client_rect.top;
offset_rect( rect, win->client_rect.left, win->client_rect.top );
if (!intersect_rect( rect, rect, &win->client_rect )) return 0;
if (!intersect_rect( rect, rect, &win->window_rect )) return 0;
}