From aaa859c4a6caaa11986f68e17c6e75f4490745d1 Mon Sep 17 00:00:00 2001 From: Filip Navara Date: Mon, 17 May 2004 16:38:58 +0000 Subject: [PATCH] - Fixed Window Class menu handling that I broke with my last patch. svn path=/trunk/; revision=9423 --- reactos/lib/user32/windows/class.c | 6 ++-- reactos/subsys/win32k/include/class.h | 2 +- reactos/subsys/win32k/ntuser/class.c | 52 ++++++++++++++------------- 3 files changed, 31 insertions(+), 29 deletions(-) diff --git a/reactos/lib/user32/windows/class.c b/reactos/lib/user32/windows/class.c index cc42a2e7459..658906fd641 100644 --- a/reactos/lib/user32/windows/class.c +++ b/reactos/lib/user32/windows/class.c @@ -1,4 +1,4 @@ -/* $Id: class.c,v 1.48 2004/05/16 19:31:07 navaraf Exp $ +/* $Id: class.c,v 1.49 2004/05/17 16:38:57 navaraf Exp $ * * COPYRIGHT: See COPYING in the top level directory * PROJECT: ReactOS user32.dll @@ -442,7 +442,7 @@ RegisterClassExA(CONST WNDCLASSEXA *lpwcx) { MenuName.Length = MenuName.MaximumLength = 0; - MenuName.Buffer = (LPWSTR)lpwcx->lpszClassName; + MenuName.Buffer = (LPWSTR)lpwcx->lpszMenuName; } else { RtlCreateUnicodeStringFromAsciiz(&MenuName, lpwcx->lpszMenuName); @@ -515,7 +515,7 @@ RegisterClassExW(CONST WNDCLASSEXW *lpwcx) { MenuName.Length = MenuName.MaximumLength = 0; - MenuName.Buffer = (LPWSTR)lpwcx->lpszClassName; + MenuName.Buffer = (LPWSTR)lpwcx->lpszMenuName; } else { RtlInitUnicodeString(&MenuName, lpwcx->lpszMenuName); diff --git a/reactos/subsys/win32k/include/class.h b/reactos/subsys/win32k/include/class.h index 0a082921fb9..b8a752b6005 100644 --- a/reactos/subsys/win32k/include/class.h +++ b/reactos/subsys/win32k/include/class.h @@ -21,7 +21,7 @@ typedef struct _WNDCLASS_OBJECT HICON hIcon; HCURSOR hCursor; HBRUSH hbrBackground; - PUNICODE_STRING lpszMenuName; + UNICODE_STRING lpszMenuName; RTL_ATOM Atom; HICON hIconSm; BOOL Unicode; diff --git a/reactos/subsys/win32k/ntuser/class.c b/reactos/subsys/win32k/ntuser/class.c index 7d1087e6278..654d364ec40 100644 --- a/reactos/subsys/win32k/ntuser/class.c +++ b/reactos/subsys/win32k/ntuser/class.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: class.c,v 1.54 2004/05/16 19:31:09 navaraf Exp $ +/* $Id: class.c,v 1.55 2004/05/17 16:38:58 navaraf Exp $ * * COPYRIGHT: See COPYING in the top level directory * PROJECT: ReactOS kernel @@ -183,15 +183,10 @@ NtUserGetClassInfo( lpWndClassEx->hIcon = Class->hIcon; lpWndClassEx->hCursor = Class->hCursor; lpWndClassEx->hbrBackground = Class->hbrBackground; - if (Class->lpszMenuName) - { - if (!IS_INTRESOURCE((LPCWSTR)Class->lpszMenuName)) - RtlCopyUnicodeString((PUNICODE_STRING)lpWndClassEx->lpszMenuName, Class->lpszMenuName); - else - lpWndClassEx->lpszMenuName = (LPCWSTR)Class->lpszMenuName; - } + if (Class->lpszMenuName.MaximumLength) + RtlCopyUnicodeString((PUNICODE_STRING)lpWndClassEx->lpszMenuName, &Class->lpszMenuName); else - lpWndClassEx->lpszMenuName = (LPCWSTR)NULL; + lpWndClassEx->lpszMenuName = Class->lpszMenuName.Buffer; lpWndClassEx->lpszClassName = lpClassName; lpWndClassEx->hIconSm = Class->hIconSm; Atom = Class->Atom; @@ -349,12 +344,16 @@ IntCreateClass( } if (MenuName->Length == 0) { - ClassObject->lpszMenuName = (PUNICODE_STRING)MenuName->Buffer; + ClassObject->lpszMenuName.Length = + ClassObject->lpszMenuName.MaximumLength = 0; + ClassObject->lpszMenuName.Buffer = MenuName->Buffer; } else { - ClassObject->lpszMenuName = ExAllocatePoolWithTag(NonPagedPool, sizeof(UNICODE_STRING), TAG_STRING); - RtlCreateUnicodeString(ClassObject->lpszMenuName, MenuName->Buffer); + ClassObject->lpszMenuName.Length = + ClassObject->lpszMenuName.MaximumLength = MenuName->MaximumLength; + ClassObject->lpszMenuName.Buffer = ExAllocatePoolWithTag(PagedPool, ClassObject->lpszMenuName.MaximumLength, TAG_STRING); + RtlCopyUnicodeString(&ClassObject->lpszMenuName, MenuName); } /* Extra class data */ if (ClassObject->cbClsExtra != 0) @@ -516,7 +515,7 @@ IntGetClassLong(struct _WINDOW_OBJECT *WindowObject, ULONG Offset, BOOL Ansi) Ret = (ULONG)WindowObject->Class->hInstance; break; case GCL_MENUNAME: - Ret = (ULONG)WindowObject->Class->lpszMenuName; + Ret = (ULONG)WindowObject->Class->lpszMenuName.Buffer; break; case GCL_STYLE: Ret = WindowObject->Class->style; @@ -558,8 +557,6 @@ NtUserGetClassLong(HWND hWnd, DWORD Offset, BOOL Ansi) void FASTCALL IntSetClassLong(PWINDOW_OBJECT WindowObject, ULONG Offset, LONG dwNewLong, BOOL Ansi) { - PUNICODE_STRING str; - if ((int)Offset >= 0) { DPRINT("SetClassLong(%x, %d, %x)\n", WindowObject->Self, Offset, dwNewLong); @@ -596,16 +593,21 @@ IntSetClassLong(PWINDOW_OBJECT WindowObject, ULONG Offset, LONG dwNewLong, BOOL WindowObject->Class->hInstance = (HINSTANCE)dwNewLong; break; case GCL_MENUNAME: - if (!IS_INTRESOURCE(dwNewLong)) - { - str = ExAllocatePoolWithTag(PagedPool,sizeof(UNICODE_STRING)+((PUNICODE_STRING)dwNewLong)->Length, TAG_STRING); - memcpy(str,(PUNICODE_STRING)dwNewLong,sizeof(UNICODE_STRING)+((PUNICODE_STRING)dwNewLong)->Length); - WindowObject->Class->lpszMenuName = str; - } - else - { - WindowObject->Class->lpszMenuName = (PUNICODE_STRING)dwNewLong; - } + if (WindowObject->Class->lpszMenuName.MaximumLength) + RtlFreeUnicodeString(&WindowObject->Class->lpszMenuName); + if (!IS_INTRESOURCE(dwNewLong)) + { + WindowObject->Class->lpszMenuName.Length = + WindowObject->Class->lpszMenuName.MaximumLength = ((PUNICODE_STRING)dwNewLong)->MaximumLength; + WindowObject->Class->lpszMenuName.Buffer = ExAllocatePoolWithTag(PagedPool, WindowObject->Class->lpszMenuName.MaximumLength, TAG_STRING); + RtlCopyUnicodeString(&WindowObject->Class->lpszMenuName, (PUNICODE_STRING)dwNewLong); + } + else + { + WindowObject->Class->lpszMenuName.Length = + WindowObject->Class->lpszMenuName.MaximumLength = 0; + WindowObject->Class->lpszMenuName.Buffer = (LPWSTR)dwNewLong; + } break; case GCL_STYLE: WindowObject->Class->style = dwNewLong;