Commit 02630988 authored by Alexandre Julliard's avatar Alexandre Julliard

user32: Only pass the new valid rectangle to the server.

parent 52be6f0e
...@@ -2080,6 +2080,7 @@ BOOL set_window_pos( HWND hwnd, HWND insert_after, UINT swp_flags, ...@@ -2080,6 +2080,7 @@ BOOL set_window_pos( HWND hwnd, HWND insert_after, UINT swp_flags,
window_rect, client_rect, &visible_rect, &new_surface ); window_rect, client_rect, &visible_rect, &new_surface );
WIN_GetRectangles( hwnd, COORDS_SCREEN, &old_window_rect, NULL ); WIN_GetRectangles( hwnd, COORDS_SCREEN, &old_window_rect, NULL );
if (IsRectEmpty( &valid_rects[0] )) valid_rects = NULL;
if (!(win = WIN_GetPtr( hwnd )) || win == WND_DESKTOP || win == WND_OTHER_PROCESS) if (!(win = WIN_GetPtr( hwnd )) || win == WND_DESKTOP || win == WND_OTHER_PROCESS)
{ {
...@@ -2104,11 +2105,10 @@ BOOL set_window_pos( HWND hwnd, HWND insert_after, UINT swp_flags, ...@@ -2104,11 +2105,10 @@ BOOL set_window_pos( HWND hwnd, HWND insert_after, UINT swp_flags,
req->client.top = client_rect->top; req->client.top = client_rect->top;
req->client.right = client_rect->right; req->client.right = client_rect->right;
req->client.bottom = client_rect->bottom; req->client.bottom = client_rect->bottom;
if (!EqualRect( window_rect, &visible_rect ) || !IsRectEmpty( &valid_rects[0] )) if (!EqualRect( window_rect, &visible_rect ) || valid_rects)
{ {
wine_server_add_data( req, &visible_rect, sizeof(visible_rect) ); wine_server_add_data( req, &visible_rect, sizeof(visible_rect) );
if (!IsRectEmpty( &valid_rects[0] )) if (valid_rects) wine_server_add_data( req, valid_rects, sizeof(*valid_rects) );
wine_server_add_data( req, valid_rects, 2 * sizeof(*valid_rects) );
} }
if (new_surface) req->paint_flags |= SET_WINPOS_PAINT_SURFACE; if (new_surface) req->paint_flags |= SET_WINPOS_PAINT_SURFACE;
if (win->pixel_format) req->paint_flags |= SET_WINPOS_PIXEL_FORMAT; if (win->pixel_format) req->paint_flags |= SET_WINPOS_PIXEL_FORMAT;
...@@ -2155,7 +2155,7 @@ BOOL set_window_pos( HWND hwnd, HWND insert_after, UINT swp_flags, ...@@ -2155,7 +2155,7 @@ BOOL set_window_pos( HWND hwnd, HWND insert_after, UINT swp_flags,
register_window_surface( old_surface, new_surface ); register_window_surface( old_surface, new_surface );
if (old_surface) if (old_surface)
{ {
if (!IsRectEmpty( valid_rects )) if (valid_rects)
{ {
move_window_bits( hwnd, old_surface, new_surface, &visible_rect, move_window_bits( hwnd, old_surface, new_surface, &visible_rect,
&old_visible_rect, window_rect, valid_rects ); &old_visible_rect, window_rect, valid_rects );
...@@ -2165,7 +2165,7 @@ BOOL set_window_pos( HWND hwnd, HWND insert_after, UINT swp_flags, ...@@ -2165,7 +2165,7 @@ BOOL set_window_pos( HWND hwnd, HWND insert_after, UINT swp_flags,
} }
else if (surface_win && surface_win != hwnd) else if (surface_win && surface_win != hwnd)
{ {
if (!IsRectEmpty( valid_rects )) if (valid_rects)
{ {
RECT rects[2]; RECT rects[2];
int x_offset = old_visible_rect.left - visible_rect.left; int x_offset = old_visible_rect.left - visible_rect.left;
......
...@@ -1653,7 +1653,7 @@ static struct region *expose_window( struct window *win, const rectangle_t *old_ ...@@ -1653,7 +1653,7 @@ static struct region *expose_window( struct window *win, const rectangle_t *old_
static void set_window_pos( struct window *win, struct window *previous, static void set_window_pos( struct window *win, struct window *previous,
unsigned int swp_flags, const rectangle_t *window_rect, unsigned int swp_flags, const rectangle_t *window_rect,
const rectangle_t *client_rect, const rectangle_t *visible_rect, const rectangle_t *client_rect, const rectangle_t *visible_rect,
const rectangle_t *valid_rects ) const rectangle_t *valid_rect )
{ {
struct region *old_vis_rgn = NULL, *exposed_rgn = NULL; struct region *old_vis_rgn = NULL, *exposed_rgn = NULL;
const rectangle_t old_window_rect = win->window_rect; const rectangle_t old_window_rect = win->window_rect;
...@@ -1767,8 +1767,7 @@ static void set_window_pos( struct window *win, struct window *previous, ...@@ -1767,8 +1767,7 @@ static void set_window_pos( struct window *win, struct window *previous,
client_rect->right - old_client_rect.right != x_offset || client_rect->right - old_client_rect.right != x_offset ||
client_rect->top - old_client_rect.top != y_offset || client_rect->top - old_client_rect.top != y_offset ||
client_rect->bottom - old_client_rect.bottom != y_offset || client_rect->bottom - old_client_rect.bottom != y_offset ||
!valid_rects || !valid_rect || memcmp( valid_rect, client_rect, sizeof(*client_rect) ));
memcmp( &valid_rects[0], client_rect, sizeof(*client_rect) ));
} }
if (frame_changed || client_changed) if (frame_changed || client_changed)
...@@ -1776,13 +1775,13 @@ static void set_window_pos( struct window *win, struct window *previous, ...@@ -1776,13 +1775,13 @@ static void set_window_pos( struct window *win, struct window *previous,
struct region *win_rgn = old_vis_rgn; /* reuse previous region */ struct region *win_rgn = old_vis_rgn; /* reuse previous region */
set_region_rect( win_rgn, window_rect ); set_region_rect( win_rgn, window_rect );
if (valid_rects) if (valid_rect)
{ {
/* subtract the valid portion of client rect from the total region */ /* subtract the valid portion of client rect from the total region */
struct region *tmp = create_empty_region(); struct region *tmp = create_empty_region();
if (tmp) if (tmp)
{ {
set_region_rect( tmp, &valid_rects[0] ); set_region_rect( tmp, valid_rect );
/* subtract update region since invalid parts of the valid rect won't be copied */ /* subtract update region since invalid parts of the valid rect won't be copied */
if (win->update_region) if (win->update_region)
{ {
...@@ -2313,16 +2312,13 @@ DECL_HANDLER(set_window_pos) ...@@ -2313,16 +2312,13 @@ DECL_HANDLER(set_window_pos)
win->paint_flags = (win->paint_flags & ~PAINT_CLIENT_FLAGS) | (req->paint_flags & PAINT_CLIENT_FLAGS); win->paint_flags = (win->paint_flags & ~PAINT_CLIENT_FLAGS) | (req->paint_flags & PAINT_CLIENT_FLAGS);
if (win->paint_flags & PAINT_HAS_PIXEL_FORMAT) update_pixel_format_flags( win ); if (win->paint_flags & PAINT_HAS_PIXEL_FORMAT) update_pixel_format_flags( win );
if (get_req_data_size() >= 3 * sizeof(rectangle_t)) if (get_req_data_size() >= 2 * sizeof(rectangle_t))
{ {
rectangle_t valid_rects[2]; rectangle_t valid_rect;
memcpy( valid_rects, (const rectangle_t *)get_req_data() + 1, 2 * sizeof(rectangle_t) ); memcpy( &valid_rect, (const rectangle_t *)get_req_data() + 1, sizeof(rectangle_t) );
if (win->parent && win->parent->ex_style & WS_EX_LAYOUTRTL) if (win->parent && win->parent->ex_style & WS_EX_LAYOUTRTL)
{ mirror_rect( &win->parent->client_rect, &valid_rect );
mirror_rect( &win->parent->client_rect, &valid_rects[0] ); set_window_pos( win, previous, flags, &window_rect, &client_rect, &visible_rect, &valid_rect );
mirror_rect( &win->parent->client_rect, &valid_rects[1] );
}
set_window_pos( win, previous, flags, &window_rect, &client_rect, &visible_rect, valid_rects );
} }
else set_window_pos( win, previous, flags, &window_rect, &client_rect, &visible_rect, NULL ); else set_window_pos( win, previous, flags, &window_rect, &client_rect, &visible_rect, NULL );
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment