- Implement user32!SwitchToThisWindow by NtUserCallTwoParam TWOPARAM_ROUTINE_SWITCHTOTHISWINDOW.
- Improve user32!CloseWindow with using SetActiveWindow and ShowWindow (synchronized).
CORE-15165
* PROJECT: ReactOS kernel
* PURPOSE: NtUserCallXxx call stubs
* FILE: win32ss/user/ntuser/simplecall.c
- * PROGRAMER: Ge van Geldorp (ge@gse.nl)
+ * PROGRAMERS: Ge van Geldorp (ge@gse.nl)
+ * Katayama Hirofumi MZ (katayama.hirofumi.mz@gmail.com)
*/
#include <win32k.h>
}
case TWOPARAM_ROUTINE_SWITCHTOTHISWINDOW:
- STUB
+ {
+ HWND hwnd = (HWND)Param1;
Ret = 0;
+ Window = UserGetWindowObject(hwnd);
+ if (!Window)
+ {
+ break;
+ }
+ if ((BOOL)Param2)
+ {
+ if (Window->style & WS_MINIMIZE)
+ {
+ UserPostMessage(hwnd, WM_SYSCOMMAND, SC_RESTORE, 0);
+ }
+ }
+ UserSetActiveWindow(Window);
break;
+ }
case TWOPARAM_ROUTINE_SETCARETPOS:
Ret = (DWORD_PTR)co_IntSetCaretPos((int)Param1, (int)Param2);
return (BOOL)NtUserCallTwoParam((DWORD_PTR)hWnd, (DWORD_PTR)Param, TWOPARAM_ROUTINE_ROS_UPDATEUISTATE);
}
+EXTINLINE VOID NtUserxSwitchToThisWindow(HWND hWnd, BOOL bUnknown)
+{
+ NtUserCallTwoParam((DWORD_PTR)hWnd, (DWORD_PTR)bUnknown, TWOPARAM_ROUTINE_SWITCHTOTHISWINDOW);
+}
+
EXTINLINE BOOL NtUserxShowOwnedPopups(HWND hWnd, BOOL fShow)
{
return (BOOL)NtUserCallTwoParam((DWORD_PTR)hWnd, fShow, TWOPARAM_ROUTINE_SHOWOWNEDPOPUPS);
VOID WINAPI
-SwitchToThisWindow(HWND hwnd, BOOL fAltTab)
+SwitchToThisWindow(HWND hwnd, BOOL bUnknown)
{
- HWND hwndFG;
- if (fAltTab)
- {
- if (IsIconic(hwnd))
- PostMessageW(hwnd, WM_SYSCOMMAND, SC_RESTORE, 0);
- SetForegroundWindow(hwnd);
- }
- else
- {
- hwndFG = GetForegroundWindow();
- PostMessageW(hwnd, WM_SYSCOMMAND, SC_RESTORE, 0);
- SetWindowPos(hwnd, hwndFG, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE);
- SetWindowPos(hwndFG, hwnd, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
- }
+ NtUserxSwitchToThisWindow(hwnd, bUnknown);
}
BOOL WINAPI
CloseWindow(HWND hWnd)
{
- return PostMessageW(hWnd, WM_SYSCOMMAND, SC_MINIMIZE, 0);
+ /* NOTE: CloseWindow does minimizes, and doesn't close. */
+ SetActiveWindow(hWnd);
+ return ShowWindow(hWnd, SW_SHOWMINIMIZED);
}
FORCEINLINE