VOID FASTCALL
MsqInsertSystemMessage(MSG* Msg);
BOOL FASTCALL
+MsqIsClkLck(LPMSG Msg, BOOL Remove);
+BOOL FASTCALL
MsqIsDblClk(LPMSG Msg, BOOL Remove);
HWND FASTCALL
MsqSetStateWindow(PUSER_MESSAGE_QUEUE MessageQueue, ULONG Type, HWND hWnd);
*HitTest = HTCLIENT;
}
+ if (gspv.bMouseClickLock && ((Msg->message == WM_LBUTTONUP) || (Msg->message == WM_LBUTTONDOWN)))
+ {
+ if (MsqIsClkLck(Msg, Remove))
+ {
+ // FIXME: drop the message, hack: use WM_NULL
+ Msg->message = WM_NULL;
+ }
+ }
+
if(IS_BTN_MESSAGE(Msg->message, DOWN))
{
/* generate double click messages, if necessary */
KeSetEvent(&HardwareMessageEvent, IO_NO_INCREMENT, FALSE);
}
+BOOL FASTCALL
+MsqIsClkLck(LPMSG Msg, BOOL Remove)
+{
+ PTHREADINFO pti;
+ PWINSTATION_OBJECT WinStaObject;
+ PSYSTEM_CURSORINFO CurInfo;
+ BOOL Res = FALSE;
+
+ pti = PsGetCurrentThreadWin32Thread();
+ if (pti->Desktop == NULL)
+ {
+ return FALSE;
+ }
+
+ WinStaObject = pti->Desktop->WindowStation;
+
+ CurInfo = IntGetSysCursorInfo(WinStaObject);
+
+ switch (Msg->message)
+ {
+ case WM_LBUTTONUP:
+ Res = ((Msg->time - CurInfo->ClickLockTime) >= gspv.dwMouseClickLockTime);
+ if (Res && (!CurInfo->ClickLockActive))
+ {
+ CurInfo->ClickLockActive = TRUE;
+ }
+ break;
+ case WM_LBUTTONDOWN:
+ if (CurInfo->ClickLockActive)
+ {
+ Res = TRUE;
+ CurInfo->ClickLockActive = FALSE;
+ CurInfo->ClickLockTime = 0;
+ }
+ else
+ {
+ CurInfo->ClickLockTime = Msg->time;
+ }
+ break;
+ }
+ return Res;
+}
+
BOOL FASTCALL
MsqIsDblClk(LPMSG Msg, BOOL Remove)
{