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/nt…
==============================================================================
--- 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/nt…
==============================================================================
--- 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))
{