Implemented stub for InitThreadInput.
Use GetThreadQueue/GetFastQueue instead of GetTaskQueue.
diff --git a/windows/queue.c b/windows/queue.c
index cb562d2..eee5c8a 100644
--- a/windows/queue.c
+++ b/windows/queue.c
@@ -312,11 +312,11 @@
{
MESSAGEQUEUE *queue;
- TRACE(msg,"q %04x waiting for %04x\n", GetTaskQueue(0), bits);
+ TRACE(msg,"q %04x waiting for %04x\n", GetFastQueue(), bits);
for (;;)
{
- if (!(queue = (MESSAGEQUEUE *)GlobalLock16( GetTaskQueue(0) ))) return;
+ if (!(queue = (MESSAGEQUEUE *)GlobalLock16( GetFastQueue() ))) return;
if (queue->changeBits & bits)
{
@@ -752,7 +752,7 @@
{
MESSAGEQUEUE *queue;
- if (!(queue = (MESSAGEQUEUE *)GlobalLock16( GetTaskQueue(0) ))) return;
+ if (!(queue = (MESSAGEQUEUE *)GlobalLock16( GetFastQueue() ))) return;
queue->wPostQMsg = TRUE;
queue->wExitCode = (WORD)exitCode;
}
@@ -819,7 +819,7 @@
SIGNAL_MaskAsyncEvents( TRUE );
/* Copy data and free the old message queue */
- if ((hQueue = GetTaskQueue(0)) != 0)
+ if ((hQueue = GetThreadQueue(0)) != 0)
{
MESSAGEQUEUE *oldQ = (MESSAGEQUEUE *)GlobalLock16( hQueue );
memcpy( &queuePtr->wParamHigh, &oldQ->wParamHigh,
@@ -838,12 +838,25 @@
hFirstQueue = hNewQueue;
if( !queuePtr->next ) pCursorQueue = queuePtr;
- SetTaskQueue( 0, hNewQueue );
+ SetThreadQueue( 0, hNewQueue );
SIGNAL_MaskAsyncEvents( FALSE );
return TRUE;
}
+/***********************************************************************
+ * InitThreadInput (USER.409)
+ */
+HQUEUE16 WINAPI InitThreadInput( WORD unknown, WORD flags )
+{
+ HQUEUE16 hQueue = GetTaskQueue( 0 );
+
+ FIXME( msg, "(%04X,%04X): should create thread-local message queue!\n",
+ unknown, flags );
+
+ SetFastQueue( 0, hQueue );
+ return hQueue;
+}
/***********************************************************************
* GetQueueStatus16 (USER.334)
@@ -853,7 +866,7 @@
MESSAGEQUEUE *queue;
DWORD ret;
- if (!(queue = (MESSAGEQUEUE *)GlobalLock16( GetTaskQueue(0) ))) return 0;
+ if (!(queue = (MESSAGEQUEUE *)GlobalLock16( GetFastQueue() ))) return 0;
ret = MAKELONG( queue->changeBits, queue->wakeBits );
queue->changeBits = 0;
return ret & MAKELONG( flags, flags );
@@ -867,7 +880,7 @@
MESSAGEQUEUE *queue;
DWORD ret;
- if (!(queue = (MESSAGEQUEUE *)GlobalLock16( GetTaskQueue(0) ))) return 0;
+ if (!(queue = (MESSAGEQUEUE *)GlobalLock16( GetFastQueue() ))) return 0;
ret = MAKELONG( queue->changeBits, queue->wakeBits );
queue->changeBits = 0;
return ret & MAKELONG( flags, flags );
@@ -900,11 +913,35 @@
{
MESSAGEQUEUE *queue;
- if (!(queue = (MESSAGEQUEUE *)GlobalLock16( GetTaskQueue(0) )))
+ if (!(queue = (MESSAGEQUEUE *)GlobalLock16( GetFastQueue() )))
return FALSE;
return queue->wakeBits & (QS_KEY | QS_MOUSEBUTTON);
}
+/***********************************************************************
+ * UserYield (USER.332)
+ */
+void WINAPI UserYield(void)
+{
+ TDB *pCurTask = (TDB *)GlobalLock16( GetCurrentTask() );
+ MESSAGEQUEUE *queue = (MESSAGEQUEUE *)GlobalLock16( pCurTask->hQueue );
+
+ if ( !THREAD_IsWin16( THREAD_Current() ) )
+ {
+ FIXME(task, "called for Win32 thread (%04x)!\n", THREAD_Current()->teb_sel);
+ return;
+ }
+
+ /* Handle sent messages */
+ while (queue && (queue->wakeBits & QS_SENDMESSAGE))
+ QUEUE_ReceiveMessage( queue );
+
+ OldYield();
+
+ queue = (MESSAGEQUEUE *)GlobalLock16( pCurTask->hQueue );
+ while (queue && (queue->wakeBits & QS_SENDMESSAGE))
+ QUEUE_ReceiveMessage( queue );
+}
/***********************************************************************
* GetMessagePos (USER.119) (USER32.272)
@@ -931,7 +968,7 @@
{
MESSAGEQUEUE *queue;
- if (!(queue = (MESSAGEQUEUE *)GlobalLock16( GetTaskQueue(0) ))) return 0;
+ if (!(queue = (MESSAGEQUEUE *)GlobalLock16( GetFastQueue() ))) return 0;
return queue->GetMessagePosVal;
}
@@ -959,7 +996,7 @@
{
MESSAGEQUEUE *queue;
- if (!(queue = (MESSAGEQUEUE *)GlobalLock16( GetTaskQueue(0) ))) return 0;
+ if (!(queue = (MESSAGEQUEUE *)GlobalLock16( GetFastQueue() ))) return 0;
return queue->GetMessageTimeVal;
}
@@ -971,6 +1008,6 @@
{
MESSAGEQUEUE *queue;
- if (!(queue = (MESSAGEQUEUE *)GlobalLock16( GetTaskQueue(0) ))) return 0;
+ if (!(queue = (MESSAGEQUEUE *)GlobalLock16( GetFastQueue() ))) return 0;
return queue->GetMessageExtraInfoVal;
}