-remove hotkey lock -remove dc list lock -simplify/rework refcounting -remove keyboard queue state lock -convert some functions into taking pointerargs, not handles Modified: trunk/reactos/subsys/win32k/include/cursoricon.h Modified: trunk/reactos/subsys/win32k/include/dce.h Modified: trunk/reactos/subsys/win32k/include/hotkey.h Modified: trunk/reactos/subsys/win32k/include/userfuncs.h Modified: trunk/reactos/subsys/win32k/include/window.h Modified: trunk/reactos/subsys/win32k/include/winpos.h Modified: trunk/reactos/subsys/win32k/include/winsta.h Modified: trunk/reactos/subsys/win32k/ntuser/accelerator.c Modified: trunk/reactos/subsys/win32k/ntuser/caret.c Modified: trunk/reactos/subsys/win32k/ntuser/class.c Modified: trunk/reactos/subsys/win32k/ntuser/cursoricon.c Modified: trunk/reactos/subsys/win32k/ntuser/focus.c Modified: trunk/reactos/subsys/win32k/ntuser/hotkey.c Modified: trunk/reactos/subsys/win32k/ntuser/input.c Modified: trunk/reactos/subsys/win32k/ntuser/keyboard.c Modified: trunk/reactos/subsys/win32k/ntuser/menu.c Modified: trunk/reactos/subsys/win32k/ntuser/metric.c Modified: trunk/reactos/subsys/win32k/ntuser/misc.c Modified: trunk/reactos/subsys/win32k/ntuser/monitor.c Modified: trunk/reactos/subsys/win32k/ntuser/object.c Modified: trunk/reactos/subsys/win32k/ntuser/scrollbar.c Modified: trunk/reactos/subsys/win32k/ntuser/windc.c Modified: trunk/reactos/subsys/win32k/ntuser/window.c Modified: trunk/reactos/subsys/win32k/ntuser/winpos.c _____
Modified: trunk/reactos/subsys/win32k/include/cursoricon.h --- trunk/reactos/subsys/win32k/include/cursoricon.h 2005-09-08 15:51:44 UTC (rev 17742) +++ trunk/reactos/subsys/win32k/include/cursoricon.h 2005-09-08 16:18:51 UTC (rev 17743) @@ -50,7 +50,6 @@
HCURSOR FASTCALL IntSetCursor(PWINSTATION_OBJECT WinStaObject, PCURICON_OBJECT NewCursor, BOOL ForceChange); BOOL FASTCALL IntSetupCurIconHandles(PWINSTATION_OBJECT WinStaObject); -PCURICON_OBJECT FASTCALL IntGetCurIconObject(HANDLE Handle); PCURICON_OBJECT FASTCALL IntCreateCurIconHandle(PWINSTATION_OBJECT WinStaObject); VOID FASTCALL IntCleanupCurIcons(struct _EPROCESS *Process, PW32PROCESS Win32Process);
_____
Modified: trunk/reactos/subsys/win32k/include/dce.h --- trunk/reactos/subsys/win32k/include/dce.h 2005-09-08 15:51:44 UTC (rev 17742) +++ trunk/reactos/subsys/win32k/include/dce.h 2005-09-08 16:18:51 UTC (rev 17743) @@ -50,10 +50,9 @@
#define DCEOBJ_UnlockDCE(pDCE) GDIOBJ_UnlockObjByPtr(pDCE) BOOL INTERNAL_CALL DCE_Cleanup(PVOID ObjectBody);
-PDCE FASTCALL DceAllocDCE(HWND hWnd, DCE_TYPE Type); +PDCE FASTCALL DceAllocDCE(PWINDOW_OBJECT Window, DCE_TYPE Type); PDCE FASTCALL DCE_FreeDCE(PDCE dce); VOID FASTCALL DCE_FreeWindowDCE(HWND); -HRGN STDCALL DceGetVisRgn(HWND hWnd, ULONG Flags, HWND hWndChild, ULONG CFlags); INT FASTCALL DCE_ExcludeRgn(HDC, HWND, HRGN); BOOL FASTCALL DCE_InvalidateDCE(HWND, const PRECTL); HWND FASTCALL IntWindowFromDC(HDC hDc); _____
Modified: trunk/reactos/subsys/win32k/include/hotkey.h --- trunk/reactos/subsys/win32k/include/hotkey.h 2005-09-08 15:51:44 UTC (rev 17742) +++ trunk/reactos/subsys/win32k/include/hotkey.h 2005-09-08 16:18:51 UTC (rev 17743) @@ -34,12 +34,6 @@
VOID UnregisterThreadHotKeys(struct _ETHREAD *Thread);
-#define IntLockHotKeys(WinStaObject) \ - ExAcquireFastMutex(&WinStaObject->HotKeyListLock) - -#define IntUnLockHotKeys(WinStaObject) \ - ExReleaseFastMutex(&WinStaObject->HotKeyListLock) - #endif /* _WIN32K_HOTKEY_H */
/* EOF */ _____
Modified: trunk/reactos/subsys/win32k/include/userfuncs.h --- trunk/reactos/subsys/win32k/include/userfuncs.h 2005-09-08 15:51:44 UTC (rev 17742) +++ trunk/reactos/subsys/win32k/include/userfuncs.h 2005-09-08 16:18:51 UTC (rev 17743) @@ -67,7 +67,7 @@
HWND FASTCALL UserGetForegroundWindow(VOID);
-HWND FASTCALL UserSetFocus(HWND hWnd); +HWND FASTCALL co_UserSetFocus(PWINDOW_OBJECT Window);
/*************** WINDC.C ***************/
_____
Modified: trunk/reactos/subsys/win32k/include/window.h --- trunk/reactos/subsys/win32k/include/window.h 2005-09-08 15:51:44 UTC (rev 17742) +++ trunk/reactos/subsys/win32k/include/window.h 2005-09-08 16:18:51 UTC (rev 17743) @@ -154,7 +154,7 @@
IntGetActiveWindow (VOID);
BOOL FASTCALL -IntIsWindowVisible (HWND hWnd); +IntIsWindowVisible (PWINDOW_OBJECT Window);
BOOL FASTCALL IntIsChildWindow (HWND Parent, HWND Child); @@ -178,10 +178,10 @@ IntGetParentObject(PWINDOW_OBJECT Wnd);
INT FASTCALL -IntGetWindowRgn(HWND hWnd, HRGN hRgn); +IntGetWindowRgn(PWINDOW_OBJECT Window, HRGN hRgn);
INT FASTCALL -IntGetWindowRgnBox(HWND hWnd, RECT *Rect); +IntGetWindowRgnBox(PWINDOW_OBJECT Window, RECT *Rect);
BOOL FASTCALL IntGetWindowInfo(PWINDOW_OBJECT WindowObject, PWINDOWINFO pwi); @@ -200,7 +200,7 @@ DWORD IntAddWndProcHandle(WNDPROC WindowProc, BOOL IsUnicode);
BOOL FASTCALL -IntShowOwnedPopups( HWND owner, BOOL fShow ); +IntShowOwnedPopups( PWINDOW_OBJECT owner, BOOL fShow );
#endif /* _WIN32K_WINDOW_H */
_____
Modified: trunk/reactos/subsys/win32k/include/winpos.h --- trunk/reactos/subsys/win32k/include/winpos.h 2005-09-08 15:51:44 UTC (rev 17742) +++ trunk/reactos/subsys/win32k/include/winpos.h 2005-09-08 16:18:51 UTC (rev 17743) @@ -19,7 +19,7 @@
BOOL FASTCALL IntGetClientOrigin(PWINDOW_OBJECT Window, LPPOINT Point); LRESULT FASTCALL -co_WinPosGetNonClientSize(HWND Wnd, RECT* WindowRect, RECT* ClientRect); +co_WinPosGetNonClientSize(PWINDOW_OBJECT Window, RECT* WindowRect, RECT* ClientRect); UINT FASTCALL co_WinPosGetMinMaxInfo(PWINDOW_OBJECT Window, POINT* MaxSize, POINT* MaxPos, POINT* MinTrack, POINT* MaxTrack); _____
Modified: trunk/reactos/subsys/win32k/include/winsta.h --- trunk/reactos/subsys/win32k/include/winsta.h 2005-09-08 15:51:44 UTC (rev 17742) +++ trunk/reactos/subsys/win32k/include/winsta.h 2005-09-08 16:18:51 UTC (rev 17743) @@ -42,7 +42,6 @@
struct _DESKTOP_OBJECT* ActiveDesktop; /* FIXME: Clipboard */ LIST_ENTRY HotKeyListHead; - FAST_MUTEX HotKeyListLock; } WINSTATION_OBJECT, *PWINSTATION_OBJECT;
extern WINSTATION_OBJECT *InputWindowStation; _____
Modified: trunk/reactos/subsys/win32k/ntuser/accelerator.c --- trunk/reactos/subsys/win32k/ntuser/accelerator.c 2005-09-08 15:51:44 UTC (rev 17742) +++ trunk/reactos/subsys/win32k/ntuser/accelerator.c 2005-09-08 16:18:51 UTC (rev 17743) @@ -72,7 +72,11 @@
static PACCELERATOR_TABLE FASTCALL UserGetAccelObject(HACCEL hAccel) { - PACCELERATOR_TABLE Accel= UserGetObject(&gHandleTable, hAccel, otAccel); + PACCELERATOR_TABLE Accel; + + if (!hAccel) return NULL; + + Accel= UserGetObject(&gHandleTable, hAccel, otAccel);
if (Accel) { @@ -355,7 +359,7 @@ mesg = 1; else if (IntGetCaptureWindow()) mesg = 2; - else if (!IntIsWindowVisible(Window->hSelf)) /* FIXME: WINE IsWindowEnabled == IntIsWindowVisible? */ + else if (!IntIsWindowVisible(Window)) /* FIXME: WINE IsWindowEnabled == IntIsWindowVisible? */ mesg = 3; else { _____
Modified: trunk/reactos/subsys/win32k/ntuser/caret.c --- trunk/reactos/subsys/win32k/ntuser/caret.c 2005-09-08 15:51:44 UTC (rev 17742) +++ trunk/reactos/subsys/win32k/ntuser/caret.c 2005-09-08 16:18:51 UTC (rev 17743) @@ -221,23 +221,20 @@
int nWidth, int nHeight) { - PWINDOW_OBJECT WindowObject; + PWINDOW_OBJECT Window; PUSER_MESSAGE_QUEUE ThreadQueue; DECLARE_RETURN(BOOL);
DPRINT("Enter NtUserCreateCaret\n"); UserEnterExclusive();
- WindowObject = IntGetWindowObject(hWnd); - if(!WindowObject) + if(!(Window = UserGetWindowObject(hWnd))) { - SetLastWin32Error(ERROR_INVALID_HANDLE); RETURN(FALSE); }
- if(WindowObject->OwnerThread != PsGetCurrentThread()) + if(Window->OwnerThread != PsGetCurrentThread()) { - IntReleaseWindowObject(WindowObject); SetLastWin32Error(ERROR_ACCESS_DENIED); RETURN(FALSE); } @@ -265,8 +262,6 @@ ThreadQueue->CaretInfo->Visible = 0; ThreadQueue->CaretInfo->Showing = 0;
- IntReleaseWindowObject(WindowObject); - RETURN(TRUE);
CLEANUP: @@ -282,7 +277,7 @@ DECLARE_RETURN(UINT);
DPRINT("Enter NtUserGetCaretBlinkTime\n"); - UserEnterExclusive(); + UserEnterShared();
RETURN(IntGetCaretBlinkTime());
@@ -322,11 +317,11 @@ }
-BOOL FASTCALL co_UserHideCaret(PWINDOW_OBJECT WindowObject) +BOOL FASTCALL co_UserHideCaret(PWINDOW_OBJECT Window) { PUSER_MESSAGE_QUEUE ThreadQueue;
- if(WindowObject->OwnerThread != PsGetCurrentThread()) + if(Window->OwnerThread != PsGetCurrentThread()) { SetLastWin32Error(ERROR_ACCESS_DENIED); return FALSE; @@ -334,7 +329,7 @@
ThreadQueue = (PUSER_MESSAGE_QUEUE)PsGetWin32Thread()->MessageQueue;
- if(ThreadQueue->CaretInfo->hWnd != WindowObject->hSelf) + if(ThreadQueue->CaretInfo->hWnd != Window->hSelf) { SetLastWin32Error(ERROR_ACCESS_DENIED); return FALSE; @@ -342,7 +337,7 @@
if(ThreadQueue->CaretInfo->Visible) { - IntKillTimer(WindowObject->hSelf, IDCARETTIMER, TRUE); + IntKillTimer(Window->hSelf, IDCARETTIMER, TRUE);
co_IntHideCaret(ThreadQueue->CaretInfo); ThreadQueue->CaretInfo->Visible = 0; @@ -358,22 +353,21 @@ NtUserHideCaret( HWND hWnd) { - PWINDOW_OBJECT WindowObject; + PWINDOW_OBJECT Window; DECLARE_RETURN(BOOL); BOOL ret;
DPRINT("Enter NtUserHideCaret\n"); UserEnterExclusive();
- WindowObject = IntGetWindowObject(hWnd); - if(!WindowObject) + if(!(Window = UserGetWindowObject(hWnd))) { - SetLastWin32Error(ERROR_INVALID_WINDOW_HANDLE); RETURN(FALSE); }
- ret = co_UserHideCaret(WindowObject); - IntReleaseWindowObject(WindowObject); + UserRefObjectCo(Window); + ret = co_UserHideCaret(Window); + UserDerefObjectCo(Window);
RETURN(ret);
@@ -421,22 +415,22 @@ NtUserShowCaret( HWND hWnd) { - PWINDOW_OBJECT WindowObject; + PWINDOW_OBJECT Window; DECLARE_RETURN(BOOL); BOOL ret;
DPRINT("Enter NtUserShowCaret\n"); UserEnterExclusive();
- WindowObject = IntGetWindowObject(hWnd); - if(!WindowObject) + if(!(Window = UserGetWindowObject(hWnd))) { - SetLastWin32Error(ERROR_INVALID_WINDOW_HANDLE); RETURN(FALSE); }
- ret = co_UserShowCaret(WindowObject); - IntReleaseWindowObject(WindowObject); + UserRefObjectCo(Window); + ret = co_UserShowCaret(Window); + UserDerefObjectCo(Window); + RETURN(ret);
CLEANUP: _____
Modified: trunk/reactos/subsys/win32k/ntuser/class.c --- trunk/reactos/subsys/win32k/ntuser/class.c 2005-09-08 15:51:44 UTC (rev 17742) +++ trunk/reactos/subsys/win32k/ntuser/class.c 2005-09-08 16:18:51 UTC (rev 17743) @@ -235,22 +235,19 @@
LPWSTR lpClassName, ULONG nMaxCount) { - PWINDOW_OBJECT WindowObject; - LONG Length; + PWINDOW_OBJECT Window; DECLARE_RETURN(DWORD);
UserEnterShared(); + DPRINT("Enter NtUserGetClassName\n");
- WindowObject = IntGetWindowObject(hWnd); - if (WindowObject == NULL) + if (!(Window = UserGetWindowObject(hWnd))) { - SetLastWin32Error(ERROR_INVALID_WINDOW_HANDLE); RETURN(0); } - Length = IntGetClassName(WindowObject, lpClassName, nMaxCount); - IntReleaseWindowObject(WindowObject); - RETURN(Length);
+ RETURN( IntGetClassName(Window, lpClassName, nMaxCount)); + CLEANUP: DPRINT("Leave NtUserGetClassName, ret=%i\n",_ret_); UserLeave(); _____
Modified: trunk/reactos/subsys/win32k/ntuser/cursoricon.c --- trunk/reactos/subsys/win32k/ntuser/cursoricon.c 2005-09-08 15:51:44 UTC (rev 17742) +++ trunk/reactos/subsys/win32k/ntuser/cursoricon.c 2005-09-08 16:18:51 UTC (rev 17743) @@ -72,35 +72,48 @@
}
- - -/* temp hack */ -PCURICON_OBJECT FASTCALL UserGetCurIconObject(HANDLE hWnd) +#if 0 +static +PCURICON_OBJECT FASTCALL UserGetCurIconObject(HCURSOR hCursor) { - PCURICON_OBJECT Window = (PCURICON_OBJECT)UserGetObject(&gHandleTable, hWnd, otCursor); - if (!Window) + PCURICON_OBJECT Cursor; + + if (!hCursor) return NULL; + + Cursor = (PCURICON_OBJECT)UserGetObject(&gHandleTable, hCursor, otCursor); + if (!Cursor) { SetLastWin32Error(ERROR_INVALID_CURSOR_HANDLE); return NULL; }
- ASSERT(USER_BODY_TO_HEADER(Window)->RefCount >= 0); - return Window; + ASSERT(USER_BODY_TO_HEADER(Cursor)->RefCount >= 0); + return Cursor; } - -PCURICON_OBJECT FASTCALL -IntGetCurIconObject(HANDLE Handle) +#endif +static +PCURICON_OBJECT FASTCALL IntGetCurIconObject(HCURSOR hCursor) { - PCURICON_OBJECT ci = UserGetCurIconObject(Handle); - if (ci) + PCURICON_OBJECT Cursor; + + if (!hCursor) return NULL; + + Cursor = (PCURICON_OBJECT)UserGetObject(&gHandleTable, hCursor, otCursor); + if (!Cursor) { - ASSERT(USER_BODY_TO_HEADER(ci)->RefCount >= 0); + SetLastWin32Error(ERROR_INVALID_CURSOR_HANDLE); + return NULL; + }
- USER_BODY_TO_HEADER(ci)->RefCount++; - } - return ci; + ASSERT(USER_BODY_TO_HEADER(Cursor)->RefCount >= 0); + + USER_BODY_TO_HEADER(Cursor)->RefCount++; + + return Cursor; }
+ + #define COLORCURSORS_ALLOWED FALSE HCURSOR FASTCALL IntSetCursor(PWINSTATION_OBJECT WinStaObject, PCURICON_OBJECT NewCursor, _____
Modified: trunk/reactos/subsys/win32k/ntuser/focus.c --- trunk/reactos/subsys/win32k/ntuser/focus.c 2005-09-08 15:51:44 UTC (rev 17742) +++ trunk/reactos/subsys/win32k/ntuser/focus.c 2005-09-08 16:18:51 UTC (rev 17743) @@ -316,25 +316,28 @@
return hWndPrev; }
+static HWND FASTCALL -co_IntSetFocusWindow(HWND hWnd) +co_IntSetFocusWindow(PWINDOW_OBJECT Window) { HWND hWndPrev = 0; PUSER_MESSAGE_QUEUE ThreadQueue;
+ ASSERT_REFS_CO(Window); + ThreadQueue = (PUSER_MESSAGE_QUEUE)PsGetWin32Thread()->MessageQueue; ASSERT(ThreadQueue != 0);
hWndPrev = ThreadQueue->FocusWindow; - if (hWndPrev == hWnd) + if (hWndPrev == Window->hSelf) { return hWndPrev; }
- ThreadQueue->FocusWindow = hWnd; + ThreadQueue->FocusWindow = Window->hSelf;
- co_IntSendKillFocusMessages(hWndPrev, hWnd); - co_IntSendSetFocusMessages(hWndPrev, hWnd); + co_IntSendKillFocusMessages(hWndPrev, Window->hSelf); + co_IntSendSetFocusMessages(hWndPrev, Window->hSelf);
return hWndPrev; } @@ -513,18 +516,14 @@
-HWND FASTCALL UserSetFocus(HWND hWnd) +HWND FASTCALL co_UserSetFocus(PWINDOW_OBJECT Window OPTIONAL) { - if (hWnd) + if (Window) { - PWINDOW_OBJECT Window; PUSER_MESSAGE_QUEUE ThreadQueue; HWND hWndPrev, hWndTop;
- if (!(Window = UserGetWindowObject(hWnd))) - { - return( 0); - } + ASSERT_REFS_CO(Window);
ThreadQueue = (PUSER_MESSAGE_QUEUE)PsGetWin32Thread()->MessageQueue;
@@ -539,15 +538,17 @@ return( 0); }
- hWndTop = UserGetAncestor(hWnd, GA_ROOT); + hWndTop = UserGetAncestor(Window->hSelf, GA_ROOT); if (hWndTop != UserGetActiveWindow()) { - PWINDOW_OBJECT WndTops = IntGetWindowObject(hWndTop); + PWINDOW_OBJECT WndTops = UserGetWindowObject(hWndTop); + + UserRefObjectCo(WndTops); co_IntSetActiveWindow(WndTops); - IntReleaseWindowObject(WndTops);//temp hack + UserDerefObjectCo(WndTops); }
- hWndPrev = co_IntSetFocusWindow(hWnd); + hWndPrev = co_IntSetFocusWindow(Window);
return( hWndPrev); } @@ -565,13 +566,24 @@ HWND STDCALL NtUserSetFocus(HWND hWnd) { + PWINDOW_OBJECT Window; DECLARE_RETURN(HWND); + HWND ret;
DPRINT("Enter NtUserSetFocus(%x)\n", hWnd); UserEnterExclusive();
- RETURN(UserSetFocus(hWnd)); + if (!(Window = UserGetWindowObject(hWnd))) + { + RETURN(NULL); + }
+ UserRefObjectCo(Window); + ret = co_UserSetFocus(Window); + UserDerefObjectCo(Window); + + RETURN(ret); + CLEANUP: DPRINT("Leave NtUserSetFocus, ret=%i\n",_ret_); UserLeave(); _____
Modified: trunk/reactos/subsys/win32k/ntuser/hotkey.c --- trunk/reactos/subsys/win32k/ntuser/hotkey.c 2005-09-08 15:51:44 UTC (rev 17742) +++ trunk/reactos/subsys/win32k/ntuser/hotkey.c 2005-09-08 16:18:51 UTC (rev 17743) @@ -42,7 +42,6 @@
InitHotKeys(PWINSTATION_OBJECT WinStaObject) { InitializeListHead(&WinStaObject->HotKeyListHead); - ExInitializeFastMutex(&WinStaObject->HotKeyListLock);
return STATUS_SUCCESS; } @@ -72,8 +71,6 @@ return FALSE; }
- IntLockHotKeys(WinStaObject); - Entry = WinStaObject->HotKeyListHead.Flink; while (Entry != &WinStaObject->HotKeyListHead) { @@ -92,7 +89,6 @@ if (id != NULL) *id = HotKeyItem->id;
- IntUnLockHotKeys(WinStaObject);
return TRUE; } @@ -100,8 +96,6 @@ Entry = Entry->Flink; }
- IntUnLockHotKeys(WinStaObject); - return FALSE; }
@@ -119,8 +113,6 @@ if(!WinStaObject) return;
- IntLockHotKeys(WinStaObject); - Entry = WinStaObject->HotKeyListHead.Flink; while (Entry != &WinStaObject->HotKeyListHead) { @@ -135,7 +127,6 @@ } }
- IntUnLockHotKeys(WinStaObject); }
@@ -152,8 +143,6 @@ if(!WinStaObject) return;
- IntLockHotKeys(WinStaObject); - Entry = WinStaObject->HotKeyListHead.Flink; while (Entry != &WinStaObject->HotKeyListHead) { @@ -168,7 +157,6 @@ } }
- IntUnLockHotKeys(WinStaObject); }
@@ -220,14 +208,11 @@ } else { - Window = IntGetWindowObject(hWnd); - if(!Window) + if(!(Window = UserGetWindowObject(hWnd))) { - SetLastWin32Error(ERROR_INVALID_WINDOW_HANDLE); RETURN( FALSE); } HotKeyThread = Window->OwnerThread; - IntReleaseWindowObject(Window); }
@@ -239,19 +224,15 @@ RETURN( FALSE); }
- IntLockHotKeys(WinStaObject); - /* Check for existing hotkey */ if (IsHotKey (WinStaObject, fsModifiers, vk)) { - IntUnLockHotKeys(WinStaObject); RETURN( FALSE); }
HotKeyItem = ExAllocatePoolWithTag (PagedPool, sizeof(HOT_KEY_ITEM), TAG_HOTKEY); if (HotKeyItem == NULL) { - IntUnLockHotKeys(WinStaObject); RETURN( FALSE); }
@@ -264,8 +245,6 @@ InsertHeadList (&WinStaObject->HotKeyListHead, &HotKeyItem->ListEntry);
- IntUnLockHotKeys(WinStaObject); - RETURN( TRUE);
CLEANUP: @@ -288,10 +267,8 @@ DPRINT("Enter NtUserUnregisterHotKey\n"); UserEnterExclusive();
- Window = IntGetWindowObject(hWnd); - if(!Window) + if(!(Window = UserGetWindowObject(hWnd))) { - SetLastWin32Error(ERROR_INVALID_WINDOW_HANDLE); RETURN( FALSE); }
@@ -300,12 +277,9 @@
if(!WinStaObject) { - IntReleaseWindowObject(Window); RETURN( FALSE); }
- IntLockHotKeys(WinStaObject); - Entry = WinStaObject->HotKeyListHead.Flink; while (Entry != &WinStaObject->HotKeyListHead) { @@ -317,18 +291,13 @@ { RemoveEntryList (&HotKeyItem->ListEntry); ExFreePool (HotKeyItem); - IntUnLockHotKeys(WinStaObject);
- IntReleaseWindowObject(Window); RETURN( TRUE); }
Entry = Entry->Flink; }
- IntUnLockHotKeys(WinStaObject); - - IntReleaseWindowObject(Window); RETURN( FALSE);
CLEANUP: _____
Modified: trunk/reactos/subsys/win32k/ntuser/input.c --- trunk/reactos/subsys/win32k/ntuser/input.c 2005-09-08 15:51:44 UTC (rev 17742) +++ trunk/reactos/subsys/win32k/ntuser/input.c 2005-09-08 16:18:51 UTC (rev 17743) @@ -35,7 +35,7 @@
#define NDEBUG #include <debug.h>
-extern BYTE QueueKeyStateTable[]; +extern BYTE gQueueKeyStateTable[];
/* GLOBALS *******************************************************************/
@@ -377,7 +377,7 @@ PWINDOW_OBJECT Window; MSG Mesg;
- if (!(Window = IntGetWindowObject(InputWindowStation->ShellWindow))) + if (!(Window = UserGetWindowObject(InputWindowStation->ShellWindow))) { DPRINT1("Couldn't find window to send Windows key message!\n"); return; @@ -390,8 +390,6 @@
/* The QS_HOTKEY is just a guess */ MsqPostMessage(Window->MessageQueue, &Mesg, FALSE, QS_HOTKEY); - - ObmDereferenceObject(Window); }
STATIC VOID STDCALL @@ -1026,42 +1024,42 @@ Msg.message = 0; if(mi->dwFlags & MOUSEEVENTF_LEFTDOWN) { - QueueKeyStateTable[VK_LBUTTON] |= 0xc0; + gQueueKeyStateTable[VK_LBUTTON] |= 0xc0; Msg.message = SwapBtnMsg[0][SwapButtons]; CurInfo->ButtonsDown |= SwapBtn[SwapButtons]; MsqInsertSystemMessage(&Msg); } else if(mi->dwFlags & MOUSEEVENTF_LEFTUP) { - QueueKeyStateTable[VK_LBUTTON] &= ~0x80; + gQueueKeyStateTable[VK_LBUTTON] &= ~0x80; Msg.message = SwapBtnMsg[1][SwapButtons]; CurInfo->ButtonsDown &= ~SwapBtn[SwapButtons]; MsqInsertSystemMessage(&Msg); } if(mi->dwFlags & MOUSEEVENTF_MIDDLEDOWN) { - QueueKeyStateTable[VK_MBUTTON] |= 0xc0; + gQueueKeyStateTable[VK_MBUTTON] |= 0xc0; Msg.message = WM_MBUTTONDOWN; CurInfo->ButtonsDown |= MK_MBUTTON; MsqInsertSystemMessage(&Msg); } else if(mi->dwFlags & MOUSEEVENTF_MIDDLEUP) { - QueueKeyStateTable[VK_MBUTTON] &= ~0x80; + gQueueKeyStateTable[VK_MBUTTON] &= ~0x80; Msg.message = WM_MBUTTONUP; CurInfo->ButtonsDown &= ~MK_MBUTTON; MsqInsertSystemMessage(&Msg); } if(mi->dwFlags & MOUSEEVENTF_RIGHTDOWN) { - QueueKeyStateTable[VK_RBUTTON] |= 0xc0; + gQueueKeyStateTable[VK_RBUTTON] |= 0xc0; Msg.message = SwapBtnMsg[0][!SwapButtons]; CurInfo->ButtonsDown |= SwapBtn[!SwapButtons]; MsqInsertSystemMessage(&Msg); } else if(mi->dwFlags & MOUSEEVENTF_RIGHTUP) { - QueueKeyStateTable[VK_RBUTTON] &= ~0x80; + gQueueKeyStateTable[VK_RBUTTON] &= ~0x80; Msg.message = SwapBtnMsg[1][!SwapButtons]; CurInfo->ButtonsDown &= ~SwapBtn[!SwapButtons]; MsqInsertSystemMessage(&Msg); @@ -1079,14 +1077,14 @@ Msg.message = WM_XBUTTONDOWN; if(mi->mouseData & XBUTTON1) { - QueueKeyStateTable[VK_XBUTTON1] |= 0xc0; + gQueueKeyStateTable[VK_XBUTTON1] |= 0xc0; Msg.wParam = MAKEWPARAM(CurInfo->ButtonsDown, XBUTTON1); CurInfo->ButtonsDown |= XBUTTON1; MsqInsertSystemMessage(&Msg); } if(mi->mouseData & XBUTTON2) { - QueueKeyStateTable[VK_XBUTTON2] |= 0xc0; + gQueueKeyStateTable[VK_XBUTTON2] |= 0xc0; Msg.wParam = MAKEWPARAM(CurInfo->ButtonsDown, XBUTTON2); CurInfo->ButtonsDown |= XBUTTON2; MsqInsertSystemMessage(&Msg); @@ -1097,14 +1095,14 @@ Msg.message = WM_XBUTTONUP; if(mi->mouseData & XBUTTON1) { - QueueKeyStateTable[VK_XBUTTON1] &= ~0x80; + gQueueKeyStateTable[VK_XBUTTON1] &= ~0x80; Msg.wParam = MAKEWPARAM(CurInfo->ButtonsDown, XBUTTON1); CurInfo->ButtonsDown &= ~XBUTTON1; MsqInsertSystemMessage(&Msg); } if(mi->mouseData & XBUTTON2) { - QueueKeyStateTable[VK_XBUTTON2] &= ~0x80; + gQueueKeyStateTable[VK_XBUTTON2] &= ~0x80; Msg.wParam = MAKEWPARAM(CurInfo->ButtonsDown, XBUTTON2); CurInfo->ButtonsDown &= ~XBUTTON2; MsqInsertSystemMessage(&Msg); _____
Modified: trunk/reactos/subsys/win32k/ntuser/keyboard.c --- trunk/reactos/subsys/win32k/ntuser/keyboard.c 2005-09-08 15:51:44 UTC (rev 17742) +++ trunk/reactos/subsys/win32k/ntuser/keyboard.c 2005-09-08 16:18:51 UTC (rev 17743) @@ -49,24 +49,16 @@
/* From kbdxx.c -- Key changes with numlock */ #define KNUMP 0x400
-/* Lock the keyboard state to prevent unusual concurrent access */ -FAST_MUTEX QueueStateLock;
-BYTE QueueKeyStateTable[256]; +BYTE gQueueKeyStateTable[256];
-#define IntLockQueueState \ - ExAcquireFastMutex(&QueueStateLock)
-#define IntUnLockQueueState \ - ExReleaseFastMutex(&QueueStateLock) - /* FUNCTIONS *****************************************************************/
/* Initialization -- Right now, just zero the key state and init the lock */ NTSTATUS FASTCALL InitKeyboardImpl(VOID) { - ExInitializeFastMutex(&QueueStateLock); - RtlZeroMemory(&QueueKeyStateTable,0x100); + RtlZeroMemory(&gQueueKeyStateTable,0x100); return STATUS_SUCCESS; }
@@ -93,7 +85,7 @@ if (vk == VK_CAPITAL || vk == VK_NUMLOCK) { if (down) - QueueKeyStateTable[vk] ^= KS_LOCK_BIT; + gQueueKeyStateTable[vk] ^= KS_LOCK_BIT; }
if (ext && vk == VK_LSHIFT) @@ -104,46 +96,46 @@ vk = VK_RMENU;
if (down) - QueueKeyStateTable[vk] |= KS_DOWN_BIT; + gQueueKeyStateTable[vk] |= KS_DOWN_BIT; else - QueueKeyStateTable[vk] &= ~KS_DOWN_MASK; + gQueueKeyStateTable[vk] &= ~KS_DOWN_MASK;
if (vk == VK_LSHIFT || vk == VK_RSHIFT) { - if ((QueueKeyStateTable[VK_LSHIFT] & KS_DOWN_BIT) || - (QueueKeyStateTable[VK_RSHIFT] & KS_DOWN_BIT)) + if ((gQueueKeyStateTable[VK_LSHIFT] & KS_DOWN_BIT) || + (gQueueKeyStateTable[VK_RSHIFT] & KS_DOWN_BIT)) { - QueueKeyStateTable[VK_SHIFT] |= KS_DOWN_BIT; + gQueueKeyStateTable[VK_SHIFT] |= KS_DOWN_BIT; } else { - QueueKeyStateTable[VK_SHIFT] &= ~KS_DOWN_MASK; + gQueueKeyStateTable[VK_SHIFT] &= ~KS_DOWN_MASK; } }
if (vk == VK_LCONTROL || vk == VK_RCONTROL) { - if ((QueueKeyStateTable[VK_LCONTROL] & KS_DOWN_BIT) || - (QueueKeyStateTable[VK_RCONTROL] & KS_DOWN_BIT)) + if ((gQueueKeyStateTable[VK_LCONTROL] & KS_DOWN_BIT) || + (gQueueKeyStateTable[VK_RCONTROL] & KS_DOWN_BIT)) { - QueueKeyStateTable[VK_CONTROL] |= KS_DOWN_BIT; + gQueueKeyStateTable[VK_CONTROL] |= KS_DOWN_BIT; } else { - QueueKeyStateTable[VK_CONTROL] &= ~KS_DOWN_MASK; + gQueueKeyStateTable[VK_CONTROL] &= ~KS_DOWN_MASK; } }
if (vk == VK_LMENU || vk == VK_RMENU) { - if ((QueueKeyStateTable[VK_LMENU] & KS_DOWN_BIT) || - (QueueKeyStateTable[VK_RMENU] & KS_DOWN_BIT)) + if ((gQueueKeyStateTable[VK_LMENU] & KS_DOWN_BIT) || + (gQueueKeyStateTable[VK_RMENU] & KS_DOWN_BIT)) { - QueueKeyStateTable[VK_MENU] |= KS_DOWN_BIT; + gQueueKeyStateTable[VK_MENU] |= KS_DOWN_BIT; } else { - QueueKeyStateTable[VK_MENU] &= ~KS_DOWN_MASK; + gQueueKeyStateTable[VK_MENU] &= ~KS_DOWN_MASK; } } } @@ -351,13 +343,12 @@ { DWORD ret = 0;
- IntLockQueueState; if( key < 0x100 ) { - ret = ((DWORD)(QueueKeyStateTable[key] & KS_DOWN_BIT) << 8 ) | - (QueueKeyStateTable[key] & KS_LOCK_BIT); + ret = ((DWORD)(gQueueKeyStateTable[key] & KS_DOWN_BIT) << 8 ) | + (gQueueKeyStateTable[key] & KS_LOCK_BIT); } - IntUnLockQueueState; + return ret; }
@@ -386,13 +377,12 @@ { DWORD ret = 0;
- IntLockQueueState; if( key < 0x100 ) { - ret = ((DWORD)(QueueKeyStateTable[key] & KS_DOWN_BIT) << 8 ) | - (QueueKeyStateTable[key] & KS_LOCK_BIT); + ret = ((DWORD)(gQueueKeyStateTable[key] & KS_DOWN_BIT) << 8 ) | + (gQueueKeyStateTable[key] & KS_LOCK_BIT); } - IntUnLockQueueState; + return ret; }
@@ -434,7 +424,6 @@ } else { - IntLockQueueState; ToUnicodeResult = ToUnicodeInner( wVirtKey, wScanCode, lpKeyState, @@ -443,7 +432,6 @@ wFlags, PsGetWin32Thread() ?
PsGetWin32Thread()->KeyboardLayout : 0 ); - IntUnLockQueueState; }
return ToUnicodeResult; @@ -458,7 +446,7 @@ { return ToUnicodeEx( wVirtKey, wScanCode, - QueueKeyStateTable, + gQueueKeyStateTable, pwszBuff, cchBuff, wFlags, @@ -735,14 +723,12 @@
ScanCode = (lpMsg->lParam >> 16) & 0xff;
- IntLockQueueState; - /* All messages have to contain the cursor point. */ IntGetCursorLocation(PsGetWin32Thread()->Desktop->WindowStation, &NewMsg.pt);
UState = ToUnicodeInner(lpMsg->wParam, HIWORD(lpMsg->lParam) & 0xff, - QueueKeyStateTable, wp, 2, 0, + gQueueKeyStateTable, wp, 2, 0, keyLayout );
if (UState == 1) @@ -797,7 +783,6 @@ Result = TRUE; }
- IntUnLockQueueState; return Result; }
@@ -807,33 +792,47 @@ LPBYTE lpKeyState) { BOOL Result = TRUE; - - IntLockQueueState; + DECLARE_RETURN(DWORD); + + DPRINT("Enter NtUserGetKeyboardState\n"); + UserEnterShared(); + if (lpKeyState) { - if(!NT_SUCCESS(MmCopyToCaller(lpKeyState, QueueKeyStateTable, 256))) + if(!NT_SUCCESS(MmCopyToCaller(lpKeyState, gQueueKeyStateTable, 256))) Result = FALSE; } - IntUnLockQueueState; - return Result; + + RETURN(Result); + +CLEANUP: + DPRINT("Leave NtUserGetKeyboardState, ret=%i\n",_ret_); + UserLeave(); + END_CLEANUP; }
DWORD STDCALL -NtUserSetKeyboardState( - LPBYTE lpKeyState) +NtUserSetKeyboardState(LPBYTE lpKeyState) { BOOL Result = TRUE; + DECLARE_RETURN(DWORD); + + DPRINT("Enter NtUserSetKeyboardState\n"); + UserEnterExclusive();
- IntLockQueueState; if (lpKeyState) { - if(! NT_SUCCESS(MmCopyFromCaller(QueueKeyStateTable, lpKeyState, 256))) + if(! NT_SUCCESS(MmCopyFromCaller(gQueueKeyStateTable, lpKeyState, 256))) Result = FALSE; } - IntUnLockQueueState; + [truncated at 1000 lines; 1785 more skipped]