diff --git a/reactos/include/win32k/ntuser.h b/reactos/include/win32k/ntuser.h index 46a97ce6451..35daec18788 100644 --- a/reactos/include/win32k/ntuser.h +++ b/reactos/include/win32k/ntuser.h @@ -257,13 +257,13 @@ NtUserCreateAcceleratorTable( LPACCEL Entries, SIZE_T EntriesCount); -DWORD +BOOL STDCALL NtUserCreateCaret( - DWORD Unknown0, - DWORD Unknown1, - DWORD Unknown2, - DWORD Unknown3); + HWND hWnd, + HBITMAP hBitmap, + int nWidth, + int nHeight); HDESK STDCALL @@ -571,14 +571,14 @@ STDCALL NtUserGetAsyncKeyState( DWORD Unknown0); -DWORD +UINT STDCALL NtUserGetCaretBlinkTime(VOID); -DWORD +BOOL STDCALL NtUserGetCaretPos( - DWORD Unknown0); + LPPOINT lpPoint); DWORD STDCALL NtUserGetClassInfo(HINSTANCE hInst, @@ -888,10 +888,10 @@ NtUserGetWOWClass( DWORD Unknown0, DWORD Unknown1); -DWORD +BOOL STDCALL NtUserHideCaret( - DWORD Unknown0); + HWND hWnd); BOOL STDCALL @@ -1599,10 +1599,10 @@ NtUserSetWinEventHook( DWORD Unknown6, DWORD Unknown7); -DWORD +BOOL STDCALL NtUserShowCaret( - DWORD Unknown0); + HWND hWnd); DWORD STDCALL diff --git a/reactos/subsys/win32k/makefile b/reactos/subsys/win32k/makefile index 3aeb93d6303..27432179215 100644 --- a/reactos/subsys/win32k/makefile +++ b/reactos/subsys/win32k/makefile @@ -1,4 +1,4 @@ -# $Id: makefile,v 1.78 2003/08/13 22:43:15 royce Exp $ +# $Id: makefile,v 1.79 2003/10/15 20:48:19 weiden Exp $ PATH_TO_TOP = ../.. @@ -48,7 +48,7 @@ MISC_OBJECTS = misc/driver.o misc/error.o misc/math.o misc/object.o LDR_OBJECTS = ldr/loader.o -NTUSER_OBJECTS = ntuser/class.o ntuser/guicheck.o ntuser/hook.o \ +NTUSER_OBJECTS = ntuser/caret.o ntuser/class.o ntuser/guicheck.o ntuser/hook.o \ ntuser/message.o ntuser/msgqueue.o ntuser/stubs.o \ ntuser/userobj.o ntuser/window.o ntuser/winsta.o ntuser/menu.o \ ntuser/input.o ntuser/keyboard.o ntuser/callback.o \ diff --git a/reactos/subsys/win32k/ntuser/caret.c b/reactos/subsys/win32k/ntuser/caret.c new file mode 100644 index 00000000000..9758caee07b --- /dev/null +++ b/reactos/subsys/win32k/ntuser/caret.c @@ -0,0 +1,71 @@ +/* $Id: caret.c,v 1.1 2003/10/15 20:48:19 weiden Exp $ + * + * COPYRIGHT: See COPYING in the top level directory + * PROJECT: ReactOS kernel + * PURPOSE: Caret functions + * FILE: subsys/win32k/ntuser/caret.c + * PROGRAMER: Thomas Weidenmueller (w3seek@users.sourceforge.net) + * REVISION HISTORY: + * 10/15/2003 Created + */ + +#include +#include +#include +#include + +#define NDEBUG +#include + +BOOL +STDCALL +NtUserCreateCaret( + HWND hWnd, + HBITMAP hBitmap, + int nWidth, + int nHeight) +{ + UNIMPLEMENTED + + return 0; +} + +UINT +STDCALL +NtUserGetCaretBlinkTime(VOID) +{ + UNIMPLEMENTED + + return 0; +} + +BOOL +STDCALL +NtUserGetCaretPos( + LPPOINT lpPoint) +{ + UNIMPLEMENTED + + return 0; +} + +BOOL +STDCALL +NtUserHideCaret( + HWND hWnd) +{ + UNIMPLEMENTED + + return 0; +} + +BOOL +STDCALL +NtUserShowCaret( + HWND hWnd) +{ + UNIMPLEMENTED + + return 0; +} + diff --git a/reactos/subsys/win32k/ntuser/stubs.c b/reactos/subsys/win32k/ntuser/stubs.c index 2c574174284..b61de76cf57 100644 --- a/reactos/subsys/win32k/ntuser/stubs.c +++ b/reactos/subsys/win32k/ntuser/stubs.c @@ -1,4 +1,4 @@ -/* $Id: stubs.c,v 1.29 2003/10/09 06:13:05 gvg Exp $ +/* $Id: stubs.c,v 1.30 2003/10/15 20:48:19 weiden Exp $ * * COPYRIGHT: See COPYING in the top level directory * PROJECT: ReactOS kernel @@ -214,19 +214,6 @@ NtUserCreateAcceleratorTable( return 0; } -DWORD -STDCALL -NtUserCreateCaret( - DWORD Unknown0, - DWORD Unknown1, - DWORD Unknown2, - DWORD Unknown3) -{ - UNIMPLEMENTED - - return 0; -} - DWORD STDCALL NtUserCreateLocalMemHandle( @@ -470,25 +457,6 @@ NtUserGetAsyncKeyState( return 0; } -DWORD -STDCALL -NtUserGetCaretBlinkTime(VOID) -{ - UNIMPLEMENTED - - return 0; -} - -DWORD -STDCALL -NtUserGetCaretPos( - DWORD Unknown0) -{ - UNIMPLEMENTED - - return 0; -} - DWORD STDCALL NtUserGetClipboardData( @@ -711,16 +679,6 @@ NtUserGetUpdateRect( return 0; } -DWORD -STDCALL -NtUserHideCaret( - DWORD Unknown0) -{ - UNIMPLEMENTED - - return 0; -} - DWORD STDCALL NtUserImpersonateDdeClientWindow( @@ -1035,16 +993,6 @@ NtUserSetThreadState( return 0; } -DWORD -STDCALL -NtUserShowCaret( - DWORD Unknown0) -{ - UNIMPLEMENTED - - return 0; -} - DWORD STDCALL NtUserTrackMouseEvent( diff --git a/reactos/subsys/win32k/ntuser/window.c b/reactos/subsys/win32k/ntuser/window.c index 8ca19efcb41..247bb223760 100644 --- a/reactos/subsys/win32k/ntuser/window.c +++ b/reactos/subsys/win32k/ntuser/window.c @@ -16,7 +16,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ -/* $Id: window.c,v 1.112 2003/10/14 18:49:10 navaraf Exp $ +/* $Id: window.c,v 1.113 2003/10/15 20:48:19 weiden Exp $ * * COPYRIGHT: See COPYING in the top level directory * PROJECT: ReactOS kernel @@ -460,19 +460,19 @@ IntGetParent(PWINDOW_OBJECT Wnd) } -HMENU FASTCALL +PMENU_OBJECT FASTCALL IntGetSystemMenu(PWINDOW_OBJECT WindowObject, BOOL bRevert, BOOL RetMenu) { - PMENU_OBJECT MenuObject, NewMenuObject; + PMENU_OBJECT MenuObject, NewMenuObject, ret = NULL; PW32PROCESS W32Process; - HMENU NewMenu, ret = (HMENU)0; + HMENU NewMenu; if(bRevert) { W32Process = PsGetWin32Process(); if(!W32Process->WindowStation) - return (HMENU)0; + return NULL; if(WindowObject->SystemMenu) { @@ -488,15 +488,15 @@ IntGetSystemMenu(PWINDOW_OBJECT WindowObject, BOOL bRevert, BOOL RetMenu) /* clone system menu */ MenuObject = IntGetMenuObject(W32Process->WindowStation->SystemMenuTemplate); if(!MenuObject) - return (HMENU)0; + return NULL; NewMenuObject = IntCloneMenu(MenuObject); if(NewMenuObject) { WindowObject->SystemMenu = NewMenuObject->Self; NewMenuObject->IsSystemMenu = TRUE; - ret = NewMenuObject->Self; - IntReleaseMenuObject(NewMenuObject); + ret = NewMenuObject; + //IntReleaseMenuObject(NewMenuObject); } IntReleaseMenuObject(MenuObject); } @@ -504,29 +504,29 @@ IntGetSystemMenu(PWINDOW_OBJECT WindowObject, BOOL bRevert, BOOL RetMenu) { NewMenu = IntLoadSysMenuTemplate(); if(!NewMenu) - return (HMENU)0; + return NULL; MenuObject = IntGetMenuObject(NewMenu); if(!MenuObject) - return (HMENU)0; + return NULL; NewMenuObject = IntCloneMenu(MenuObject); if(NewMenuObject) { WindowObject->SystemMenu = NewMenuObject->Self; NewMenuObject->IsSystemMenu = TRUE; - ret = NewMenuObject->Self; - IntReleaseMenuObject(NewMenuObject); + ret = NewMenuObject; + //IntReleaseMenuObject(NewMenuObject); } IntDestroyMenuObject(MenuObject, FALSE, TRUE); } if(RetMenu) return ret; else - return (HMENU)0; + return NULL; } else { - return WindowObject->SystemMenu; + return IntGetMenuObject((HMENU)WindowObject->SystemMenu); } } @@ -1185,6 +1185,13 @@ NtUserCreateWindowEx(DWORD dwExStyle, DPRINT("1: Style is now %d\n", WindowObject->Style); SystemMenu = IntGetSystemMenu(WindowObject, TRUE, TRUE); + if(SystemMenu) + { + WindowObject->SystemMenu = SystemMenu->Self; + IntReleaseMenuObject(SystemMenu); + } + else + WindowObject->SystemMenu = (HANDLE)0; WindowObject->x = x; WindowObject->y = y; @@ -1193,10 +1200,6 @@ NtUserCreateWindowEx(DWORD dwExStyle, WindowObject->ContextHelpId = 0; WindowObject->ParentHandle = hWndParent; WindowObject->IDMenu = (UINT)hMenu; - if(SystemMenu) - WindowObject->SystemMenu = SystemMenu->Self; - else - WindowObject->SystemMenu = (HMENU)0; WindowObject->Instance = hInstance; WindowObject->Parameters = lpParam; WindowObject->Self = Handle; @@ -1983,6 +1986,7 @@ NtUserGetSystemMenu( { HMENU res = (HMENU)0; PWINDOW_OBJECT WindowObject; + PMENU_OBJECT MenuObject, SubMenuObject; WindowObject = IntGetWindowObject((HWND)hWnd); if(!WindowObject) { @@ -1990,7 +1994,24 @@ NtUserGetSystemMenu( return (HMENU)0; } - res = IntGetSystemMenu(WindowObject, bRevert, FALSE); + MenuObject = IntGetSystemMenu(WindowObject, bRevert, FALSE); + if(MenuObject) + { + /* return the handle of the first submenu */ + ExAcquireFastMutexUnsafe(&MenuObject->MenuItemsLock); + if(MenuObject->MenuItemList) + { + res = MenuObject->MenuItemList->hSubMenu; + /* test if submenu is a valid menu */ + SubMenuObject = IntGetMenuObject(res); + if(SubMenuObject) + IntReleaseMenuObject(SubMenuObject); + else + res = (HMENU)0; + } + ExReleaseFastMutexUnsafe(&MenuObject->MenuItemsLock); + IntReleaseMenuObject(MenuObject); + } IntReleaseWindowObject(WindowObject); return res;