Author: jimtabor Date: Fri Jan 2 22:02:54 2009 New Revision: 38518
URL: http://svn.reactos.org/svn/reactos?rev=38518&view=rev Log: - Removed SEH abuse and add notes for the hook code, in NtUserDefSetText. - Update NtUserCallHwndLock subfunctions.
Modified: trunk/reactos/subsystems/win32/win32k/ntuser/simplecall.c trunk/reactos/subsystems/win32/win32k/ntuser/window.c
Modified: trunk/reactos/subsystems/win32/win32k/ntuser/simplecall.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/ntu... ============================================================================== --- trunk/reactos/subsystems/win32/win32k/ntuser/simplecall.c [iso-8859-1] (original) +++ trunk/reactos/subsystems/win32/win32k/ntuser/simplecall.c [iso-8859-1] Fri Jan 2 22:02:54 2009 @@ -713,7 +713,7 @@ DPRINT("Enter NtUserCallHwndLock\n"); UserEnterExclusive();
- if (!(Window = UserGetWindowObject(hWnd))) + if (!(Window = UserGetWindowObject(hWnd)) || !Window->Wnd) { RETURN( FALSE); } @@ -742,15 +742,45 @@ Menu->MenuInfo.WndOwner = hWnd; Menu->MenuInfo.Height = 0;
- co_WinPosSetWindowPos(Window, 0, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE | - SWP_NOACTIVATE | SWP_NOZORDER | SWP_FRAMECHANGED ); + co_WinPosSetWindowPos( Window, + HWND_DESKTOP, + 0,0,0,0, + SWP_NOSIZE| + SWP_NOMOVE| + SWP_NOZORDER| + SWP_NOACTIVATE| + SWP_FRAMECHANGED );
Ret = TRUE; break; }
case HWNDLOCK_ROUTINE_REDRAWFRAME: - /* FIXME */ + co_WinPosSetWindowPos( Window, + HWND_DESKTOP, + 0,0,0,0, + SWP_NOSIZE| + SWP_NOMOVE| + SWP_NOZORDER| + SWP_NOACTIVATE| + SWP_FRAMECHANGED ); + Ret = TRUE; + break; + + case HWNDLOCK_ROUTINE_REDRAWFRAMEANDHOOK: + co_WinPosSetWindowPos( Window, + HWND_DESKTOP, + 0,0,0,0, + SWP_NOSIZE| + SWP_NOMOVE| + SWP_NOZORDER| + SWP_NOACTIVATE| + SWP_FRAMECHANGED ); + if (!IntGetOwner(Window) && !IntGetParent(Window)) + { + co_IntShellHookNotify(HSHELL_REDRAW, (LPARAM) hWnd); + } + Ret = TRUE; break;
case HWNDLOCK_ROUTINE_SETFOREGROUNDWINDOW: @@ -758,7 +788,7 @@ break;
case HWNDLOCK_ROUTINE_UPDATEWINDOW: - /* FIXME */ + Ret = co_UserRedrawWindow( Window, NULL, 0, RDW_UPDATENOW | RDW_ALLCHILDREN); break; }
Modified: trunk/reactos/subsystems/win32/win32k/ntuser/window.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/ntu... ============================================================================== --- trunk/reactos/subsystems/win32/win32k/ntuser/window.c [iso-8859-1] (original) +++ trunk/reactos/subsystems/win32/win32k/ntuser/window.c [iso-8859-1] Fri Jan 2 22:02:54 2009 @@ -4569,57 +4569,47 @@ } Wnd = Window->Wnd;
- if(SafeText.Length != 0) - { - _SEH2_TRY - { - if (Wnd->WindowName.MaximumLength > 0 && - SafeText.Length <= Wnd->WindowName.MaximumLength - sizeof(UNICODE_NULL)) - { - ASSERT(Wnd->WindowName.Buffer != NULL); - - Wnd->WindowName.Length = SafeText.Length; - Wnd->WindowName.Buffer[SafeText.Length / sizeof(WCHAR)] = L'\0'; - RtlCopyMemory(Wnd->WindowName.Buffer, - SafeText.Buffer, - SafeText.Length); - } - else - { - PWCHAR buf; - Wnd->WindowName.MaximumLength = Wnd->WindowName.Length = 0; - buf = Wnd->WindowName.Buffer; - Wnd->WindowName.Buffer = NULL; - if (buf != NULL) - { - DesktopHeapFree(Wnd->pdesktop, - buf); - } - - Wnd->WindowName.Buffer = DesktopHeapAlloc(Wnd->pdesktop, - SafeText.Length + sizeof(UNICODE_NULL)); - if (Wnd->WindowName.Buffer != NULL) - { - Wnd->WindowName.Buffer[SafeText.Length / sizeof(WCHAR)] = L'\0'; - RtlCopyMemory(Wnd->WindowName.Buffer, - SafeText.Buffer, - SafeText.Length); - Wnd->WindowName.MaximumLength = SafeText.Length + sizeof(UNICODE_NULL); - Wnd->WindowName.Length = SafeText.Length; - } - else - { - SetLastWin32Error(ERROR_NOT_ENOUGH_MEMORY); - Ret = FALSE; - } - } - } - _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) - { - SetLastNtError(_SEH2_GetExceptionCode()); - Ret = FALSE; - } - _SEH2_END; + if (SafeText.Length != 0) + { + if (Wnd->WindowName.MaximumLength > 0 && + SafeText.Length <= Wnd->WindowName.MaximumLength - sizeof(UNICODE_NULL)) + { + ASSERT(Wnd->WindowName.Buffer != NULL); + + Wnd->WindowName.Length = SafeText.Length; + Wnd->WindowName.Buffer[SafeText.Length / sizeof(WCHAR)] = L'\0'; + RtlCopyMemory(Wnd->WindowName.Buffer, + SafeText.Buffer, + SafeText.Length); + } + else + { + PWCHAR buf; + Wnd->WindowName.MaximumLength = Wnd->WindowName.Length = 0; + buf = Wnd->WindowName.Buffer; + Wnd->WindowName.Buffer = NULL; + if (buf != NULL) + { + DesktopHeapFree(Wnd->pdesktop, buf); + } + + Wnd->WindowName.Buffer = DesktopHeapAlloc(Wnd->pdesktop, + SafeText.Length + sizeof(UNICODE_NULL)); + if (Wnd->WindowName.Buffer != NULL) + { + Wnd->WindowName.Buffer[SafeText.Length / sizeof(WCHAR)] = L'\0'; + RtlCopyMemory(Wnd->WindowName.Buffer, + SafeText.Buffer, + SafeText.Length); + Wnd->WindowName.MaximumLength = SafeText.Length + sizeof(UNICODE_NULL); + Wnd->WindowName.Length = SafeText.Length; + } + else + { + SetLastWin32Error(ERROR_NOT_ENOUGH_MEMORY); + Ret = FALSE; + } + } } else { @@ -4628,6 +4618,9 @@ Wnd->WindowName.Buffer[0] = L'\0'; }
+ // HAX! FIXME! Windows does not do this in here! + // In User32, these are called after: NotifyWinEvent EVENT_OBJECT_NAMECHANGE than + // RepaintButton, StaticRepaint, NtUserCallHwndLock HWNDLOCK_ROUTINE_REDRAWFRAMEANDHOOK, etc. /* Send shell notifications */ if (!IntGetOwner(Window) && !IntGetParent(Window)) {