From 940927a689683aa46adc400a590fab76b1ee8fe9 Mon Sep 17 00:00:00 2001 From: James Tabor Date: Tue, 27 Nov 2007 20:56:18 +0000 Subject: [PATCH] Correct the offset in NtUserGetMenuItemRect. It was unfinished. svn path=/trunk/; revision=30824 --- reactos/subsystems/win32/win32k/ntuser/menu.c | 27 ++++++++++++++----- 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/reactos/subsystems/win32/win32k/ntuser/menu.c b/reactos/subsystems/win32/win32k/ntuser/menu.c index 93fc988cff3..b77a4c5e3da 100644 --- a/reactos/subsystems/win32/win32k/ntuser/menu.c +++ b/reactos/subsystems/win32/win32k/ntuser/menu.c @@ -1947,7 +1947,8 @@ NtUserGetMenuItemRect( LPRECT lprcItem) { ROSMENUINFO mi; - HWND referenceHwnd; + PWINDOW_OBJECT ReferenceWnd; + LONG XMove, YMove; RECT Rect; NTSTATUS Status; PMENU_OBJECT Menu; @@ -1967,20 +1968,34 @@ NtUserGetMenuItemRect( else RETURN(FALSE); - referenceHwnd = hWnd; - if(!hWnd) { if(!UserMenuInfo(Menu, &mi, FALSE)) RETURN( FALSE); if(mi.Wnd == 0) RETURN( FALSE); - referenceHwnd = mi.Wnd; /* Okay we found it, so now what do we do? */ } - if (lprcItem == NULL) - RETURN( FALSE); + if (lprcItem == NULL) RETURN( FALSE); + if (!(ReferenceWnd = UserGetWindowObject(mi.Wnd))) RETURN( FALSE); + + if(MenuItem->fType & MF_POPUP) + { + XMove = ReferenceWnd->Wnd->ClientRect.left; + YMove = ReferenceWnd->Wnd->ClientRect.top; + } + else + { + XMove = ReferenceWnd->Wnd->WindowRect.left; + YMove = ReferenceWnd->Wnd->WindowRect.top; + } + + Rect.left += XMove; + Rect.Top += YMove; + Rect.right += XMove; + Rect.bottom += YMove; + Status = MmCopyToCaller(lprcItem, &Rect, sizeof(RECT)); if (! NT_SUCCESS(Status)) {