Implement ShowCursor, it is a issue with quake when you moving the
mouse, the mousepointer will show, when you stand still with the mouse
it will not show the mousepointer.
Modified: trunk/reactos/include/win32k/ntuser.h
Modified: trunk/reactos/lib/user32/include/user32p.h
Modified: trunk/reactos/lib/user32/windows/cursor.c
Modified: trunk/reactos/subsys/win32k/ntuser/misc.c
_____
Modified: trunk/reactos/include/win32k/ntuser.h
--- trunk/reactos/include/win32k/ntuser.h 2005-12-30 21:18:25 UTC
(rev 20469)
+++ trunk/reactos/include/win32k/ntuser.h 2005-12-30 22:02:59 UTC
(rev 20470)
@@ -379,6 +379,7 @@
#define ONEPARAM_ROUTINE_MSQSETWAKEMASK 0x27
#define ONEPARAM_ROUTINE_GETKEYBOARDTYPE 0x28
#define ONEPARAM_ROUTINE_GETKEYBOARDLAYOUT 0x29
+#define ONEPARAM_ROUTINE_SHOWCURSOR 0x30
DWORD
NTAPI
NtUserCallOneParam(
_____
Modified: trunk/reactos/lib/user32/include/user32p.h
--- trunk/reactos/lib/user32/include/user32p.h 2005-12-30 21:18:25 UTC
(rev 20469)
+++ trunk/reactos/lib/user32/include/user32p.h 2005-12-30 22:02:59 UTC
(rev 20470)
@@ -112,6 +112,11 @@
#define NtUserEnableProcessWindowGhosting(bEnable) \
NtUserCallOneParam((DWORD)bEnable,
ONEPARAM_ROUTINE_ENABLEPROCWNDGHSTING)
+#define NtUserShowCursor(bShow) \
+ NtUserCallOneParam((DWORD)bShow, ONEPARAM_ROUTINE_SHOWCURSOR)
+
+
+
/* Internal Thread Data */
extern HINSTANCE User32Instance;
_____
Modified: trunk/reactos/lib/user32/windows/cursor.c
--- trunk/reactos/lib/user32/windows/cursor.c 2005-12-30 21:18:25 UTC
(rev 20469)
+++ trunk/reactos/lib/user32/windows/cursor.c 2005-12-30 22:02:59 UTC
(rev 20470)
@@ -320,13 +320,12 @@
/*
- * @unimplemented
+ * @implemented
*/
int STDCALL
ShowCursor(BOOL bShow)
{
- UNIMPLEMENTED;
- return 0;
+ return NtUserShowCursor(bShow);
}
HCURSOR
_____
Modified: trunk/reactos/subsys/win32k/ntuser/misc.c
--- trunk/reactos/subsys/win32k/ntuser/misc.c 2005-12-30 21:18:25 UTC
(rev 20469)
+++ trunk/reactos/subsys/win32k/ntuser/misc.c 2005-12-30 22:02:59 UTC
(rev 20470)
@@ -11,7 +11,8 @@
#include <w32k.h>
-#define NDEBUG
+//#define NDEBUG
+#undef NDEBUG
#include <debug.h>
/* registered Logon process */
@@ -164,6 +165,7 @@
END_CLEANUP;
}
+
/*
* @implemented
*/
@@ -176,10 +178,90 @@
DECLARE_RETURN(DWORD);
DPRINT("Enter NtUserCallOneParam\n");
+
+
+ if (Routine == ONEPARAM_ROUTINE_SHOWCURSOR)
+ {
+ PWINSTATION_OBJECT WinSta =
PsGetWin32Thread()->Desktop->WindowStation;
+ PSYSTEM_CURSORINFO CurInfo;
+
+ HDC Screen;
+ HBITMAP dcbmp;
+ SURFOBJ *SurfObj;
+ BITMAPOBJ *BitmapObj;
+ GDIDEVICE *ppdev;
+ GDIPOINTER *pgp;
+
+ if(!(Screen = IntGetScreenDC()))
+ {
+ return 1; /* No mouse */
+ }
+
+ PDC dc = DC_LockDc(Screen);
+
+ if (!dc)
+ {
+ return 1; /* No mouse */
+ }
+
+ dcbmp = dc->w.hBitmap;
+ DC_UnlockDc(dc);
+
+ BitmapObj = BITMAPOBJ_LockBitmap(dcbmp);
+ if ( !BitmapObj )
+ {
+ BITMAPOBJ_UnlockBitmap(BitmapObj);
+ return 1; /* No Mouse */
+ }
+
+ SurfObj = &BitmapObj->SurfObj;
+ if (SurfObj == NULL)
+ {
+ BITMAPOBJ_UnlockBitmap(BitmapObj);
+ return 1; /* No mouse */
+ }
+
+ ppdev = GDIDEV(SurfObj);
+
+ if(ppdev == NULL)
+ {
+ BITMAPOBJ_UnlockBitmap(BitmapObj);
+ return 1; /* No mouse */
+ }
+
+ pgp = &ppdev->Pointer;
+
+ CurInfo = IntGetSysCursorInfo(WinSta);
+
+ if (Param == FALSE)
+ {
+ if (CurInfo->ShowingCursor != 0)
+ {
+ ppdev->SafetyRemoveCount = 1;
+ ppdev->SafetyRemoveLevel = 1;
+ EngMovePointer(SurfObj,-1,-1,NULL);
+ CurInfo->ShowingCursor = 0;
+ }
+
+ }
+ else
+ {
+ /* Show Cursor */
+ ppdev->SafetyRemoveCount = 0;
+ ppdev->SafetyRemoveLevel = 0;
+ EngMovePointer(SurfObj,-1,-1,NULL);
+ CurInfo->ShowingCursor = CURSOR_SHOWING;
+ }
+
+ BITMAPOBJ_UnlockBitmap(BitmapObj);
+ return 0;
+ }
+
+
UserEnterExclusive();
switch(Routine)
- {
+ {
case ONEPARAM_ROUTINE_GETMENU:
{
PWINDOW_OBJECT Window;