-fix timerbug (abiword splash)
-misc
Somewhat works now (thanks to filip), but closing gui consoles makes ros
go 100% cpu
Modified: branches/win32k rewrite attempt/win32k/docs/refs.txt
Modified: branches/win32k rewrite attempt/win32k/include/caret.h
Modified: branches/win32k rewrite attempt/win32k/include/msgqueue.h
Modified: branches/win32k rewrite attempt/win32k/include/userfuncs.h
Modified: branches/win32k rewrite attempt/win32k/include/window.h
Modified: branches/win32k rewrite attempt/win32k/main/dllmain.c
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/clipboard.c
Modified: branches/win32k rewrite attempt/win32k/ntuser/csr.c
Modified: branches/win32k rewrite attempt/win32k/ntuser/cursoricon.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/handle.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/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/monitor.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/prop.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/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/docs/refs.txt
--- branches/win32k rewrite attempt/win32k/docs/refs.txt
2005-08-04 12:41:42 UTC (rev 17043)
+++ branches/win32k rewrite attempt/win32k/docs/refs.txt
2005-08-04 16:32:18 UTC (rev 17044)
@@ -4,8 +4,7 @@
window -> desktop
window -> class
-window -> queue/thread_input ?????????
-thread -> queue/thread_input ?????????
+thread_input -> thread
thread -> process
process -> winsta
@@ -13,6 +12,10 @@
desktop -> winsta
winsta -> session
+NOTE: Message queue has 1:1 relationship with (w32)thread and need no
ref. count.
+ -If the (w32)thread is destroyed, so is the message queue.
+ -If the (w32)thread exist, so does the message queue.
+ So if you want the queue to hang around, you reference the
thread instead.
Above references create following dependencies:
-----------------------------------------------
@@ -24,3 +27,34 @@
thread -> desktop -> winsta -> session
process -> winsta -> session
+
+
+
+NtUser/NtGdi/win32k syscalls
+----------------------------
+
+A process automatically establishes a connection to a window station
and desktop
+when it first calls a USER32 or GDI32 function (other than the window
station or
+desktop functions). The process also get a Win32Proccess.
+
+A thread is automatically assigned a desktop when it first calls a
USER32 or GDI32
+function (other than the window station or desktop functions). The
thread also get
+a Win32Thread, a message queue and a thread input.
+
+This means that when you are in a win32k syscall function (other than
the window station
+or desktop functions) you can be 100% sure that the following exists:
+-the process WinSta
+-the win32process
+-the win32thread
+-the thread message queue
+-the thread input
+-the thread desktop
+-the process desktop (if there is such a thing)
+
+
+There is no need to validate any of these values, because they MUST
EXIST!
+
+ !!!!!NOTE!!!!
+Reactos is currently wrong on the thread desktop, process desktop and
process WinSta,
+since they can be NULL!!
+
_____
Modified: branches/win32k rewrite attempt/win32k/include/caret.h
--- branches/win32k rewrite attempt/win32k/include/caret.h
2005-08-04 12:41:42 UTC (rev 17043)
+++ branches/win32k rewrite attempt/win32k/include/caret.h
2005-08-04 16:32:18 UTC (rev 17044)
@@ -9,8 +9,6 @@
BOOL FASTCALL
UserSetCaretBlinkTime(UINT uMSeconds);
-BOOL FASTCALL
-UserSwitchCaretShowing(PVOID Info);
VOID FASTCALL
UserDrawCaret(HWND hWnd);
_____
Modified: branches/win32k rewrite attempt/win32k/include/msgqueue.h
--- branches/win32k rewrite attempt/win32k/include/msgqueue.h
2005-08-04 12:41:42 UTC (rev 17043)
+++ branches/win32k rewrite attempt/win32k/include/msgqueue.h
2005-08-04 16:32:18 UTC (rev 17044)
@@ -39,8 +39,39 @@
LIST_ENTRY ListEntry;
} USER_SENT_MESSAGE_NOTIFY, *PUSER_SENT_MESSAGE_NOTIFY;
+typedef struct _USER_THREAD_INPUT
+{
+#if 0
+ struct desktop *desktop; /* desktop that this
thread input belongs to */
+ user_handle_t focus; /* focus window */
+ user_handle_t capture; /* capture window */
+ user_handle_t active; /* active window */
+ user_handle_t menu_owner; /* current menu owner
window */
+ user_handle_t move_size; /* current moving/resizing
window */
+ user_handle_t caret; /* caret window */
+ rectangle_t caret_rect; /* caret rectangle */
+ int caret_hide; /* caret hide count */
+ int caret_state; /* caret on/off state */
+ struct list msg_list; /* list of hardware
messages */
+ unsigned char keystate[256]; /* state of each key */
+#endif
+ /* Current window with focus (ie. receives keyboard input) for this
queue. */
+ HWND FocusWindow;
+ /* Current capture window for this queue. */
+ HWND CaptureWindow;
+ /* Current active window for this queue. */
+ HWND ActiveWindow;
+ /* Current menu owner window for this queue */
+ HWND MenuOwner;
+ /* Current move/size window for this queue */
+ HWND MoveSize;
+ /* Caret information for this queue */
+ THRDCARETINFO CaretInfo;
+
+} USER_THREAD_INPUT, *PUSER_THREAD_INPUT;
+
typedef struct _USER_MESSAGE_QUEUE
{
/* Reference counter, only access this variable with interlocked
functions! */
@@ -73,24 +104,12 @@
HANDLE NewMessagesHandle;
/* Last time PeekMessage() was called. */
ULONG LastMsgRead;
- /* Current window with focus (ie. receives keyboard input) for this
queue. */
- HWND FocusWindow;
/* True if a window needs painting. */
BOOLEAN PaintPosted;
/* Count of paints pending. */
LONG PaintCount;
- /* Current active window for this queue. */
- HWND ActiveWindow;
- /* Current capture window for this queue. */
- HWND CaptureWindow;
- /* Current move/size window for this queue */
- HWND MoveSize;
- /* Current menu owner window for this queue */
- HWND MenuOwner;
/* Identifes the menu state */
BYTE MenuState;
- /* Caret information for this queue */
- PTHRDCARETINFO CaretInfo;
/* Window hooks */
PHOOKTABLE Hooks;
@@ -104,14 +123,15 @@
/* extra message information */
LPARAM ExtraInfo;
-
/* messages that are currently dispatched by other threads */
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;
+
+ PUSER_THREAD_INPUT Input;
+
} USER_MESSAGE_QUEUE, *PUSER_MESSAGE_QUEUE;
BOOL FASTCALL
@@ -144,8 +164,6 @@
MsqCleanupMessageQueue(PUSER_MESSAGE_QUEUE MessageQueue);
PUSER_MESSAGE_QUEUE FASTCALL
MsqCreateMessageQueue(struct _ETHREAD *Thread);
-VOID FASTCALL
-MsqDestroyMessageQueue(PUSER_MESSAGE_QUEUE MessageQueue);
PUSER_MESSAGE_QUEUE FASTCALL
MsqGetHardwareMessageQueue(VOID);
NTSTATUS FASTCALL
@@ -198,8 +216,6 @@
MsqInsertSystemMessage(MSG* Msg);
BOOL FASTCALL
MsqIsDblClk(LPMSG Msg, BOOL Remove);
-HWND FASTCALL
-MsqSetStateWindow(PUSER_MESSAGE_QUEUE MessageQueue, ULONG Type, HWND
hWnd);
inline BOOL MsqIsSignaled( PUSER_MESSAGE_QUEUE queue );
inline VOID MsqSetQueueBits( PUSER_MESSAGE_QUEUE queue, WORD bits );
@@ -223,8 +239,6 @@
#define IntReferenceMessageQueue(MsgQueue) \
InterlockedIncrement(&(MsgQueue)->References)
-VOID FASTCALL
-IntDereferenceMessageQueue(PUSER_MESSAGE_QUEUE MsgQueue);
#define IS_BTN_MESSAGE(message,code) \
_____
Modified: branches/win32k rewrite attempt/win32k/include/userfuncs.h
--- branches/win32k rewrite attempt/win32k/include/userfuncs.h
2005-08-04 12:41:42 UTC (rev 17043)
+++ branches/win32k rewrite attempt/win32k/include/userfuncs.h
2005-08-04 16:32:18 UTC (rev 17044)
@@ -111,6 +111,10 @@
BOOL FASTCALL
UserHideCaret(PWINDOW_OBJECT Wnd);
+BOOL FASTCALL
+UserSwitchCaretShowing(PTHRDCARETINFO Info);
+
+
/************************* WINPOS.C ****************************/
@@ -188,10 +192,21 @@
PMONITOR_OBJECT UserGetMonitorObject(HANDLE hCursor);
-/* msgqueue.c */
+/******************* MSGQUEUE.C ********************/
+VOID FASTCALL
+UserDereferenceQueue(PUSER_MESSAGE_QUEUE MsgQueue);
+
+VOID FASTCALL
+MsqDestroyMessageQueue(PW32THREAD WThread);
+
+HWND FASTCALL
+MsqSetStateWindow(PUSER_THREAD_INPUT Input, ULONG Type, HWND hWnd);
+
+inline PUSER_THREAD_INPUT FASTCALL UserGetCurrentInput();
+
VOID FASTCALL
-MsqRemoveWindowMessagesFromQueue(PWINDOW_OBJECT pWindow);
+MsqCleanupWindow(PWINDOW_OBJECT pWindow);
inline BOOL FASTCALL
UserMessageFilter(UINT Message, UINT FilterMin, UINT FilterMax);
@@ -218,6 +233,16 @@
UINT Message
);
+/**************************** NTUSER.C ************************/
+
+inline PVOID FASTCALL UserAlloc(SIZE_T bytes);
+inline PVOID FASTCALL UserAllocTag(SIZE_T bytes, ULONG tag);
+inline PVOID FASTCALL UserAllocZero(SIZE_T bytes);
+inline PVOID FASTCALL UserAllocZeroTag(SIZE_T bytes, ULONG tag);
+inline VOID FASTCALL UserFree(PVOID mem);
+
+
+
/* windc.c */
HDC FASTCALL
_____
Modified: branches/win32k rewrite attempt/win32k/include/window.h
--- branches/win32k rewrite attempt/win32k/include/window.h
2005-08-04 12:41:42 UTC (rev 17043)
+++ branches/win32k rewrite attempt/win32k/include/window.h
2005-08-04 16:32:18 UTC (rev 17044)
@@ -64,7 +64,7 @@
/* Handle of the window region. */
HANDLE WindowRegion;
/* Lock to be held when manipulating (NC)UpdateRegion */
- FAST_MUTEX UpdateLock;
+ // FAST_MUTEX UpdateLock;
/* Pointer to the owning thread's message queue. */
PUSER_MESSAGE_QUEUE MessageQueue;
struct _WINDOW_OBJECT* FirstChild;
_____
Modified: branches/win32k rewrite attempt/win32k/main/dllmain.c
--- branches/win32k rewrite attempt/win32k/main/dllmain.c
2005-08-04 12:41:42 UTC (rev 17043)
+++ branches/win32k rewrite attempt/win32k/main/dllmain.c
2005-08-04 16:32:18 UTC (rev 17044)
@@ -47,6 +47,8 @@
DPRINT("Enter Win32kProcessCallback\n");
UserEnterExclusive();
+CHECKPOINT1;
+
/* Get the Win32 Process */
Win32Process = PsGetProcessWin32Process(Process);
@@ -71,7 +73,7 @@
DPRINT("Creating W32 process PID:%d at IRQ level: %lu\n",
Process->UniqueProcessId, KeGetCurrentIrql());
InitializeListHead(&Win32Process->ClassListHead);
- ExInitializeFastMutex(&Win32Process->ClassListLock);
+// ExInitializeFastMutex(&Win32Process->ClassListLock);
InitializeListHead(&Win32Process->MenuListHead);
ExInitializeFastMutex(&Win32Process->MenuListLock);
@@ -139,6 +141,8 @@
DPRINT("Enter Win32kThreadCallback\n");
UserEnterExclusive();
+CHECKPOINT1;
+
Process = Thread->ThreadsProcess;
/* Get the Win32 Thread */
@@ -229,7 +233,6 @@
Win32Thread->KeyboardLayout = W32kGetDefaultKeyLayout();
Win32Thread->MessagePumpHookValue = 0;
InitializeListHead(&Win32Thread->WindowListHead);
- ExInitializeFastMutex(&Win32Thread->WindowListLock);
InitializeListHead(&Win32Thread->W32CallbackListHead);
}
else
@@ -238,15 +241,26 @@
Win32Thread->IsExiting = TRUE;
HOOK_DestroyThreadHooks(Thread);
+CHECKPOINT1;
UnregisterThreadHotKeys(Thread);
+CHECKPOINT1;
DestroyThreadWindows(Thread);
+CHECKPOINT1;
IntBlockInput(Win32Thread, FALSE);
- MsqDestroyMessageQueue(Win32Thread->MessageQueue);
+CHECKPOINT1;
+ /* all windows for this thread must de totally destroyed at this
point. */
+ ASSERT(IsListEmpty(&Win32Thread->WindowListHead));
+ MsqDestroyMessageQueue(Win32Thread);
+CHECKPOINT1;
IntCleanupThreadCallbacks(Win32Thread);
+CHECKPOINT1;
+ /* FIXME: having a thresd desktop is mandatory!! */
if(Win32Thread->Desktop != NULL)
{
+ CHECKPOINT1;
ObDereferenceObject(Win32Thread->Desktop);
}
+CHECKPOINT1;
}
RETURN( STATUS_SUCCESS);
@@ -316,6 +330,7 @@
BOOLEAN Result;
W32_CALLOUT_DATA CalloutData;
+CHECKPOINT1;
/*
* Register user mode call interface
* (system service table index = 1)
@@ -330,7 +345,7 @@
DPRINT1("Adding system services failed!\n");
return STATUS_UNSUCCESSFUL;
}
-
+CHECKPOINT1;
/*
* Register Object Manager Callbacks
*/
@@ -342,14 +357,15 @@
CalloutData.DesktopDelete = IntDesktopObjectDelete;
CalloutData.W32ProcessCallout = Win32kProcessCallback;
CalloutData.W32ThreadCallout = Win32kThreadCallback;
-
+ CHECKPOINT1;
/*
* Register our per-process and per-thread structures.
*/
PsEstablishWin32Callouts(&CalloutData);
-
+CHECKPOINT1;
Status = IntUserCreateSharedSectionPool(48 * 1024 * 1024, /* 48 MB by
default */
&SessionSharedSectionPool);
+ CHECKPOINT1;
if (!NT_SUCCESS(Status))
{
DPRINT1("Failed to initialize the shared section pool: Status
0x%x\n", Status);
_____
Modified: branches/win32k rewrite attempt/win32k/ntuser/accelerator.c
--- branches/win32k rewrite attempt/win32k/ntuser/accelerator.c
2005-08-04 12:41:42 UTC (rev 17043)
+++ branches/win32k rewrite attempt/win32k/ntuser/accelerator.c
2005-08-04 16:32:18 UTC (rev 17044)
@@ -51,7 +51,7 @@
#include <w32k.h>
-//#define NDEBUG
+#define NDEBUG
#include <debug.h>
/* FUNCTIONS
*****************************************************************/
@@ -203,41 +203,36 @@
BOOLEAN
STDCALL
-NtUserDestroyAcceleratorTable(HACCEL Table)
+NtUserDestroyAcceleratorTable(HACCEL hAccel)
{
- PACCELERATOR_TABLE AcceleratorTable;
+ PACCELERATOR_TABLE Accel;
DECLARE_RETURN(BOOLEAN);
/* FIXME: If the handle table is from a call to
LoadAcceleratorTable, decrement it's
usage count (and return TRUE).
FIXME: Destroy only tables created using CreateAcceleratorTable.
*/
- DPRINT("Enter NtUserDestroyAcceleratorTable(Table %x)\n", Table);
+ DPRINT("Enter NtUserDestroyAcceleratorTable(Table %x)\n", Accel);
UserEnterExclusive();
- //FIXME
- AcceleratorTable = UserGetAccelObject(Table);
+ Accel = UserGetAccelObject(hAccel);
- if (!AcceleratorTable)
+ if (!Accel)
{
SetLastWin32Error(ERROR_INVALID_ACCEL_HANDLE);
DPRINT1("E2\n");
RETURN(FALSE);
}
-// ObmCloseHandle(WindowStation->HandleTable, Table);
-
- if (AcceleratorTable->Table != NULL)
+ if (Accel->Table != NULL)
{
- ExFreePool(AcceleratorTable->Table);
+ ExFreePool(Accel->Table);
}
-// ObDereferenceObject(WindowStation);
-
RETURN(TRUE);
CLEANUP:
- DPRINT("Leave NtUserDestroyAcceleratorTable(Table %x) = %i\n",
Table,_ret_);
+ DPRINT("Leave NtUserDestroyAcceleratorTable(Table %x) = %i\n",
Accel,_ret_);
UserLeave();
END_CLEANUP;
}
@@ -443,7 +438,6 @@
HACCEL Table,
LPMSG Message)
{
- PWINSTATION_OBJECT WindowStation;
PACCELERATOR_TABLE AcceleratorTable;
ULONG i;
DECLARE_RETURN(int);
@@ -490,7 +484,6 @@
AcceleratorTable->Table[i].fVirt,
AcceleratorTable->Table[i].key,
AcceleratorTable->Table[i].cmd))
{
- ObDereferenceObject(WindowStation);
DPRINT("NtUserTranslateAccelerator(hWnd %x, Table %x, Message
%p) = %i end\n",
hWnd, Table, Message, 1);
RETURN(1);
_____
Modified: branches/win32k rewrite attempt/win32k/ntuser/caret.c
--- branches/win32k rewrite attempt/win32k/ntuser/caret.c
2005-08-04 12:41:42 UTC (rev 17043)
+++ branches/win32k rewrite attempt/win32k/ntuser/caret.c
2005-08-04 16:32:18 UTC (rev 17044)
@@ -11,7 +11,7 @@
#include <w32k.h>
-//#define NDEBUG
+#define NDEBUG
#include <debug.h>
#define MIN_CARETBLINKRATE 100
@@ -35,19 +35,20 @@
BOOL FASTCALL
UserDestroyCaret(PW32THREAD Win32Thread /* unused param!!!*/)
{
- PUSER_MESSAGE_QUEUE ThreadQueue;
+ PUSER_MESSAGE_QUEUE Queue;
- ThreadQueue = UserGetCurrentQueue();
+ Queue = UserGetCurrentQueue();
- if(!ThreadQueue || !ThreadQueue->CaretInfo)
+ //FIXME: can queue be NULL?
+ if(!Queue)
return FALSE;
- IntHideCaret(ThreadQueue->CaretInfo);
- ThreadQueue->CaretInfo->Bitmap = (HBITMAP)0;
- ThreadQueue->CaretInfo->hWnd = (HWND)0;
- ThreadQueue->CaretInfo->Size.cx = ThreadQueue->CaretInfo->Size.cy =
0;
- ThreadQueue->CaretInfo->Showing = 0;
- ThreadQueue->CaretInfo->Visible = 0;
+ IntHideCaret(&Queue->Input->CaretInfo);
+ Queue->Input->CaretInfo.Bitmap = (HBITMAP)0;
+ Queue->Input->CaretInfo.hWnd = (HWND)0;
+ Queue->Input->CaretInfo.Size.cx = Queue->Input->CaretInfo.Size.cy =
0;
+ Queue->Input->CaretInfo.Showing = 0;
+ Queue->Input->CaretInfo.Visible = 0;
return TRUE;
}
@@ -162,20 +163,20 @@
BOOL FASTCALL
UserSetCaretPos(int X, int Y)
{
- PUSER_MESSAGE_QUEUE ThreadQueue;
+ PUSER_THREAD_INPUT Input;
+
+ Input = UserGetCurrentInput();
- ThreadQueue = UserGetCurrentQueue();
-
- if(ThreadQueue->CaretInfo->hWnd)
+ if(Input->CaretInfo.hWnd)
{
- if(ThreadQueue->CaretInfo->Pos.x != X ||
ThreadQueue->CaretInfo->Pos.y != Y)
+ if(Input->CaretInfo.Pos.x != X || Input->CaretInfo.Pos.y != Y)
{
- IntHideCaret(ThreadQueue->CaretInfo);
- ThreadQueue->CaretInfo->Showing = 0;
- ThreadQueue->CaretInfo->Pos.x = X;
- ThreadQueue->CaretInfo->Pos.y = Y;
- IntSendMessage(ThreadQueue->CaretInfo->hWnd, WM_SYSTIMER,
IDCARETTIMER, 0);
- UserSetTimer(GetWnd(ThreadQueue->CaretInfo->hWnd),
IDCARETTIMER, UserGetCaretBlinkTime(), NULL, TRUE);
+ IntHideCaret(&Input->CaretInfo);
+ Input->CaretInfo.Showing = 0;
+ Input->CaretInfo.Pos.x = X;
+ Input->CaretInfo.Pos.y = Y;
+ IntSendMessage(Input->CaretInfo.hWnd, WM_SYSTIMER,
IDCARETTIMER, 0);
+ UserSetTimer(GetWnd(Input->CaretInfo.hWnd), IDCARETTIMER,
UserGetCaretBlinkTime(), NULL, TRUE);
}
return TRUE;
}
@@ -184,17 +185,18 @@
}
BOOL FASTCALL
-UserSwitchCaretShowing(PVOID Info)
+UserSwitchCaretShowing(PTHRDCARETINFO Info)
{
- PUSER_MESSAGE_QUEUE ThreadQueue;
+ PUSER_THREAD_INPUT Input;
- ThreadQueue = UserGetCurrentQueue();
+ Input = UserGetCurrentInput();
- if(ThreadQueue->CaretInfo->hWnd)
+ if(Input->CaretInfo.hWnd)
{
- ThreadQueue->CaretInfo->Showing =
(ThreadQueue->CaretInfo->Showing ? 0 : 1);
+ Input->CaretInfo.Showing = !Input->CaretInfo.Showing;
//FIXME: internal. no SEH here!
- MmCopyToCaller(Info, ThreadQueue->CaretInfo,
sizeof(THRDCARETINFO));
+ MmCopyToCaller(Info, &Input->CaretInfo, sizeof(THRDCARETINFO));
+ //*Info = Input->CaretInfo;
return TRUE;
}
@@ -204,15 +206,15 @@
VOID FASTCALL
UserDrawCaret(HWND hWnd /* FIXME: Unused param?!?! */)
{
- PUSER_MESSAGE_QUEUE ThreadQueue;
+ PUSER_THREAD_INPUT Input;
- ThreadQueue = UserGetCurrentQueue();
+ Input = UserGetCurrentInput();
- if(ThreadQueue->CaretInfo->hWnd &&
ThreadQueue->CaretInfo->Visible
&&
- ThreadQueue->CaretInfo->Showing)
+ if(Input->CaretInfo.hWnd && Input->CaretInfo.Visible &&
+ Input->CaretInfo.Showing)
{
- IntSendMessage(ThreadQueue->CaretInfo->hWnd, WM_SYSTIMER,
IDCARETTIMER, 0);
- ThreadQueue->CaretInfo->Showing = 1;
+ IntSendMessage(Input->CaretInfo.hWnd, WM_SYSTIMER, IDCARETTIMER,
0);
+ Input->CaretInfo.Showing = 1;
}
}
@@ -227,7 +229,7 @@
int nHeight)
{
PWINDOW_OBJECT WindowObject;
- PUSER_MESSAGE_QUEUE ThreadQueue;
+ PUSER_THREAD_INPUT Input;
DECLARE_RETURN(BOOL);
DPRINT("Enter NtUserCreateCaret\n");
@@ -246,28 +248,28 @@
RETURN(FALSE);
}
- ThreadQueue = UserGetCurrentQueue();
+ Input = UserGetCurrentInput();
- if (ThreadQueue->CaretInfo->Visible)
+ if (Input->CaretInfo.Visible)
{
UserKillTimer(WindowObject, IDCARETTIMER, TRUE);
- IntHideCaret(ThreadQueue->CaretInfo);
+ IntHideCaret(&Input->CaretInfo);
}
- ThreadQueue->CaretInfo->hWnd = hWnd;
+ Input->CaretInfo.hWnd = hWnd;
if(hBitmap)
{
- ThreadQueue->CaretInfo->Bitmap = hBitmap;
- ThreadQueue->CaretInfo->Size.cx = ThreadQueue->CaretInfo->Size.cy
= 0;
+ Input->CaretInfo.Bitmap = hBitmap;
+ Input->CaretInfo.Size.cx = Input->CaretInfo.Size.cy = 0;
}
else
{
- ThreadQueue->CaretInfo->Bitmap = (HBITMAP)0;
- ThreadQueue->CaretInfo->Size.cx = nWidth;
- ThreadQueue->CaretInfo->Size.cy = nHeight;
+ Input->CaretInfo.Bitmap = (HBITMAP)0;
+ Input->CaretInfo.Size.cx = nWidth;
+ Input->CaretInfo.Size.cy = nHeight;
}
- ThreadQueue->CaretInfo->Visible = 0;
- ThreadQueue->CaretInfo->Showing = 0;
+ Input->CaretInfo.Visible = 0;
+ Input->CaretInfo.Showing = 0;
RETURN(TRUE);
@@ -300,16 +302,16 @@
NtUserGetCaretPos(
LPPOINT lpPoint)
{
- PUSER_MESSAGE_QUEUE ThreadQueue;
+ PUSER_THREAD_INPUT Input;
NTSTATUS Status;
DECLARE_RETURN(BOOL);
DPRINT("Enter NtUserGetCaretPos\n");
UserEnterExclusive();
- ThreadQueue = UserGetCurrentQueue();
+ Input = UserGetCurrentInput();
- Status = MmCopyToCaller(lpPoint, &(ThreadQueue->CaretInfo->Pos),
sizeof(POINT));
+ Status = MmCopyToCaller(lpPoint, &(Input->CaretInfo.Pos),
sizeof(POINT));
if(!NT_SUCCESS(Status))
{
SetLastNtError(Status);
@@ -331,7 +333,7 @@
HWND hWnd)
{
PWINDOW_OBJECT WindowObject;
- PUSER_MESSAGE_QUEUE ThreadQueue;
+ PUSER_THREAD_INPUT Input;
DECLARE_RETURN(BOOL);
DPRINT1("Enter NtUserHideCaret\n");
@@ -350,21 +352,21 @@
RETURN(FALSE);
}
- ThreadQueue = UserGetCurrentQueue();
+ Input = UserGetCurrentInput();
- if(ThreadQueue->CaretInfo->hWnd != hWnd)
+ if(Input->CaretInfo.hWnd != hWnd)
{
SetLastWin32Error(ERROR_ACCESS_DENIED);
RETURN(FALSE);
}
- if(ThreadQueue->CaretInfo->Visible)
+ if(Input->CaretInfo.Visible)
{
UserKillTimer(WindowObject, IDCARETTIMER, TRUE);
- IntHideCaret(ThreadQueue->CaretInfo);
- ThreadQueue->CaretInfo->Visible = 0;
- ThreadQueue->CaretInfo->Showing = 0;
+ IntHideCaret(&Input->CaretInfo);
+ Input->CaretInfo.Visible = 0;
+ Input->CaretInfo.Showing = 0;
}
RETURN(TRUE);
@@ -380,7 +382,7 @@
BOOL FASTCALL
UserHideCaret(PWINDOW_OBJECT Wnd)
{
- PUSER_MESSAGE_QUEUE ThreadQueue;
+ PUSER_THREAD_INPUT Input;
ASSERT(Wnd);
@@ -390,22 +392,22 @@
return(FALSE);
}
- ThreadQueue = UserGetCurrentQueue();
+ Input = UserGetCurrentInput();
- if(ThreadQueue->CaretInfo->hWnd != GetHwnd(Wnd))
+ if(Input->CaretInfo.hWnd != GetHwnd(Wnd))
{
SetLastWin32Error(ERROR_ACCESS_DENIED);
return(FALSE);
}
- if(ThreadQueue->CaretInfo->Visible)
+ if(Input->CaretInfo.Visible)
{
UserKillTimer(Wnd, IDCARETTIMER, TRUE);
//FIXME: fix IntHideCaret vs. NtHideCaret vs. UserHideCaret mess
- IntHideCaret(ThreadQueue->CaretInfo);
- ThreadQueue->CaretInfo->Visible = 0;
- ThreadQueue->CaretInfo->Showing = 0;
+ IntHideCaret(&Input->CaretInfo);
+ Input->CaretInfo.Visible = 0;
+ Input->CaretInfo.Showing = 0;
}
return(TRUE);
@@ -443,7 +445,7 @@
BOOL FASTCALL
UserShowCaret(PWINDOW_OBJECT Wnd)
{
- PUSER_MESSAGE_QUEUE ThreadQueue;
+ PUSER_THREAD_INPUT Input;
ASSERT(Wnd);
@@ -453,20 +455,20 @@
return(FALSE);
}
- ThreadQueue = UserGetCurrentQueue();
+ Input = UserGetCurrentInput();
- if(ThreadQueue->CaretInfo->hWnd != GetHwnd(Wnd))
+ if(Input->CaretInfo.hWnd != GetHwnd(Wnd))
{
SetLastWin32Error(ERROR_ACCESS_DENIED);
return(FALSE);
}
- if(!ThreadQueue->CaretInfo->Visible)
+ if(!Input->CaretInfo.Visible)
{
- ThreadQueue->CaretInfo->Visible = 1;
- if(!ThreadQueue->CaretInfo->Showing)
+ Input->CaretInfo.Visible = 1;
+ if(!Input->CaretInfo.Showing)
{
- IntSendMessage(ThreadQueue->CaretInfo->hWnd, WM_SYSTIMER,
IDCARETTIMER, 0);
+ IntSendMessage(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-04 12:41:42 UTC (rev 17043)
+++ branches/win32k rewrite attempt/win32k/ntuser/class.c
2005-08-04 16:32:18 UTC (rev 17044)
@@ -30,7 +30,7 @@
#include <w32k.h>
-//#define NDEBUG
+#define NDEBUG
#include <debug.h>
/* FUNCTIONS
*****************************************************************/
_____
Modified: branches/win32k rewrite attempt/win32k/ntuser/clipboard.c
--- branches/win32k rewrite attempt/win32k/ntuser/clipboard.c
2005-08-04 12:41:42 UTC (rev 17043)
+++ branches/win32k rewrite attempt/win32k/ntuser/clipboard.c
2005-08-04 16:32:18 UTC (rev 17044)
@@ -26,7 +26,7 @@
#include <w32k.h>
-//#define NDEBUG
+#define NDEBUG
#include <debug.h>
#define CHECK_LOCK
\
_____
Modified: branches/win32k rewrite attempt/win32k/ntuser/csr.c
--- branches/win32k rewrite attempt/win32k/ntuser/csr.c 2005-08-04
12:41:42 UTC (rev 17043)
+++ branches/win32k rewrite attempt/win32k/ntuser/csr.c 2005-08-04
16:32:18 UTC (rev 17044)
@@ -9,7 +9,7 @@
#include <w32k.h>
-//#define NDEBUG
+#define NDEBUG
#include <debug.h>
static HANDLE WindowsApiPort = NULL;
_____
Modified: branches/win32k rewrite attempt/win32k/ntuser/cursoricon.c
--- branches/win32k rewrite attempt/win32k/ntuser/cursoricon.c
2005-08-04 12:41:42 UTC (rev 17043)
+++ branches/win32k rewrite attempt/win32k/ntuser/cursoricon.c
2005-08-04 16:32:18 UTC (rev 17044)
@@ -38,12 +38,11 @@
#include <w32k.h>
-//#define NDEBUG
+#define NDEBUG
#include <debug.h>
static PAGED_LOOKASIDE_LIST ProcessLookasideList;
static LIST_ENTRY CurIconList;
-//static FAST_MUTEX CurIconListLock;
/* Look up the location of the cursor in the GDIDEVICE structure
* when all we know is the window station object
_____
Modified: branches/win32k rewrite attempt/win32k/ntuser/desktop.c
--- branches/win32k rewrite attempt/win32k/ntuser/desktop.c
2005-08-04 12:41:42 UTC (rev 17043)
+++ branches/win32k rewrite attempt/win32k/ntuser/desktop.c
2005-08-04 16:32:18 UTC (rev 17044)
@@ -31,12 +31,17 @@
#include <w32k.h>
-//#define NDEBUG
+#define NDEBUG
#include <debug.h>
/* GLOBALS
*******************************************************************/
/* Currently active desktop */
+
+/*
+ FIXME: this is not global data. this belongs in the (inter)active
window station
+ (current input desktop = interactive desktop = InputDesktop = active
desktop on interactive winsta)
+*/
PDESKTOP_OBJECT InputDesktop = NULL;
HDESK InputDesktopHandle = NULL;
HDC ScreenDeviceContext = NULL;
_____
Modified: branches/win32k rewrite attempt/win32k/ntuser/focus.c
--- branches/win32k rewrite attempt/win32k/ntuser/focus.c
2005-08-04 12:41:42 UTC (rev 17043)
+++ branches/win32k rewrite attempt/win32k/ntuser/focus.c
2005-08-04 16:32:18 UTC (rev 17044)
@@ -21,21 +21,21 @@
#include <w32k.h>
-//#define NDEBUG
+#define NDEBUG
#include <debug.h>
PWINDOW_OBJECT FASTCALL
UserGetCaptureWindow()
{
PUSER_MESSAGE_QUEUE ForegroundQueue = UserGetFocusMessageQueue();
- return ForegroundQueue != NULL ?
GetWnd(ForegroundQueue->CaptureWindow) : 0;
+ return ForegroundQueue != NULL ?
GetWnd(ForegroundQueue->Input->CaptureWindow) : 0;
}
PWINDOW_OBJECT FASTCALL
UserGetFocusWindow()
{
PUSER_MESSAGE_QUEUE ForegroundQueue = UserGetFocusMessageQueue();
- return ForegroundQueue != NULL ?
GetWnd(ForegroundQueue->FocusWindow) : 0;
+ return ForegroundQueue != NULL ?
GetWnd(ForegroundQueue->Input->FocusWindow) : 0;
}
PWINDOW_OBJECT FASTCALL
@@ -43,7 +43,7 @@
{
PUSER_MESSAGE_QUEUE ThreadQueue;
ThreadQueue = UserGetCurrentQueue();
- return ThreadQueue != NULL ? GetWnd(ThreadQueue->FocusWindow) : 0;
+ return ThreadQueue != NULL ? GetWnd(ThreadQueue->Input->FocusWindow)
: 0;
}
VOID FASTCALL
@@ -169,7 +169,7 @@
if (PrevForegroundQueue != 0)
{
//FIXME uhm... focus er ikke samme som active window... er
UserGetFocusMessageQueue riktig?
- hWndPrev = PrevForegroundQueue->ActiveWindow;
+ hWndPrev = PrevForegroundQueue->Input->ActiveWindow;
}
if (hWndPrev == hWnd)
@@ -179,7 +179,7 @@
}
hWndFocusPrev = (PrevForegroundQueue == FocusWindow->MessageQueue
- ? FocusWindow->MessageQueue->FocusWindow : NULL);
+ ? FocusWindow->MessageQueue->Input->FocusWindow :
NULL);
/* FIXME: Call hooks. */
@@ -189,11 +189,11 @@
IntSetFocusMessageQueue(Window->MessageQueue);
if (Window->MessageQueue)
{
- Window->MessageQueue->ActiveWindow = hWnd;
+ Window->MessageQueue->Input->ActiveWindow = hWnd;
}
if (FocusWindow->MessageQueue)
{
- FocusWindow->MessageQueue->FocusWindow = hWndFocus;
+ FocusWindow->MessageQueue->Input->FocusWindow = hWndFocus;
}
if (PrevForegroundQueue != Window->MessageQueue)
@@ -277,14 +277,14 @@
// return 0;
// else
// {
- WndPrev = IntGetWindowObject(ThreadQueue->ActiveWindow);
+ WndPrev =
IntGetWindowObject(ThreadQueue->Input->ActiveWindow);
return( WndPrev ? WndPrev->Self : NULL );
// }
}
}
- WndPrev = IntGetWindowObject(ThreadQueue->ActiveWindow);
+ WndPrev = IntGetWindowObject(ThreadQueue->Input->ActiveWindow);
if (WndPrev == Wnd)
{
return WndPrev;
@@ -294,7 +294,7 @@
/* FIXME: Call hooks. */
- ThreadQueue->ActiveWindow = GetHwnd(Wnd);
+ ThreadQueue->Input->ActiveWindow = GetHwnd(Wnd);
//FIXME!!! hva hvis prev active var invalid dvs. NULL?
//FIXME!!! hva hvis Wnd er NULL?
@@ -315,13 +315,13 @@
ThreadQueue = UserGetCurrentQueue();
ASSERT(ThreadQueue != 0);
- hWndPrev = ThreadQueue->FocusWindow;
+ hWndPrev = ThreadQueue->Input->FocusWindow;
if (hWndPrev == GetHwnd(Wnd))
{
return GetWnd(hWndPrev);
}
- ThreadQueue->FocusWindow = GetHwnd(Wnd);
+ ThreadQueue->Input->FocusWindow = GetHwnd(Wnd);
IntSendKillFocusMessages(GetWnd(hWndPrev), Wnd);
IntSendSetFocusMessages(GetWnd(hWndPrev), Wnd);
@@ -357,8 +357,8 @@
{
PUSER_MESSAGE_QUEUE ForegroundQueue = UserGetFocusMessageQueue();
- if (ForegroundQueue && ForegroundQueue->ActiveWindow)
- return IntGetWindowObject(ForegroundQueue->ActiveWindow);
+ if (ForegroundQueue && ForegroundQueue->Input->ActiveWindow)
+ return IntGetWindowObject(ForegroundQueue->Input->ActiveWindow);
return NULL;
}
@@ -390,18 +390,18 @@
PUSER_MESSAGE_QUEUE ThreadQueue;
ThreadQueue = UserGetCurrentQueue();
- if (ThreadQueue && ThreadQueue->ActiveWindow)
+ if (ThreadQueue && ThreadQueue->Input->ActiveWindow)
{
PWINDOW_OBJECT ActiveWnd;
- if ((ActiveWnd = IntGetWindowObject(ThreadQueue->ActiveWindow)))
+ if ((ActiveWnd =
IntGetWindowObject(ThreadQueue->Input->ActiveWindow)))
{
return ActiveWnd;
}
else
{
/* active hwnd not valid. set to NULL */
- ThreadQueue->ActiveWindow = NULL;
+ ThreadQueue->Input->ActiveWindow = NULL;
}
}
return NULL;
@@ -466,7 +466,7 @@
UserEnterExclusive();
ThreadQueue = UserGetCurrentQueue();//FIXME??? current??
- RETURN(ThreadQueue ? ThreadQueue->CaptureWindow : 0);
+ RETURN(ThreadQueue ? ThreadQueue->Input->CaptureWindow : 0);
CLEANUP:
DPRINT("Leave NtUserGetCapture, ret=%i\n",_ret_);
@@ -496,17 +496,17 @@
RETURN(NULL);
}
}
- hWndPrev = MsqSetStateWindow(ThreadQueue, MSQ_STATE_CAPTURE, hWnd);
+ hWndPrev = MsqSetStateWindow(ThreadQueue->Input, MSQ_STATE_CAPTURE,
hWnd);
/* also remove other windows if not capturing anymore */
if(hWnd == NULL)
{
- MsqSetStateWindow(ThreadQueue, MSQ_STATE_MENUOWNER, NULL);
- MsqSetStateWindow(ThreadQueue, MSQ_STATE_MOVESIZE, NULL);
+ MsqSetStateWindow(ThreadQueue->Input, MSQ_STATE_MENUOWNER, NULL);
+ MsqSetStateWindow(ThreadQueue->Input, MSQ_STATE_MOVESIZE, NULL);
}
IntPostOrSendMessage(hWndPrev, WM_CAPTURECHANGED, 0, (LPARAM)hWnd);
- ThreadQueue->CaptureWindow = hWnd;
+ ThreadQueue->Input->CaptureWindow = hWnd;
RETURN(hWndPrev);
@@ -544,7 +544,7 @@
if (Wnd->Style & (WS_MINIMIZE | WS_DISABLED))
{
- RETURN(ThreadQueue ? ThreadQueue->FocusWindow : 0);
[truncated at 1000 lines; 1198 more skipped]