- Cleanup Real/GetInputState.
authorJames Tabor <james.tabor@reactos.org>
Tue, 19 May 2009 15:47:16 +0000 (15:47 +0000)
committerJames Tabor <james.tabor@reactos.org>
Tue, 19 May 2009 15:47:16 +0000 (15:47 +0000)
svn path=/trunk/; revision=40981

reactos/dll/win32/user32/windows/message.c
reactos/include/reactos/win32k/ntuser.h
reactos/subsystems/win32/win32k/ntuser/misc.c
reactos/subsystems/win32/win32k/ntuser/simplecall.c

index 438174d..b0114a0 100644 (file)
@@ -2198,51 +2198,27 @@ ReleaseCapture(VOID)
 
 
 /*
- * @unimplemented
+ * @implemented
  */
 DWORD
 WINAPI
 RealGetQueueStatus(UINT flags)
 {
-   DWORD ret;
-   WORD changed_bits, wake_bits;
-
-#if 0 /* wine stuff. don't know what it does... */
-
-   /* check for pending X events */
-   if (USER_Driver.pMsgWaitForMultipleObjectsEx)
-      USER_Driver.pMsgWaitForMultipleObjectsEx( 0, NULL, 0, 0, 0 );
-#endif
-
-   ret = NtUserCallOneParam(TRUE, ONEPARAM_ROUTINE_GETQUEUESTATUS);
-
-   changed_bits = LOWORD(ret);
-   wake_bits = HIWORD(ret);
-
-   return MAKELONG(changed_bits & flags, wake_bits & flags);
+   return NtUserCallOneParam(flags, ONEPARAM_ROUTINE_GETQUEUESTATUS);
 }
 
 
 /*
- * @unimplemented
+ * @implemented
  */
 BOOL WINAPI GetInputState(VOID)
 {
-   DWORD ret;
-   WORD  wake_bits;
-
-#if 0 /* wine stuff. don't know what it does... */
-
-   /* check for pending X events */
-   if (USER_Driver.pMsgWaitForMultipleObjectsEx)
-     USER_Driver.pMsgWaitForMultipleObjectsEx( 0, NULL, 0, 0, 0 );
-#endif
-
-   ret = NtUserCallOneParam(FALSE, ONEPARAM_ROUTINE_GETQUEUESTATUS);
-
-   wake_bits = HIWORD(ret);
+   PCLIENTTHREADINFO pcti = GetWin32ClientInfo()->pClientThreadInfo;
 
-   return wake_bits & (QS_KEY | QS_MOUSEBUTTON);
+   if ((!pcti) || (pcti->fsChangeBits & (QS_KEY|QS_MOUSEBUTTON)))
+      return (BOOL)NtUserGetThreadState(THREADSTATE_GETINPUTSTATE);
+            
+   return FALSE;
 }
 
 
index d96dc01..265ce6f 100644 (file)
@@ -1718,7 +1718,8 @@ enum ThreadStateRoutines
     THREADSTATE_CAPTUREWINDOW,
     THREADSTATE_PROGMANWINDOW,
     THREADSTATE_TASKMANWINDOW,
-    THREADSTATE_GETMESSAGETIME
+    THREADSTATE_GETMESSAGETIME,
+    THREADSTATE_GETINPUTSTATE
 };
 
 DWORD
index 9b79d8d..6f9d7a2 100644 (file)
@@ -118,6 +118,9 @@ NtUserGetThreadState(
       case THREADSTATE_GETMESSAGETIME: 
          /* FIXME Needs more work! */
          RETURN( ((PTHREADINFO)PsGetCurrentThreadWin32Thread())->timeLast);
+
+      case THREADSTATE_GETINPUTSTATE:
+         RETURN( HIWORD(IntGetQueueStatus(FALSE)) & (QS_KEY | QS_MOUSEBUTTON));
    }
    RETURN( 0);
 
index fcc58ee..4eba2f3 100644 (file)
@@ -397,8 +397,14 @@ NtUserCallOneParam(
          RETURN (UserRealizePalette((HDC) Param));
 
       case ONEPARAM_ROUTINE_GETQUEUESTATUS:
-         RETURN (IntGetQueueStatus((BOOL) Param));
-
+      {
+         DWORD Ret;
+         WORD changed_bits, wake_bits;
+         Ret = IntGetQueueStatus(FALSE);
+         changed_bits = LOWORD(Ret);
+         wake_bits = HIWORD(Ret);
+         RETURN( MAKELONG(changed_bits & Param, wake_bits & Param));
+      }
       case ONEPARAM_ROUTINE_ENUMCLIPBOARDFORMATS:
          /* FIXME: Should use UserEnterShared */
          RETURN(IntEnumClipboardFormats(Param));