mirror of
https://github.com/reactos/reactos.git
synced 2025-07-04 05:11:26 +00:00
[WIN32K:NTUSER]
- Make CaretInfo part of the USER_MESSAGE_QUEUE structure since the pointer can no longer change CORE-10395 svn path=/trunk/; revision=69679
This commit is contained in:
parent
1bfbbb69c2
commit
910e2d7dc7
7 changed files with 56 additions and 58 deletions
|
@ -101,7 +101,7 @@ CaretSystemTimerProc(HWND hwnd,
|
||||||
pti = PsGetCurrentThreadWin32Thread();
|
pti = PsGetCurrentThreadWin32Thread();
|
||||||
ThreadQueue = pti->MessageQueue;
|
ThreadQueue = pti->MessageQueue;
|
||||||
|
|
||||||
if (ThreadQueue->CaretInfo->hWnd != hwnd)
|
if (ThreadQueue->CaretInfo.hWnd != hwnd)
|
||||||
{
|
{
|
||||||
TRACE("Not the same caret window!\n");
|
TRACE("Not the same caret window!\n");
|
||||||
return;
|
return;
|
||||||
|
@ -126,8 +126,8 @@ CaretSystemTimerProc(HWND hwnd,
|
||||||
{
|
{
|
||||||
case IDCARETTIMER:
|
case IDCARETTIMER:
|
||||||
{
|
{
|
||||||
ThreadQueue->CaretInfo->Showing = (ThreadQueue->CaretInfo->Showing ? 0 : 1);
|
ThreadQueue->CaretInfo.Showing = (ThreadQueue->CaretInfo.Showing ? 0 : 1);
|
||||||
co_IntDrawCaret(pWnd, ThreadQueue->CaretInfo);
|
co_IntDrawCaret(pWnd, &ThreadQueue->CaretInfo);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
|
@ -155,18 +155,18 @@ co_IntDestroyCaret(PTHREADINFO Win32Thread)
|
||||||
{
|
{
|
||||||
PUSER_MESSAGE_QUEUE ThreadQueue;
|
PUSER_MESSAGE_QUEUE ThreadQueue;
|
||||||
PWND pWnd;
|
PWND pWnd;
|
||||||
ThreadQueue = (PUSER_MESSAGE_QUEUE)Win32Thread->MessageQueue;
|
ThreadQueue = Win32Thread->MessageQueue;
|
||||||
|
|
||||||
if(!ThreadQueue || !ThreadQueue->CaretInfo)
|
if (!ThreadQueue)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
pWnd = ValidateHwndNoErr(ThreadQueue->CaretInfo->hWnd);
|
pWnd = ValidateHwndNoErr(ThreadQueue->CaretInfo.hWnd);
|
||||||
co_IntHideCaret(ThreadQueue->CaretInfo);
|
co_IntHideCaret(&ThreadQueue->CaretInfo);
|
||||||
ThreadQueue->CaretInfo->Bitmap = (HBITMAP)0;
|
ThreadQueue->CaretInfo.Bitmap = (HBITMAP)0;
|
||||||
ThreadQueue->CaretInfo->hWnd = (HWND)0;
|
ThreadQueue->CaretInfo.hWnd = (HWND)0;
|
||||||
ThreadQueue->CaretInfo->Size.cx = ThreadQueue->CaretInfo->Size.cy = 0;
|
ThreadQueue->CaretInfo.Size.cx = ThreadQueue->CaretInfo.Size.cy = 0;
|
||||||
ThreadQueue->CaretInfo->Showing = 0;
|
ThreadQueue->CaretInfo.Showing = 0;
|
||||||
ThreadQueue->CaretInfo->Visible = 0;
|
ThreadQueue->CaretInfo.Visible = 0;
|
||||||
if (pWnd)
|
if (pWnd)
|
||||||
{
|
{
|
||||||
IntNotifyWinEvent(EVENT_OBJECT_DESTROY, pWnd, OBJID_CARET, CHILDID_SELF, 0);
|
IntNotifyWinEvent(EVENT_OBJECT_DESTROY, pWnd, OBJID_CARET, CHILDID_SELF, 0);
|
||||||
|
@ -201,16 +201,16 @@ co_IntSetCaretPos(int X, int Y)
|
||||||
pti = PsGetCurrentThreadWin32Thread();
|
pti = PsGetCurrentThreadWin32Thread();
|
||||||
ThreadQueue = pti->MessageQueue;
|
ThreadQueue = pti->MessageQueue;
|
||||||
|
|
||||||
if(ThreadQueue->CaretInfo->hWnd)
|
if(ThreadQueue->CaretInfo.hWnd)
|
||||||
{
|
{
|
||||||
pWnd = UserGetWindowObject(ThreadQueue->CaretInfo->hWnd);
|
pWnd = UserGetWindowObject(ThreadQueue->CaretInfo.hWnd);
|
||||||
if(ThreadQueue->CaretInfo->Pos.x != X || ThreadQueue->CaretInfo->Pos.y != Y)
|
if(ThreadQueue->CaretInfo.Pos.x != X || ThreadQueue->CaretInfo.Pos.y != Y)
|
||||||
{
|
{
|
||||||
co_IntHideCaret(ThreadQueue->CaretInfo);
|
co_IntHideCaret(&ThreadQueue->CaretInfo);
|
||||||
ThreadQueue->CaretInfo->Showing = 1;
|
ThreadQueue->CaretInfo.Showing = 1;
|
||||||
ThreadQueue->CaretInfo->Pos.x = X;
|
ThreadQueue->CaretInfo.Pos.x = X;
|
||||||
ThreadQueue->CaretInfo->Pos.y = Y;
|
ThreadQueue->CaretInfo.Pos.y = Y;
|
||||||
co_IntDrawCaret(pWnd, ThreadQueue->CaretInfo);
|
co_IntDrawCaret(pWnd, &ThreadQueue->CaretInfo);
|
||||||
|
|
||||||
IntSetTimer(pWnd, IDCARETTIMER, gpsi->dtCaretBlink, CaretSystemTimerProc, TMRF_SYSTEM);
|
IntSetTimer(pWnd, IDCARETTIMER, gpsi->dtCaretBlink, CaretSystemTimerProc, TMRF_SYSTEM);
|
||||||
IntNotifyWinEvent(EVENT_OBJECT_LOCATIONCHANGE, pWnd, OBJID_CARET, CHILDID_SELF, 0);
|
IntNotifyWinEvent(EVENT_OBJECT_LOCATIONCHANGE, pWnd, OBJID_CARET, CHILDID_SELF, 0);
|
||||||
|
@ -237,20 +237,20 @@ BOOL FASTCALL co_UserHideCaret(PWND Window OPTIONAL)
|
||||||
pti = PsGetCurrentThreadWin32Thread();
|
pti = PsGetCurrentThreadWin32Thread();
|
||||||
ThreadQueue = pti->MessageQueue;
|
ThreadQueue = pti->MessageQueue;
|
||||||
|
|
||||||
if(Window && ThreadQueue->CaretInfo->hWnd != Window->head.h)
|
if(Window && ThreadQueue->CaretInfo.hWnd != Window->head.h)
|
||||||
{
|
{
|
||||||
EngSetLastError(ERROR_ACCESS_DENIED);
|
EngSetLastError(ERROR_ACCESS_DENIED);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(ThreadQueue->CaretInfo->Visible)
|
if(ThreadQueue->CaretInfo.Visible)
|
||||||
{
|
{
|
||||||
PWND pwnd = UserGetWindowObject(ThreadQueue->CaretInfo->hWnd);
|
PWND pwnd = UserGetWindowObject(ThreadQueue->CaretInfo.hWnd);
|
||||||
IntKillTimer(pwnd, IDCARETTIMER, TRUE);
|
IntKillTimer(pwnd, IDCARETTIMER, TRUE);
|
||||||
|
|
||||||
co_IntHideCaret(ThreadQueue->CaretInfo);
|
co_IntHideCaret(&ThreadQueue->CaretInfo);
|
||||||
ThreadQueue->CaretInfo->Visible = 0;
|
ThreadQueue->CaretInfo.Visible = 0;
|
||||||
ThreadQueue->CaretInfo->Showing = 0;
|
ThreadQueue->CaretInfo.Showing = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
@ -273,17 +273,17 @@ BOOL FASTCALL co_UserShowCaret(PWND Window OPTIONAL)
|
||||||
pti = PsGetCurrentThreadWin32Thread();
|
pti = PsGetCurrentThreadWin32Thread();
|
||||||
ThreadQueue = pti->MessageQueue;
|
ThreadQueue = pti->MessageQueue;
|
||||||
|
|
||||||
if(Window && ThreadQueue->CaretInfo->hWnd != Window->head.h)
|
if(Window && ThreadQueue->CaretInfo.hWnd != Window->head.h)
|
||||||
{
|
{
|
||||||
EngSetLastError(ERROR_ACCESS_DENIED);
|
EngSetLastError(ERROR_ACCESS_DENIED);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!ThreadQueue->CaretInfo->Visible)
|
if (!ThreadQueue->CaretInfo.Visible)
|
||||||
{
|
{
|
||||||
ThreadQueue->CaretInfo->Visible = 1;
|
ThreadQueue->CaretInfo.Visible = 1;
|
||||||
pWnd = ValidateHwndNoErr(ThreadQueue->CaretInfo->hWnd);
|
pWnd = ValidateHwndNoErr(ThreadQueue->CaretInfo.hWnd);
|
||||||
if (!ThreadQueue->CaretInfo->Showing && pWnd)
|
if (!ThreadQueue->CaretInfo.Showing && pWnd)
|
||||||
{
|
{
|
||||||
IntNotifyWinEvent(EVENT_OBJECT_SHOW, pWnd, OBJID_CARET, OBJID_CARET, 0);
|
IntNotifyWinEvent(EVENT_OBJECT_SHOW, pWnd, OBJID_CARET, OBJID_CARET, 0);
|
||||||
}
|
}
|
||||||
|
@ -324,17 +324,17 @@ NtUserCreateCaret(
|
||||||
pti = PsGetCurrentThreadWin32Thread();
|
pti = PsGetCurrentThreadWin32Thread();
|
||||||
ThreadQueue = pti->MessageQueue;
|
ThreadQueue = pti->MessageQueue;
|
||||||
|
|
||||||
if (ThreadQueue->CaretInfo->Visible)
|
if (ThreadQueue->CaretInfo.Visible)
|
||||||
{
|
{
|
||||||
IntKillTimer(Window, IDCARETTIMER, TRUE);
|
IntKillTimer(Window, IDCARETTIMER, TRUE);
|
||||||
co_IntHideCaret(ThreadQueue->CaretInfo);
|
co_IntHideCaret(&ThreadQueue->CaretInfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
ThreadQueue->CaretInfo->hWnd = hWnd;
|
ThreadQueue->CaretInfo.hWnd = hWnd;
|
||||||
if(hBitmap)
|
if(hBitmap)
|
||||||
{
|
{
|
||||||
ThreadQueue->CaretInfo->Bitmap = hBitmap;
|
ThreadQueue->CaretInfo.Bitmap = hBitmap;
|
||||||
ThreadQueue->CaretInfo->Size.cx = ThreadQueue->CaretInfo->Size.cy = 0;
|
ThreadQueue->CaretInfo.Size.cx = ThreadQueue->CaretInfo.Size.cy = 0;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -346,12 +346,12 @@ NtUserCreateCaret(
|
||||||
{
|
{
|
||||||
nHeight = UserGetSystemMetrics(SM_CYBORDER);
|
nHeight = UserGetSystemMetrics(SM_CYBORDER);
|
||||||
}
|
}
|
||||||
ThreadQueue->CaretInfo->Bitmap = (HBITMAP)0;
|
ThreadQueue->CaretInfo.Bitmap = (HBITMAP)0;
|
||||||
ThreadQueue->CaretInfo->Size.cx = nWidth;
|
ThreadQueue->CaretInfo.Size.cx = nWidth;
|
||||||
ThreadQueue->CaretInfo->Size.cy = nHeight;
|
ThreadQueue->CaretInfo.Size.cy = nHeight;
|
||||||
}
|
}
|
||||||
ThreadQueue->CaretInfo->Visible = 0;
|
ThreadQueue->CaretInfo.Visible = 0;
|
||||||
ThreadQueue->CaretInfo->Showing = 0;
|
ThreadQueue->CaretInfo.Showing = 0;
|
||||||
|
|
||||||
IntSetTimer( Window, IDCARETTIMER, gpsi->dtCaretBlink, CaretSystemTimerProc, TMRF_SYSTEM );
|
IntSetTimer( Window, IDCARETTIMER, gpsi->dtCaretBlink, CaretSystemTimerProc, TMRF_SYSTEM );
|
||||||
|
|
||||||
|
@ -396,7 +396,7 @@ NtUserGetCaretPos(
|
||||||
pti = PsGetCurrentThreadWin32Thread();
|
pti = PsGetCurrentThreadWin32Thread();
|
||||||
ThreadQueue = pti->MessageQueue;
|
ThreadQueue = pti->MessageQueue;
|
||||||
|
|
||||||
Status = MmCopyToCaller(lpPoint, &(ThreadQueue->CaretInfo->Pos), sizeof(POINT));
|
Status = MmCopyToCaller(lpPoint, &ThreadQueue->CaretInfo.Pos, sizeof(POINT));
|
||||||
if(!NT_SUCCESS(Status))
|
if(!NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
SetLastNtError(Status);
|
SetLastNtError(Status);
|
||||||
|
|
|
@ -524,9 +524,9 @@ UserAttachThreadInput(PTHREADINFO ptiFrom, PTHREADINFO ptiTo, BOOL fAttach)
|
||||||
ptiTo->MessageQueue->spwndFocus = ptiFrom->MessageQueue->spwndFocus;
|
ptiTo->MessageQueue->spwndFocus = ptiFrom->MessageQueue->spwndFocus;
|
||||||
ptiTo->MessageQueue->spwndCapture = ptiFrom->MessageQueue->spwndCapture;
|
ptiTo->MessageQueue->spwndCapture = ptiFrom->MessageQueue->spwndCapture;
|
||||||
ptiTo->MessageQueue->QF_flags ^= ((ptiTo->MessageQueue->QF_flags ^ ptiFrom->MessageQueue->QF_flags) & QF_CAPTURELOCKED);
|
ptiTo->MessageQueue->QF_flags ^= ((ptiTo->MessageQueue->QF_flags ^ ptiFrom->MessageQueue->QF_flags) & QF_CAPTURELOCKED);
|
||||||
RtlCopyMemory(ptiTo->MessageQueue->CaretInfo,
|
RtlCopyMemory(&ptiTo->MessageQueue->CaretInfo,
|
||||||
ptiFrom->MessageQueue->CaretInfo,
|
&ptiFrom->MessageQueue->CaretInfo,
|
||||||
sizeof(*ptiTo->MessageQueue->CaretInfo));
|
sizeof(ptiTo->MessageQueue->CaretInfo));
|
||||||
IntSetFocusMessageQueue(NULL);
|
IntSetFocusMessageQueue(NULL);
|
||||||
IntSetFocusMessageQueue(ptiTo->MessageQueue);
|
IntSetFocusMessageQueue(ptiTo->MessageQueue);
|
||||||
gptiForeground = ptiTo;
|
gptiForeground = ptiTo;
|
||||||
|
|
|
@ -394,7 +394,7 @@ NtUserGetGUIThreadInfo(
|
||||||
if ( Desktop ) MsgQueue = Desktop->ActiveMessageQueue;
|
if ( Desktop ) MsgQueue = Desktop->ActiveMessageQueue;
|
||||||
}
|
}
|
||||||
|
|
||||||
CaretInfo = MsgQueue->CaretInfo;
|
CaretInfo = &MsgQueue->CaretInfo;
|
||||||
|
|
||||||
SafeGui.flags = (CaretInfo->Visible ? GUI_CARETBLINKING : 0);
|
SafeGui.flags = (CaretInfo->Visible ? GUI_CARETBLINKING : 0);
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -2080,7 +2080,6 @@ HungAppSysTimerProc(HWND hwnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime)
|
||||||
BOOLEAN FASTCALL
|
BOOLEAN FASTCALL
|
||||||
MsqInitializeMessageQueue(PTHREADINFO pti, PUSER_MESSAGE_QUEUE MessageQueue)
|
MsqInitializeMessageQueue(PTHREADINFO pti, PUSER_MESSAGE_QUEUE MessageQueue)
|
||||||
{
|
{
|
||||||
MessageQueue->CaretInfo = (PTHRDCARETINFO)(MessageQueue + 1);
|
|
||||||
InitializeListHead(&MessageQueue->HardwareMessagesListHead); // Keep here!
|
InitializeListHead(&MessageQueue->HardwareMessagesListHead); // Keep here!
|
||||||
MessageQueue->spwndFocus = NULL;
|
MessageQueue->spwndFocus = NULL;
|
||||||
MessageQueue->iCursorLevel = 0;
|
MessageQueue->iCursorLevel = 0;
|
||||||
|
@ -2269,16 +2268,16 @@ MsqCreateMessageQueue(PTHREADINFO pti)
|
||||||
{
|
{
|
||||||
PUSER_MESSAGE_QUEUE MessageQueue;
|
PUSER_MESSAGE_QUEUE MessageQueue;
|
||||||
|
|
||||||
MessageQueue = (PUSER_MESSAGE_QUEUE)ExAllocatePoolWithTag(NonPagedPool,
|
MessageQueue = ExAllocatePoolWithTag(NonPagedPool,
|
||||||
sizeof(USER_MESSAGE_QUEUE) + sizeof(THRDCARETINFO),
|
sizeof(*MessageQueue),
|
||||||
USERTAG_Q);
|
USERTAG_Q);
|
||||||
|
|
||||||
if (!MessageQueue)
|
if (!MessageQueue)
|
||||||
{
|
{
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
RtlZeroMemory(MessageQueue, sizeof(USER_MESSAGE_QUEUE) + sizeof(THRDCARETINFO));
|
RtlZeroMemory(MessageQueue, sizeof(*MessageQueue));
|
||||||
/* hold at least one reference until it'll be destroyed */
|
/* hold at least one reference until it'll be destroyed */
|
||||||
IntReferenceMessageQueue(MessageQueue);
|
IntReferenceMessageQueue(MessageQueue);
|
||||||
/* initialize the queue */
|
/* initialize the queue */
|
||||||
|
@ -2406,9 +2405,8 @@ MsqSetStateWindow(PTHREADINFO pti, ULONG Type, HWND hWnd)
|
||||||
MessageQueue->MoveSize = hWnd;
|
MessageQueue->MoveSize = hWnd;
|
||||||
return Prev;
|
return Prev;
|
||||||
case MSQ_STATE_CARET:
|
case MSQ_STATE_CARET:
|
||||||
ASSERT(MessageQueue->CaretInfo);
|
Prev = MessageQueue->CaretInfo.hWnd;
|
||||||
Prev = MessageQueue->CaretInfo->hWnd;
|
MessageQueue->CaretInfo.hWnd = hWnd;
|
||||||
MessageQueue->CaretInfo->hWnd = hWnd;
|
|
||||||
return Prev;
|
return Prev;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -67,8 +67,6 @@ typedef struct _USER_MESSAGE_QUEUE
|
||||||
HWND MenuOwner;
|
HWND MenuOwner;
|
||||||
/* Identifes the menu state */
|
/* Identifes the menu state */
|
||||||
BYTE MenuState;
|
BYTE MenuState;
|
||||||
/* Caret information for this queue */
|
|
||||||
PTHRDCARETINFO CaretInfo;
|
|
||||||
/* Message Queue Flags */
|
/* Message Queue Flags */
|
||||||
DWORD QF_flags;
|
DWORD QF_flags;
|
||||||
DWORD cThreads; // Shared message queue counter.
|
DWORD cThreads; // Shared message queue counter.
|
||||||
|
@ -85,6 +83,8 @@ typedef struct _USER_MESSAGE_QUEUE
|
||||||
/* Cursor object */
|
/* Cursor object */
|
||||||
PCURICON_OBJECT CursorObject;
|
PCURICON_OBJECT CursorObject;
|
||||||
|
|
||||||
|
/* Caret information for this queue */
|
||||||
|
THRDCARETINFO CaretInfo;
|
||||||
} USER_MESSAGE_QUEUE, *PUSER_MESSAGE_QUEUE;
|
} USER_MESSAGE_QUEUE, *PUSER_MESSAGE_QUEUE;
|
||||||
|
|
||||||
#define QF_UPDATEKEYSTATE 0x00000001
|
#define QF_UPDATEKEYSTATE 0x00000001
|
||||||
|
|
|
@ -27,7 +27,7 @@ co_IntFixCaret(PWND Window, RECTL *lprc, UINT flags)
|
||||||
Desktop = pti->rpdesk;
|
Desktop = pti->rpdesk;
|
||||||
ActiveMessageQueue = Desktop->ActiveMessageQueue;
|
ActiveMessageQueue = Desktop->ActiveMessageQueue;
|
||||||
if (!ActiveMessageQueue) return 0;
|
if (!ActiveMessageQueue) return 0;
|
||||||
CaretInfo = ActiveMessageQueue->CaretInfo;
|
CaretInfo = &ActiveMessageQueue->CaretInfo;
|
||||||
hWndCaret = CaretInfo->hWnd;
|
hWndCaret = CaretInfo->hWnd;
|
||||||
|
|
||||||
WndCaret = ValidateHwndNoErr(hWndCaret);
|
WndCaret = ValidateHwndNoErr(hWndCaret);
|
||||||
|
|
|
@ -417,7 +417,7 @@ static void IntSendDestroyMsg(HWND hWnd)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ti->MessageQueue->CaretInfo->hWnd == UserHMGetHandle(Window))
|
if (ti->MessageQueue->CaretInfo.hWnd == UserHMGetHandle(Window))
|
||||||
{
|
{
|
||||||
co_IntDestroyCaret(ti);
|
co_IntDestroyCaret(ti);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue