winex11: Don't allocate a window surface for off-screen windows.

Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Alexandre Julliard 2018-01-22 12:45:35 +01:00
parent ae49bc94b4
commit 5ef349e45f
1 changed files with 10 additions and 10 deletions

View File

@ -2151,17 +2151,17 @@ done:
} }
static inline RECT get_surface_rect( const RECT *visible_rect ) static inline BOOL get_surface_rect( const RECT *visible_rect, RECT *surface_rect )
{ {
RECT rect = get_virtual_screen_rect(); *surface_rect = get_virtual_screen_rect();
IntersectRect( &rect, &rect, visible_rect ); if (!IntersectRect( surface_rect, surface_rect, visible_rect )) return FALSE;
OffsetRect( &rect, -visible_rect->left, -visible_rect->top ); OffsetRect( surface_rect, -visible_rect->left, -visible_rect->top );
rect.left &= ~31; surface_rect->left &= ~31;
rect.top &= ~31; surface_rect->top &= ~31;
rect.right = max( rect.left + 32, (rect.right + 31) & ~31 ); surface_rect->right = max( surface_rect->left + 32, (surface_rect->right + 31) & ~31 );
rect.bottom = max( rect.top + 32, (rect.bottom + 31) & ~31 ); surface_rect->bottom = max( surface_rect->top + 32, (surface_rect->bottom + 31) & ~31 );
return rect; return TRUE;
} }
@ -2198,6 +2198,7 @@ void CDECL X11DRV_WindowPosChanging( HWND hwnd, HWND insert_after, UINT swp_flag
if (!data->whole_window && !data->embedded) goto done; if (!data->whole_window && !data->embedded) goto done;
if (swp_flags & SWP_HIDEWINDOW) goto done; if (swp_flags & SWP_HIDEWINDOW) goto done;
if (data->vis.visualid != default_visual.visualid) goto done; if (data->vis.visualid != default_visual.visualid) goto done;
if (!get_surface_rect( visible_rect, &surface_rect )) goto done;
if (*surface) window_surface_release( *surface ); if (*surface) window_surface_release( *surface );
*surface = NULL; /* indicate that we want to draw directly to the window */ *surface = NULL; /* indicate that we want to draw directly to the window */
@ -2207,7 +2208,6 @@ void CDECL X11DRV_WindowPosChanging( HWND hwnd, HWND insert_after, UINT swp_flag
if (data->client_window) goto done; if (data->client_window) goto done;
if (!client_side_graphics && !layered) goto done; if (!client_side_graphics && !layered) goto done;
surface_rect = get_surface_rect( visible_rect );
if (data->surface) if (data->surface)
{ {
if (EqualRect( &data->surface->rect, &surface_rect )) if (EqualRect( &data->surface->rect, &surface_rect ))