Commit ee44c7c0 authored by Alexandre Julliard's avatar Alexandre Julliard

user32: Fix coordinates mapping for the desktop window in the explorer process.

parent 654bb4a2
...@@ -740,9 +740,12 @@ BOOL WIN_GetRectangles( HWND hwnd, enum coords_relative relative, RECT *rectWind ...@@ -740,9 +740,12 @@ BOOL WIN_GetRectangles( HWND hwnd, enum coords_relative relative, RECT *rectWind
goto other_process; goto other_process;
} }
win = parent; win = parent;
if (win->parent)
{
OffsetRect( &window_rect, win->rectClient.left, win->rectClient.top ); OffsetRect( &window_rect, win->rectClient.left, win->rectClient.top );
OffsetRect( &client_rect, win->rectClient.left, win->rectClient.top ); OffsetRect( &client_rect, win->rectClient.left, win->rectClient.top );
} }
}
break; break;
} }
if (rectWindow) *rectWindow = window_rect; if (rectWindow) *rectWindow = window_rect;
......
...@@ -445,7 +445,7 @@ static POINT WINPOS_GetWinOffset( HWND hwndFrom, HWND hwndTo, BOOL *mirrored ) ...@@ -445,7 +445,7 @@ static POINT WINPOS_GetWinOffset( HWND hwndFrom, HWND hwndTo, BOOL *mirrored )
mirror_from = TRUE; mirror_from = TRUE;
offset.x += wndPtr->rectClient.right - wndPtr->rectClient.left; offset.x += wndPtr->rectClient.right - wndPtr->rectClient.left;
} }
for (;;) while (wndPtr->parent)
{ {
offset.x += wndPtr->rectClient.left; offset.x += wndPtr->rectClient.left;
offset.y += wndPtr->rectClient.top; offset.y += wndPtr->rectClient.top;
...@@ -460,6 +460,7 @@ static POINT WINPOS_GetWinOffset( HWND hwndFrom, HWND hwndTo, BOOL *mirrored ) ...@@ -460,6 +460,7 @@ static POINT WINPOS_GetWinOffset( HWND hwndFrom, HWND hwndTo, BOOL *mirrored )
goto other_process; goto other_process;
} }
} }
if (wndPtr && wndPtr != WND_DESKTOP) WIN_ReleasePtr( wndPtr );
} }
} }
...@@ -475,7 +476,7 @@ static POINT WINPOS_GetWinOffset( HWND hwndFrom, HWND hwndTo, BOOL *mirrored ) ...@@ -475,7 +476,7 @@ static POINT WINPOS_GetWinOffset( HWND hwndFrom, HWND hwndTo, BOOL *mirrored )
mirror_to = TRUE; mirror_to = TRUE;
offset.x -= wndPtr->rectClient.right - wndPtr->rectClient.left; offset.x -= wndPtr->rectClient.right - wndPtr->rectClient.left;
} }
for (;;) while (wndPtr->parent)
{ {
offset.x -= wndPtr->rectClient.left; offset.x -= wndPtr->rectClient.left;
offset.y -= wndPtr->rectClient.top; offset.y -= wndPtr->rectClient.top;
...@@ -490,6 +491,7 @@ static POINT WINPOS_GetWinOffset( HWND hwndFrom, HWND hwndTo, BOOL *mirrored ) ...@@ -490,6 +491,7 @@ static POINT WINPOS_GetWinOffset( HWND hwndFrom, HWND hwndTo, BOOL *mirrored )
goto other_process; goto other_process;
} }
} }
if (wndPtr && wndPtr != WND_DESKTOP) WIN_ReleasePtr( wndPtr );
} }
} }
......
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