-revert some prev. changes (using wthread instead of queue) bcause filip didnt like it -misc queue/thread-input changes Modified: branches/win32k rewrite attempt/win32k/include/caret.h Modified: branches/win32k rewrite attempt/win32k/include/desktop.h Modified: branches/win32k rewrite attempt/win32k/include/focus.h Modified: branches/win32k rewrite attempt/win32k/include/input.h Modified: branches/win32k rewrite attempt/win32k/include/msgqueue.h Modified: branches/win32k rewrite attempt/win32k/include/ntuser.h Modified: branches/win32k rewrite attempt/win32k/include/timer.h Modified: branches/win32k rewrite attempt/win32k/include/userfuncs.h Modified: branches/win32k rewrite attempt/win32k/include/win32.h Modified: branches/win32k rewrite attempt/win32k/include/win32k.h Modified: branches/win32k rewrite attempt/win32k/include/window.h Modified: branches/win32k rewrite attempt/win32k/ntuser/accelerator.c Modified: branches/win32k rewrite attempt/win32k/ntuser/caret.c Modified: branches/win32k rewrite attempt/win32k/ntuser/class.c Modified: branches/win32k rewrite attempt/win32k/ntuser/desktop.c Modified: branches/win32k rewrite attempt/win32k/ntuser/focus.c Modified: branches/win32k rewrite attempt/win32k/ntuser/guicheck.c Modified: branches/win32k rewrite attempt/win32k/ntuser/hook.c Modified: branches/win32k rewrite attempt/win32k/ntuser/hotkey.c Modified: branches/win32k rewrite attempt/win32k/ntuser/input.c Modified: branches/win32k rewrite attempt/win32k/ntuser/keyboard.c Modified: branches/win32k rewrite attempt/win32k/ntuser/menu.c Modified: branches/win32k rewrite attempt/win32k/ntuser/message.c Modified: branches/win32k rewrite attempt/win32k/ntuser/misc.c Modified: branches/win32k rewrite attempt/win32k/ntuser/msgqueue.c Modified: branches/win32k rewrite attempt/win32k/ntuser/ntuser.c Modified: branches/win32k rewrite attempt/win32k/ntuser/painting.c Modified: branches/win32k rewrite attempt/win32k/ntuser/scrollbar.c Modified: branches/win32k rewrite attempt/win32k/ntuser/stubs.c Modified: branches/win32k rewrite attempt/win32k/ntuser/timer.c Modified: branches/win32k rewrite attempt/win32k/ntuser/vis.c Modified: branches/win32k rewrite attempt/win32k/ntuser/windc.c Modified: branches/win32k rewrite attempt/win32k/ntuser/window.c Modified: branches/win32k rewrite attempt/win32k/ntuser/winpos.c Modified: branches/win32k rewrite attempt/win32k/ntuser/winsta.c _____
Modified: branches/win32k rewrite attempt/win32k/include/caret.h --- branches/win32k rewrite attempt/win32k/include/caret.h 2005-08-15 01:16:58 UTC (rev 17391) +++ branches/win32k rewrite attempt/win32k/include/caret.h 2005-08-15 01:19:24 UTC (rev 17392) @@ -3,16 +3,8 @@
#define IDCARETTIMER (0xffff)
-BOOL FASTCALL -UserDestroyCaret(PW32THREAD Win32Thread);
-BOOL FASTCALL -UserSetCaretBlinkTime(UINT uMSeconds);
- -VOID FASTCALL -UserDrawCaret(HWND hWnd); - #endif /* _WIN32K_CARET_H */
/* EOF */ _____
Modified: branches/win32k rewrite attempt/win32k/include/desktop.h --- branches/win32k rewrite attempt/win32k/include/desktop.h 2005-08-15 01:16:58 UTC (rev 17391) +++ branches/win32k rewrite attempt/win32k/include/desktop.h 2005-08-15 01:19:24 UTC (rev 17392) @@ -16,7 +16,7 @@
/* Pointer to the associated window station. */ struct _WINSTATION_OBJECT *WindowStation; /* Pointer to the active queue. */ - PW32THREAD ActiveWThread; + PUSER_MESSAGE_QUEUE ActiveQueue; /* Rectangle of the work area */ RECT WorkArea; /* Handle of the desktop window. */ @@ -40,78 +40,7 @@ HWND hWnd; } SHELL_HOOK_WINDOW, *PSHELL_HOOK_WINDOW;
-NTSTATUS FASTCALL -InitDesktopImpl(VOID);
-NTSTATUS FASTCALL -CleanupDesktopImpl(VOID); - -NTSTATUS STDCALL -IntDesktopObjectCreate(PVOID ObjectBody, - PVOID Parent, - PWSTR RemainingPath, - struct _OBJECT_ATTRIBUTES* ObjectAttributes); - -VOID STDCALL -IntDesktopObjectDelete(PVOID DeletedObject); - -VOID FASTCALL -IntGetDesktopWorkArea(PDESKTOP_OBJECT Desktop, PRECT Rect); - -LRESULT CALLBACK -IntDesktopWindowProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam); - -HDC FASTCALL -IntGetScreenDC(VOID); - -PWINDOW_OBJECT FASTCALL -UserGetDesktopWindow (VOID); - -HWND FASTCALL -IntGetCurrentThreadDesktopWindow(VOID); - -PW32THREAD FASTCALL -UserGetFocusThread(VOID); - -VOID FASTCALL -IntSetFocusThread(PW32THREAD Thread); - -PDESKTOP_OBJECT FASTCALL -UserGetActiveDesktop(VOID); - -NTSTATUS FASTCALL -UserShowDesktop(PDESKTOP_OBJECT Desktop, ULONG Width, ULONG Height); - -NTSTATUS FASTCALL -IntHideDesktop(PDESKTOP_OBJECT Desktop); - -HDESK FASTCALL -IntGetDesktopObjectHandle(PDESKTOP_OBJECT DesktopObject); - -NTSTATUS FASTCALL -IntValidateDesktopHandle( - HDESK Desktop, - KPROCESSOR_MODE AccessMode, - ACCESS_MASK DesiredAccess, - PDESKTOP_OBJECT *Object); - -NTSTATUS FASTCALL -IntParseDesktopPath(PEPROCESS Process, - PUNICODE_STRING DesktopPath, - HWINSTA *hWinSta, - HDESK *hDesktop); - -BOOL FASTCALL -IntDesktopUpdatePerUserSettings(BOOL bEnable); - -BOOL IntRegisterShellHookWindow(HWND hWnd); -BOOL IntDeRegisterShellHookWindow(HWND hWnd); - -VOID IntShellHookNotify(WPARAM Message, LPARAM lParam); - -#define IntIsActiveDesktop(Desktop) \ - ((Desktop)->WindowStation->ActiveDesktop == (Desktop)) - #endif /* _WIN32K_DESKTOP_H */
/* EOF */ _____
Modified: branches/win32k rewrite attempt/win32k/include/focus.h --- branches/win32k rewrite attempt/win32k/include/focus.h 2005-08-15 01:16:58 UTC (rev 17391) +++ branches/win32k rewrite attempt/win32k/include/focus.h 2005-08-15 01:19:24 UTC (rev 17392) @@ -1,27 +1,5 @@
#ifndef _WIN32K_FOCUS_H #define _WIN32K_FOCUS_H
-/* - * These functions take the window handles from current message queue. - */ -PWINDOW_OBJECT FASTCALL -UserGetCaptureWindow(); -PWINDOW_OBJECT FASTCALL -UserGetFocusWindow();
- - -/* - * These functions take the window handles from current thread queue. - */ -PWINDOW_OBJECT FASTCALL -UserGetThreadFocusWindow(); - -BOOL FASTCALL -IntMouseActivateWindow(PWINDOW_OBJECT Window); -BOOL FASTCALL -IntSetForegroundWindow(PWINDOW_OBJECT Window); -PWINDOW_OBJECT FASTCALL -IntSetActiveWindow(PWINDOW_OBJECT Window); - #endif /* _WIN32K_FOCUS_H */ _____
Modified: branches/win32k rewrite attempt/win32k/include/input.h --- branches/win32k rewrite attempt/win32k/include/input.h 2005-08-15 01:16:58 UTC (rev 17391) +++ branches/win32k rewrite attempt/win32k/include/input.h 2005-08-15 01:19:24 UTC (rev 17392) @@ -1,21 +1,5 @@
#ifndef _WIN32K_INPUT_H #define _WIN32K_INPUT_H
-#include <internal/kbd.h>
-NTSTATUS FASTCALL -InitInputImpl(VOID); -NTSTATUS FASTCALL -InitKeyboardImpl(VOID); -PW32THREAD W32kGetPrimitiveWThread(VOID); -VOID W32kUnregisterPrimitiveWThread(VOID); -PKBDTABLES W32kGetDefaultKeyLayout(VOID); -VOID FASTCALL W32kKeyProcessMessage(LPMSG Msg, PKBDTABLES KeyLayout, BYTE Prefix); -BOOL FASTCALL IntBlockInput(PW32THREAD W32Thread, BOOL BlockIt); -BOOL FASTCALL IntMouseInput(MOUSEINPUT *mi); -BOOL FASTCALL IntKeyboardInput(KEYBDINPUT *ki); - -#define ThreadHasInputAccess(W32Thread) \ - (TRUE) - #endif /* _WIN32K_INPUT_H */ _____
Modified: branches/win32k rewrite attempt/win32k/include/msgqueue.h --- branches/win32k rewrite attempt/win32k/include/msgqueue.h 2005-08-15 01:16:58 UTC (rev 17391) +++ branches/win32k rewrite attempt/win32k/include/msgqueue.h 2005-08-15 01:19:24 UTC (rev 17392) @@ -1,7 +1,6 @@
#ifndef _WIN32K_MSGQUEUE_H #define _WIN32K_MSGQUEUE_H
-#include "caret.h" #include "hook.h"
#define MSQ_HUNG 5000 @@ -54,26 +53,40 @@ int caret_state; /* caret on/off state */ struct list msg_list; /* list of hardware messages */ unsigned char keystate[256]; /* state of each key */ + + typedef struct _THRDCARETINFO + { + HWND hWnd; + HBITMAP Bitmap; + POINT Pos; + SIZE Size; + BYTE Visible; + BYTE Showing; +} THRDCARETINFO, *PTHRDCARETINFO; #endif
+ LONG RefCount; /* Current window with focus (ie. receives keyboard input) for this queue. */ - HWND FocusWindow; + HWND hFocusWindow; /* Current capture window for this queue. */ - HWND CaptureWindow; + HWND hCaptureWindow; /* Current active window for this queue. */ - HWND ActiveWindow; + HWND hActiveWindow; /* Current menu owner window for this queue */ - HWND MenuOwner; + HWND hMenuOwner; /* Current move/size window for this queue */ - HWND MoveSize; + HWND hMoveSize; /* Caret information for this queue */ THRDCARETINFO CaretInfo; + /* Desktop that the message queue is attached to */ + struct _DESKTOP_OBJECT* Desktop;
} USER_THREAD_INPUT, *PUSER_THREAD_INPUT;
typedef struct _USER_MESSAGE_QUEUE { + PUSER_THREAD_INPUT Input; /* Queue of messages sent to the queue. */ LIST_ENTRY SentMessagesListHead; /* Queue of messages posted to the queue. */ @@ -109,11 +122,12 @@ PHOOKTABLE Hooks;
/* queue state tracking */ - WORD WakeMask; - WORD WakeBits; -// WORD QueueBits; - WORD ChangedBits; - WORD ChangedMask; + /* wake mask for current queue content */ + WORD QueueMask; + WORD QueueBits; + /* wake mask for queue content changes */ + WORD ChangesMask; + WORD ChangesBits;
/* extra message information */ LPARAM ExtraInfo; @@ -121,8 +135,6 @@ LIST_ENTRY DispatchingMessagesHead; /* messages that are currently dispatched by this message queue, required for cleanup */ LIST_ENTRY LocalDispatchingMessagesHead; - /* Desktop that the message queue is attached to */ - struct _DESKTOP_OBJECT *Desktop;
} USER_MESSAGE_QUEUE, *PUSER_MESSAGE_QUEUE; _____
Modified: branches/win32k rewrite attempt/win32k/include/ntuser.h --- branches/win32k rewrite attempt/win32k/include/ntuser.h 2005-08-15 01:16:58 UTC (rev 17391) +++ branches/win32k rewrite attempt/win32k/include/ntuser.h 2005-08-15 01:19:24 UTC (rev 17392) @@ -41,9 +41,13 @@
#define UserEnterExclusive() \ { \ /* DPRINT1("try lock, %s, %i (%i)\n",__FILE__,__LINE__, _locked);*/ \ - ASSERT(UserLock.Owner != KeGetCurrentThread()); \ + if (UserLock.Owner == KeGetCurrentThread()){ \ + DPRINT1("file %s, line %i\n",_file, _line); \ + ASSERT(FALSE); \ + } \ UUserEnterExclusive(); \ ASSERT(InterlockedIncrement(&_locked) == 1 /*> 0*/); \ + _file = __FILE__; _line = __LINE__; \ /* DPRINT("got lock, %s, %i (%i)\n",__FILE__,__LINE__, _locked);*/ \ }
@@ -51,7 +55,11 @@ { \ ASSERT(InterlockedDecrement(&_locked) == 0/*>= 0*/); \ /*DPRINT("unlock, %s, %i (%i)\n",__FILE__,__LINE__, _locked);*/ \ - ASSERT(UserLock.Owner == KeGetCurrentThread()); \ + if (UserLock.Owner != KeGetCurrentThread()) { \ + DPRINT1("file %s, line %i\n",_file, _line); \ + ASSERT(FALSE); \ + } \ + _file = __FILE__; _line = __LINE__; \ UUserLeave(); \ }
_____
Modified: branches/win32k rewrite attempt/win32k/include/timer.h --- branches/win32k rewrite attempt/win32k/include/timer.h 2005-08-15 01:16:58 UTC (rev 17391) +++ branches/win32k rewrite attempt/win32k/include/timer.h 2005-08-15 01:19:24 UTC (rev 17392) @@ -7,7 +7,7 @@
LIST_ENTRY ListEntry; LARGE_INTEGER ExpiryTime; PWINDOW_OBJECT Wnd; - PW32THREAD WThread; + PUSER_MESSAGE_QUEUE Queue; UINT_PTR IDEvent; UINT Period; TIMERPROC TimerFunc; _____
Modified: branches/win32k rewrite attempt/win32k/include/userfuncs.h --- branches/win32k rewrite attempt/win32k/include/userfuncs.h 2005-08-15 01:16:58 UTC (rev 17391) +++ branches/win32k rewrite attempt/win32k/include/userfuncs.h 2005-08-15 01:19:24 UTC (rev 17392) @@ -1,6 +1,9 @@
#ifndef _WIN32K_USERFUNCS_H #define _WIN32K_USERFUNCS_H
+ +#define QUEUE_2_WTHREAD(queue) CONTAINING_RECORD(queue, W32THREAD, Queue) + /*************** KEYBOARD.C ******************/
DWORD FASTCALL @@ -31,9 +34,80 @@
inline PDESKTOP_OBJECT FASTCALL UserGetCurrentDesktop();
+NTSTATUS FASTCALL +InitDesktopImpl(VOID);
+NTSTATUS FASTCALL +CleanupDesktopImpl(VOID); + +NTSTATUS STDCALL +IntDesktopObjectCreate(PVOID ObjectBody, + PVOID Parent, + PWSTR RemainingPath, + struct _OBJECT_ATTRIBUTES* ObjectAttributes);
+VOID STDCALL +IntDesktopObjectDelete(PVOID DeletedObject);
+VOID FASTCALL +IntGetDesktopWorkArea(PDESKTOP_OBJECT Desktop, PRECT Rect); + +LRESULT CALLBACK +IntDesktopWindowProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam); + +HDC FASTCALL +IntGetScreenDC(VOID); + +PWINDOW_OBJECT FASTCALL +UserGetDesktopWindow (VOID); + +HWND FASTCALL +IntGetCurrentThreadDesktopWindow(VOID); + +PUSER_MESSAGE_QUEUE FASTCALL +UserGetFocusQueue(VOID); + +VOID FASTCALL +IntSetFocusQueue(PUSER_MESSAGE_QUEUE Thread); + +PDESKTOP_OBJECT FASTCALL +UserGetActiveDesktop(VOID); + +NTSTATUS FASTCALL +UserShowDesktop(PDESKTOP_OBJECT Desktop, ULONG Width, ULONG Height); + +NTSTATUS FASTCALL +IntHideDesktop(PDESKTOP_OBJECT Desktop); + +HDESK FASTCALL +IntGetDesktopObjectHandle(PDESKTOP_OBJECT DesktopObject); + +NTSTATUS FASTCALL +IntValidateDesktopHandle( + HDESK Desktop, + KPROCESSOR_MODE AccessMode, + ACCESS_MASK DesiredAccess, + PDESKTOP_OBJECT *Object); + +NTSTATUS FASTCALL +IntParseDesktopPath(PEPROCESS Process, + PUNICODE_STRING DesktopPath, + HWINSTA *hWinSta, + HDESK *hDesktop); + +BOOL FASTCALL +IntDesktopUpdatePerUserSettings(BOOL bEnable); + +BOOL IntRegisterShellHookWindow(HWND hWnd); +BOOL IntDeRegisterShellHookWindow(HWND hWnd); + +VOID IntShellHookNotify(WPARAM Message, LPARAM lParam); + +#define IntIsActiveDesktop(Desktop) \ + ((Desktop)->WindowStation->ActiveDesktop == (Desktop)) + + + /************************* ACCELERATOR.C ***********************/
inline PACCELERATOR_TABLE FASTCALL UserGetAccelObject(HACCEL hCursor); @@ -46,13 +120,56 @@ ULONG FASTCALL UserGetSystemMetrics(ULONG Index);
-/* input.h */ +/******************** INPUT.C ********************************/ + +#include <internal/kbd.h> + +BOOLEAN attach_thread_input( PW32THREAD thread_from, PW32THREAD thread_to ); +PUSER_THREAD_INPUT create_thread_input( PW32THREAD thread ); +inline VOID FASTCALL UserDereferenceInput(PUSER_THREAD_INPUT Input); + +NTSTATUS FASTCALL +InitInputImpl(VOID); +NTSTATUS FASTCALL +InitKeyboardImpl(VOID); +PUSER_MESSAGE_QUEUE W32kGetPrimitiveQueue(VOID); +VOID W32kUnregisterPrimitiveQueue(VOID); +PKBDTABLES W32kGetDefaultKeyLayout(VOID); +VOID FASTCALL W32kKeyProcessMessage(LPMSG Msg, PKBDTABLES KeyLayout, BYTE Prefix); +BOOL FASTCALL IntBlockInput(PW32THREAD W32Thread, BOOL BlockIt); +BOOL FASTCALL IntMouseInput(MOUSEINPUT *mi); +BOOL FASTCALL IntKeyboardInput(KEYBDINPUT *ki); + +#define ThreadHasInputAccess(W32Thread) \ + (TRUE) + NTSTATUS FASTCALL UserAcquireOrReleaseInputOwnership(BOOLEAN Release);
/******************** FOCUS.C ********************************/
+/* + * These functions take the window handles from current message queue. + */ PWINDOW_OBJECT FASTCALL +UserGetCaptureWindow(); +PWINDOW_OBJECT FASTCALL +UserGetFocusWindow(); + +/* + * These functions take the window handles from current thread queue. + */ +PWINDOW_OBJECT FASTCALL +UserGetThreadFocusWindow(); + +BOOL FASTCALL +IntMouseActivateWindow(PWINDOW_OBJECT Window); +BOOL FASTCALL +IntSetForegroundWindow(PWINDOW_OBJECT Window); +PWINDOW_OBJECT FASTCALL +IntSetActiveWindow(PWINDOW_OBJECT Window); + +PWINDOW_OBJECT FASTCALL UserGetForegroundWindow(VOID);
PWINDOW_OBJECT FASTCALL @@ -171,7 +288,15 @@ BOOL FASTCALL UserSwitchCaretShowing(PTHRDCARETINFO Info);
+BOOL FASTCALL +UserDestroyCaret(PW32THREAD Win32Thread);
+BOOL FASTCALL +UserSetCaretBlinkTime(UINT uMSeconds); + +VOID FASTCALL +UserDrawCaret(HWND hWnd); + /************************* WINPOS.C ****************************/
@@ -265,7 +390,6 @@ HWND FASTCALL MsqSetStateWindow(PUSER_THREAD_INPUT Input, ULONG Type, HWND hWnd);
-inline PUSER_THREAD_INPUT FASTCALL UserGetCurrentInput();
VOID FASTCALL MsqCleanupWindow(PWINDOW_OBJECT pWindow); @@ -281,7 +405,7 @@
PTIMER_ENTRY FASTCALL UserFindExpiredTimer( - PW32THREAD W32Thread, + PUSER_MESSAGE_QUEUE MessageQueue, PWINDOW_OBJECT Wnd OPTIONAL, UINT MsgFilterMin, UINT MsgFilterMax, @@ -407,7 +531,7 @@ MsqKillTimer(PUSER_MESSAGE_QUEUE MessageQueue, HWND Wnd, UINT_PTR IDEvent, UINT Msg); BOOLEAN FASTCALL -MsqGetTimerMessage(PW32THREAD W32Thread, +MsqGetTimerMessage(PUSER_MESSAGE_QUEUE Queue, HWND WndFilter, UINT MsgFilterMin, UINT MsgFilterMax, MSG *Msg, BOOLEAN Restart); BOOLEAN FASTCALL @@ -451,8 +575,7 @@ UserGetWindowDC(PWINDOW_OBJECT Wnd);
/* div */ -#define UserGetCurrentQueue() \ -((PUSER_MESSAGE_QUEUE)PsGetWin32Thread()->Queue) +#define UserGetCurrentQueue() (&PsGetWin32Thread()->Queue)
_____
Modified: branches/win32k rewrite attempt/win32k/include/win32.h --- branches/win32k rewrite attempt/win32k/include/win32.h 2005-08-15 01:16:58 UTC (rev 17391) +++ branches/win32k rewrite attempt/win32k/include/win32.h 2005-08-15 01:19:24 UTC (rev 17392) @@ -5,8 +5,7 @@
typedef struct _W32THREAD { - struct _USER_MESSAGE_QUEUE* Queue; - struct _USER_THREAD_INPUT* Input; + USER_MESSAGE_QUEUE Queue; LIST_ENTRY WindowListHead; LIST_ENTRY W32CallbackListHead; struct _KBDTABLES* KeyboardLayout; _____
Modified: branches/win32k rewrite attempt/win32k/include/win32k.h --- branches/win32k rewrite attempt/win32k/include/win32k.h 2005-08-15 01:16:58 UTC (rev 17391) +++ branches/win32k rewrite attempt/win32k/include/win32k.h 2005-08-15 01:19:24 UTC (rev 17392) @@ -9,6 +9,7 @@
/* INCLUDES ******************************************************************/
/* Internal Win32k Headers */ +#include <include/msgqueue.h> #include <include/win32.h> #include <include/ssec.h> #include <include/accelerator.h> @@ -36,7 +37,6 @@ #include <include/menu.h> #include <include/monitor.h> #include <include/mouse.h> -#include <include/msgqueue.h> #include <include/object.h> #include <include/paint.h> #include <include/palette.h> _____
Modified: branches/win32k rewrite attempt/win32k/include/window.h --- branches/win32k rewrite attempt/win32k/include/window.h 2005-08-15 01:16:58 UTC (rev 17391) +++ branches/win32k rewrite attempt/win32k/include/window.h 2005-08-15 01:19:24 UTC (rev 17392) @@ -53,7 +53,7 @@
/* Position of the window's client area. */ RECT ClientRect; /* Handle for the window. */ - HANDLE Self; + HWND hSelf; /* Window flags. */ ULONG Flags; /* Window menu handle or window id */ @@ -74,7 +74,7 @@ /* Handle to the parent window. */ struct _WINDOW_OBJECT* ParentWnd; /* Handle to the owner window. */ - HANDLE Owner; + HWND hOwner; /* DC Entries (DCE) */ PDCE Dce; /* Property list head.*/ @@ -86,8 +86,11 @@ BOOL Unicode; WNDPROC WndProcA; WNDPROC WndProcW; - /* owner thread */ + /* owner queue/thread */ + union { + PUSER_MESSAGE_QUEUE Queue; PW32THREAD WThread; + }; HWND hWndLastPopup; /* handle to last active popup window (wine doesn't use pointer, for unk. reason)*/ PINTERNALPOS InternalPos; ULONG Status; @@ -130,7 +133,7 @@ (WndObj->W32Thread->Thread->Tcb.Win32Thread == W32Thread)) #endif
-#define IntWndBelongsToThread(WndObj, _W32Thread) ((WndObj)->WThread == (_W32Thread)) +#define IntWndBelongsToThread(WndObj, _W32Thread) (QUEUE_2_WTHREAD((WndObj)->Queue) == (_W32Thread))
#define IntGetWndThreadId(WndObj) \ _____
Modified: branches/win32k rewrite attempt/win32k/ntuser/accelerator.c --- branches/win32k rewrite attempt/win32k/ntuser/accelerator.c 2005-08-15 01:16:58 UTC (rev 17391) +++ branches/win32k rewrite attempt/win32k/ntuser/accelerator.c 2005-08-15 01:19:24 UTC (rev 17392) @@ -273,11 +273,11 @@
DPRINT("found accel for virt_key %04x (scan %04x)\n", wParam, 0xff & HIWORD(lParam));
- DPRINT("NtUserGetKeyState(VK_SHIFT) = 0x%x\n", + DPRINT("UserGetKeyState(VK_SHIFT) = 0x%x\n", UserGetKeyState(VK_SHIFT)); - DPRINT("NtUserGetKeyState(VK_CONTROL) = 0x%x\n", + DPRINT("UserGetKeyState(VK_CONTROL) = 0x%x\n", UserGetKeyState(VK_CONTROL)); - DPRINT("NtUserGetKeyState(VK_MENU) = 0x%x\n", + DPRINT("UserGetKeyState(VK_MENU) = 0x%x\n", UserGetKeyState(VK_MENU));
if (UserGetKeyState(VK_SHIFT) & 0x8000) _____
Modified: branches/win32k rewrite attempt/win32k/ntuser/caret.c --- branches/win32k rewrite attempt/win32k/ntuser/caret.c 2005-08-15 01:16:58 UTC (rev 17391) +++ branches/win32k rewrite attempt/win32k/ntuser/caret.c 2005-08-15 01:19:24 UTC (rev 17392) @@ -43,12 +43,13 @@
if(!W32Thread) return FALSE;
- IntHideCaret(&W32Thread->Input->CaretInfo); - W32Thread->Input->CaretInfo.Bitmap = (HBITMAP)0; - W32Thread->Input->CaretInfo.hWnd = (HWND)0; - W32Thread->Input->CaretInfo.Size.cx = W32Thread->Input->CaretInfo.Size.cy = 0; - W32Thread->Input->CaretInfo.Showing = 0; - W32Thread->Input->CaretInfo.Visible = 0; + IntHideCaret(&W32Thread->Queue.Input->CaretInfo); + RtlZeroMemory(&W32Thread->Queue.Input->CaretInfo, sizeof(THRDCARETINFO)); +// W32Thread->Queue.Input->CaretInfo.Bitmap = (HBITMAP)0; +// W32Thread->Queue.Input->CaretInfo.hWnd = (HWND)0; +// W32Thread->Queue.Input->CaretInfo.Size.cx = W32Thread->Queue.Input->CaretInfo.Size.cy = 0; +// W32Thread->Queue.Input->CaretInfo.Showing = 0; +// W32Thread->Queue.Input->CaretInfo.Visible = 0; return TRUE; }
@@ -165,7 +166,7 @@ { PUSER_THREAD_INPUT Input;
- Input = UserGetCurrentInput(); + Input = UserGetCurrentQueue()->Input;
if(Input->CaretInfo.hWnd) { @@ -189,7 +190,7 @@ { PUSER_THREAD_INPUT Input;
- Input = UserGetCurrentInput(); + Input = UserGetCurrentQueue()->Input;
if(Input->CaretInfo.hWnd) { @@ -208,7 +209,7 @@ { PUSER_THREAD_INPUT Input;
- Input = UserGetCurrentInput(); + Input = UserGetCurrentQueue()->Input;
if(Input->CaretInfo.hWnd && Input->CaretInfo.Visible && Input->CaretInfo.Showing) @@ -242,13 +243,13 @@ RETURN(FALSE); }
- if(WindowObject->WThread != PsGetWin32Thread()) + if(WindowObject->Queue != UserGetCurrentQueue()) { SetLastWin32Error(ERROR_ACCESS_DENIED); RETURN(FALSE); }
- Input = UserGetCurrentInput(); + Input = UserGetCurrentQueue()->Input;
if (Input->CaretInfo.Visible) { @@ -309,7 +310,7 @@ DPRINT("Enter NtUserGetCaretPos\n"); UserEnterExclusive();
- Input = UserGetCurrentInput(); + Input = UserGetCurrentQueue()->Input;
Status = MmCopyToCaller(lpPoint, &(Input->CaretInfo.Pos), sizeof(POINT)); if(!NT_SUCCESS(Status)) @@ -333,10 +334,10 @@ HWND hWnd) { PWINDOW_OBJECT WindowObject; - PUSER_THREAD_INPUT Input; + PUSER_MESSAGE_QUEUE Queue; DECLARE_RETURN(BOOL);
- DPRINT1("Enter NtUserHideCaret\n"); + DPRINT("Enter NtUserHideCaret\n"); UserEnterExclusive();
WindowObject = IntGetWindowObject(hWnd); @@ -346,33 +347,33 @@ RETURN(FALSE); }
- if(WindowObject->WThread != PsGetWin32Thread()) + Queue = UserGetCurrentQueue(); + + if(WindowObject->Queue != Queue) { SetLastWin32Error(ERROR_ACCESS_DENIED); RETURN(FALSE); }
- Input = UserGetCurrentInput(); - - if(Input->CaretInfo.hWnd != hWnd) + if(Queue->Input->CaretInfo.hWnd != hWnd) { SetLastWin32Error(ERROR_ACCESS_DENIED); RETURN(FALSE); }
- if(Input->CaretInfo.Visible) + if(Queue->Input->CaretInfo.Visible) { UserKillTimer(WindowObject, IDCARETTIMER, TRUE);
- IntHideCaret(&Input->CaretInfo); - Input->CaretInfo.Visible = 0; - Input->CaretInfo.Showing = 0; + IntHideCaret(&Queue->Input->CaretInfo); + Queue->Input->CaretInfo.Visible = 0; + Queue->Input->CaretInfo.Showing = 0; }
RETURN(TRUE);
CLEANUP: - DPRINT1("Leave NtUserHideCaret, ret=%i\n",_ret_); + DPRINT("Leave NtUserHideCaret, ret=%i\n",_ret_); UserLeave(); END_CLEANUP; } @@ -382,32 +383,32 @@ BOOL FASTCALL UserHideCaret(PWINDOW_OBJECT Wnd) { - PUSER_THREAD_INPUT Input; - + PUSER_MESSAGE_QUEUE Queue; + ASSERT(Wnd);
- if(Wnd->WThread != PsGetWin32Thread()) + Queue = UserGetCurrentQueue(); + + if(Wnd->Queue != Queue) { SetLastWin32Error(ERROR_ACCESS_DENIED); return(FALSE); }
- Input = UserGetCurrentInput(); - - if(Input->CaretInfo.hWnd != GetHwnd(Wnd)) + if(Queue->Input->CaretInfo.hWnd != GetHwnd(Wnd)) { SetLastWin32Error(ERROR_ACCESS_DENIED); return(FALSE); }
- if(Input->CaretInfo.Visible) + if(Queue->Input->CaretInfo.Visible) { UserKillTimer(Wnd, IDCARETTIMER, TRUE);
//FIXME: fix IntHideCaret vs. NtHideCaret vs. UserHideCaret mess - IntHideCaret(&Input->CaretInfo); - Input->CaretInfo.Visible = 0; - Input->CaretInfo.Showing = 0; + IntHideCaret(&Queue->Input->CaretInfo); + Queue->Input->CaretInfo.Visible = 0; + Queue->Input->CaretInfo.Showing = 0; }
return(TRUE); @@ -445,30 +446,30 @@ BOOL FASTCALL UserShowCaret(PWINDOW_OBJECT Wnd) { - PUSER_THREAD_INPUT Input; + PUSER_MESSAGE_QUEUE Queue;
ASSERT(Wnd);
- if(Wnd->WThread != PsGetWin32Thread()) + Queue = UserGetCurrentQueue(); + + if(Wnd->Queue != Queue) { SetLastWin32Error(ERROR_ACCESS_DENIED); return(FALSE); }
- Input = UserGetCurrentInput(); - - if(Input->CaretInfo.hWnd != GetHwnd(Wnd)) + if(Queue->Input->CaretInfo.hWnd != GetHwnd(Wnd)) { SetLastWin32Error(ERROR_ACCESS_DENIED); return(FALSE); }
- if(!Input->CaretInfo.Visible) + if(!Queue->Input->CaretInfo.Visible) { - Input->CaretInfo.Visible = 1; - if(!Input->CaretInfo.Showing) + Queue->Input->CaretInfo.Visible = 1; + if(!Queue->Input->CaretInfo.Showing) { - IntSendMessage(Input->CaretInfo.hWnd, WM_SYSTIMER, IDCARETTIMER, 0); + IntSendMessage(Queue->Input->CaretInfo.hWnd, WM_SYSTIMER, IDCARETTIMER, 0); } UserSetTimer(Wnd, IDCARETTIMER, UserGetCaretBlinkTime(), NULL, TRUE); } _____
Modified: branches/win32k rewrite attempt/win32k/ntuser/class.c --- branches/win32k rewrite attempt/win32k/ntuser/class.c 2005-08-15 01:16:58 UTC (rev 17391) +++ branches/win32k rewrite attempt/win32k/ntuser/class.c 2005-08-15 01:19:24 UTC (rev 17392) @@ -430,7 +430,7 @@
DPRINT("Enter NtUserRegisterClassExWOW\n"); UserEnterExclusive(); - CHECKPOINT; + if (!lpwcx) { SetLastWin32Error(ERROR_INVALID_PARAMETER); @@ -507,7 +507,7 @@
if ((int)Offset >= 0) { - DPRINT("GetClassLong(%x, %d)\n", WindowObject->Self, Offset); + DPRINT("GetClassLong(%x, %d)\n", WindowObject->hSelf, Offset); if ((Offset + sizeof(LONG)) > WindowObject->Class->cbClsExtra) { SetLastWin32Error(ERROR_INVALID_PARAMETER); @@ -594,7 +594,7 @@
if ((int)Offset >= 0) { - DPRINT("SetClassLong(%x, %d, %x)\n", WindowObject->Self, Offset, dwNewLong); + DPRINT("SetClassLong(%x, %d, %x)\n", WindowObject->hSelf, Offset, dwNewLong); if ((Offset + sizeof(LONG)) > WindowObject->Class->cbClsExtra) { SetLastWin32Error(ERROR_INVALID_PARAMETER); @@ -625,7 +625,7 @@
if ((!Owner) && (!Parent)) { - IntShellHookNotify(HSHELL_REDRAW, (LPARAM) WindowObject->Self); + IntShellHookNotify(HSHELL_REDRAW, (LPARAM) WindowObject->hSelf); }
break; _____
Modified: branches/win32k rewrite attempt/win32k/ntuser/desktop.c --- branches/win32k rewrite attempt/win32k/ntuser/desktop.c 2005-08-15 01:16:58 UTC (rev 17391) +++ branches/win32k rewrite attempt/win32k/ntuser/desktop.c 2005-08-15 01:19:24 UTC (rev 17392) @@ -427,8 +427,8 @@
return Ret; }
-PW32THREAD FASTCALL -UserGetFocusThread(VOID) +PUSER_MESSAGE_QUEUE FASTCALL +UserGetFocusQueue(VOID) { PDESKTOP_OBJECT pdo = UserGetActiveDesktop(); if (!pdo) @@ -436,43 +436,41 @@ DPRINT("No active desktop\n"); return(NULL); } - return pdo->ActiveWThread; + return pdo->ActiveQueue; }
VOID FASTCALL -IntSetFocusThread(PW32THREAD NewThread) +IntSetFocusQueue(PUSER_MESSAGE_QUEUE NewQueue) { - PW32THREAD Old; + PUSER_MESSAGE_QUEUE OldQueue; PDESKTOP_OBJECT pdo = UserGetActiveDesktop(); if (!pdo) { DPRINT("No active desktop\n"); return; } - if(NewThread) + if(NewQueue) { //FIXME: move to thread? - if(NewThread->Queue->Desktop != NULL) + if(NewQueue->Input->Desktop != NULL) { DPRINT("Message Queue already attached to another desktop!\n"); return; }
//IntReferenceMessageQueue(NewQueue); - //InterlockedExchange((LONG*)&NewQueue->Desktop, (LONG)pdo);
//FIXME: move to thread? - NewThread->Queue->Desktop = pdo; + NewQueue->Input->Desktop = pdo;
}
-// Old = (PUSER_MESSAGE_QUEUE)InterlockedExchange((LONG*)&pdo->ActiveMessageQueue , (LONG)NewQueue); - Old = pdo->ActiveWThread; + OldQueue = pdo->ActiveQueue;
- if (Old) - Old->Queue->Desktop = NULL; + if (OldQueue) + OldQueue->Input->Desktop = NULL;
- pdo->ActiveWThread = NewThread; + pdo->ActiveQueue = NewQueue;
// if(Old != NULL) // { @@ -870,7 +868,7 @@ IntGetDesktopWorkArea(DesktopObject, NULL);
/* Initialize some local (to win32k) desktop state. */ - DesktopObject->ActiveWThread = NULL; + DesktopObject->ActiveQueue = NULL;
Status = ObInsertObject( (PVOID)DesktopObject, _____
Modified: branches/win32k rewrite attempt/win32k/ntuser/focus.c --- branches/win32k rewrite attempt/win32k/ntuser/focus.c 2005-08-15 01:16:58 UTC (rev 17391) +++ branches/win32k rewrite attempt/win32k/ntuser/focus.c 2005-08-15 01:19:24 UTC (rev 17392) @@ -27,23 +27,22 @@
PWINDOW_OBJECT FASTCALL UserGetCaptureWindow() { - PW32THREAD ForegroundW32Thread = UserGetFocusThread(); - return ForegroundW32Thread ? GetWnd(ForegroundW32Thread->Input->CaptureWindow) : 0; + PUSER_MESSAGE_QUEUE ForegroundQueue = UserGetFocusQueue(); + return ForegroundQueue ? GetWnd(ForegroundQueue->Input->hCaptureWindow) : 0; }
PWINDOW_OBJECT FASTCALL UserGetFocusWindow() { - PW32THREAD ForegroundW32Thread = UserGetFocusThread(); - return ForegroundW32Thread ? GetWnd(ForegroundW32Thread->Input->FocusWindow) : 0; + PUSER_MESSAGE_QUEUE ForegroundQueue = UserGetFocusQueue(); + return ForegroundQueue ? GetWnd(ForegroundQueue->Input->hFocusWindow) : 0; }
PWINDOW_OBJECT FASTCALL UserGetThreadFocusWindow() { - PW32THREAD W32Thread; - W32Thread = PsGetWin32Thread(); - return W32Thread ? GetWnd(W32Thread->Input->FocusWindow) : 0; + PUSER_MESSAGE_QUEUE Queue = UserGetCurrentQueue(); + return Queue ? GetWnd(Queue->Input->hFocusWindow) : 0; }
VOID FASTCALL @@ -126,14 +125,14 @@
for(Child = Root->FirstChild; Child; Child = Child->NextSibling) { - OwnerWnd = IntGetWindowObject(Child->Owner); + OwnerWnd = IntGetWindowObject(Child->hOwner);
if(!OwnerWnd) continue;
if(OwnerWnd == Owner) { - Ret = Child->Self; + Ret = Child->hSelf; return Ret; } } @@ -144,11 +143,11 @@ STATIC BOOL FASTCALL IntSetForegroundAndFocusWindow(PWINDOW_OBJECT Window, PWINDOW_OBJECT FocusWindow, BOOL MouseActivate) { - HWND hWnd = Window->Self; + HWND hWnd = Window->hSelf; HWND hWndPrev = NULL; - HWND hWndFocus = FocusWindow->Self; + HWND hWndFocus = FocusWindow->hSelf; HWND hWndFocusPrev = NULL; - PW32THREAD PrevForegroundW32Thread; + PUSER_MESSAGE_QUEUE PrevForegroundQueue;
[truncated at 1000 lines; 3274 more skipped]