mirror of
git://source.winehq.org/git/wine.git
synced 2024-11-02 20:18:28 +00:00
We still need to look for the top parent that doesn't clip siblings in
GetDC because of the X window clipping.
This commit is contained in:
parent
642180d3c9
commit
bf5470c00e
1 changed files with 25 additions and 10 deletions
|
@ -416,21 +416,36 @@ BOOL X11DRV_GetDC( HWND hwnd, HDC hdc, HRGN hrgn, DWORD flags )
|
||||||
|
|
||||||
if (top != hwnd)
|
if (top != hwnd)
|
||||||
{
|
{
|
||||||
|
/* find the top most parent that doesn't clip siblings */
|
||||||
|
HWND clipping_parent = 0;
|
||||||
|
HWND *list = WIN_ListParents( hwnd );
|
||||||
|
if (list)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
for (i = 0; list[i] != top; i++)
|
||||||
|
{
|
||||||
|
LONG style = GetWindowLongW( list[i], GWL_STYLE );
|
||||||
|
if (!(style & WS_CLIPSIBLINGS)) clipping_parent = list[i];
|
||||||
|
}
|
||||||
|
HeapFree( GetProcessHeap(), 0, list );
|
||||||
|
}
|
||||||
|
if (clipping_parent)
|
||||||
|
clipping_parent = GetAncestor( clipping_parent, GA_PARENT );
|
||||||
|
else if (!(flags & DCX_CLIPSIBLINGS) || (flags & DCX_WINDOW))
|
||||||
|
clipping_parent = GetAncestor( hwnd, GA_PARENT );
|
||||||
|
else
|
||||||
|
clipping_parent = hwnd;
|
||||||
|
|
||||||
|
escape.org.x = escape.org.y = 0;
|
||||||
escape.drawable_org.x = escape.drawable_org.y = 0;
|
escape.drawable_org.x = escape.drawable_org.y = 0;
|
||||||
if (flags & (DCX_WINDOW|DCX_PARENTCLIP))
|
if (flags & DCX_WINDOW)
|
||||||
{
|
{
|
||||||
escape.org.x = win->rectWindow.left - win->rectClient.left;
|
escape.org.x = win->rectWindow.left - win->rectClient.left;
|
||||||
escape.org.y = win->rectWindow.top - win->rectClient.top;
|
escape.org.y = win->rectWindow.top - win->rectClient.top;
|
||||||
MapWindowPoints( hwnd, top, &escape.org, 1 );
|
|
||||||
MapWindowPoints( top, 0, &escape.drawable_org, 1 );
|
|
||||||
escape.drawable = X11DRV_get_client_window( top );
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
escape.org.x = escape.org.y = 0;
|
|
||||||
MapWindowPoints( hwnd, 0, &escape.drawable_org, 1 );
|
|
||||||
escape.drawable = X11DRV_get_client_window( hwnd );
|
|
||||||
}
|
}
|
||||||
|
MapWindowPoints( hwnd, clipping_parent, &escape.org, 1 );
|
||||||
|
MapWindowPoints( clipping_parent, 0, &escape.drawable_org, 1 );
|
||||||
|
escape.drawable = X11DRV_get_client_window( clipping_parent );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue