diff --git a/reactos/drivers/video/displays/directory.rbuild b/reactos/drivers/video/displays/directory.rbuild
index eb650854819..a3779382b32 100644
--- a/reactos/drivers/video/displays/directory.rbuild
+++ b/reactos/drivers/video/displays/directory.rbuild
@@ -4,6 +4,9 @@
+
+
+
diff --git a/reactos/drivers/video/displays/framebuf_acc/dd.c b/reactos/drivers/video/displays/framebufacc/dd.c
similarity index 100%
rename from reactos/drivers/video/displays/framebuf_acc/dd.c
rename to reactos/drivers/video/displays/framebufacc/dd.c
diff --git a/reactos/drivers/video/displays/framebuf_acc/ddenable.c b/reactos/drivers/video/displays/framebufacc/ddenable.c
similarity index 100%
rename from reactos/drivers/video/displays/framebuf_acc/ddenable.c
rename to reactos/drivers/video/displays/framebufacc/ddenable.c
diff --git a/reactos/drivers/video/displays/framebuf_acc/enable.c b/reactos/drivers/video/displays/framebufacc/enable.c
similarity index 100%
rename from reactos/drivers/video/displays/framebuf_acc/enable.c
rename to reactos/drivers/video/displays/framebufacc/enable.c
diff --git a/reactos/drivers/video/displays/framebuf_acc/framebuf_acc.def b/reactos/drivers/video/displays/framebufacc/framebuf_acc.def
similarity index 100%
rename from reactos/drivers/video/displays/framebuf_acc/framebuf_acc.def
rename to reactos/drivers/video/displays/framebufacc/framebuf_acc.def
diff --git a/reactos/drivers/video/displays/framebuf_acc/framebuf_acc.h b/reactos/drivers/video/displays/framebufacc/framebuf_acc.h
similarity index 98%
rename from reactos/drivers/video/displays/framebuf_acc/framebuf_acc.h
rename to reactos/drivers/video/displays/framebufacc/framebuf_acc.h
index 901b5234a1e..1cb2accd2ff 100644
--- a/reactos/drivers/video/displays/framebuf_acc/framebuf_acc.h
+++ b/reactos/drivers/video/displays/framebufacc/framebuf_acc.h
@@ -52,6 +52,9 @@ typedef struct _PDEV
BYTE PaletteShift;
PVOID ScreenPtr;
+ /* Vitual desktop stuff */
+ POINTL ScreenOffsetXY;
+
/* Palette data */
HPALETTE DefaultPalette;
PALETTEENTRY *PaletteEntries;
diff --git a/reactos/drivers/video/displays/framebuf_acc/framebuf_acc.rbuild b/reactos/drivers/video/displays/framebufacc/framebuf_acc.rbuild
similarity index 100%
rename from reactos/drivers/video/displays/framebuf_acc/framebuf_acc.rbuild
rename to reactos/drivers/video/displays/framebufacc/framebuf_acc.rbuild
diff --git a/reactos/drivers/video/displays/framebuf_acc/framebuf_acc.rc b/reactos/drivers/video/displays/framebufacc/framebuf_acc.rc
similarity index 100%
rename from reactos/drivers/video/displays/framebuf_acc/framebuf_acc.rc
rename to reactos/drivers/video/displays/framebufacc/framebuf_acc.rc
diff --git a/reactos/drivers/video/displays/framebuf_acc/palette.c b/reactos/drivers/video/displays/framebufacc/palette.c
similarity index 100%
rename from reactos/drivers/video/displays/framebuf_acc/palette.c
rename to reactos/drivers/video/displays/framebufacc/palette.c
diff --git a/reactos/drivers/video/displays/framebuf_acc/pointer.c b/reactos/drivers/video/displays/framebufacc/pointer.c
similarity index 52%
rename from reactos/drivers/video/displays/framebuf_acc/pointer.c
rename to reactos/drivers/video/displays/framebufacc/pointer.c
index 989da33ae9e..68e5121fde9 100644
--- a/reactos/drivers/video/displays/framebuf_acc/pointer.c
+++ b/reactos/drivers/video/displays/framebufacc/pointer.c
@@ -1,7 +1,7 @@
/*
* ReactOS Generic Framebuffer display driver
*
- * Copyright (C) 2004 Filip Navara
+ * Copyright (C) 2007 Magnus Olsen
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
@@ -21,6 +21,53 @@
#include "framebuf_acc.h"
+/*
+ * DrvMovePointer
+ *
+ * Moves the pointer to a new position and ensures that GDI does not interfere
+ * with the display of the pointer.
+ *
+ * Status
+ * @implemented
+ */
+
+VOID APIENTRY
+DrvMovePointer(IN SURFOBJ *pso,
+ IN LONG x,
+ IN LONG y,
+ IN RECTL *prcl)
+{
+ PPDEV ppdev = (PPDEV) pso->dhpdev;
+ DWORD returnedDataLength;
+ VIDEO_POINTER_POSITION NewPointerPosition;
+
+ x -= ppdev->ScreenOffsetXY.x;
+ y -= ppdev->ScreenOffsetXY.y;
+
+ /* position of (-1,-1) hide the pointer */
+ if ((x == -1) || (y == -1))
+ {
+ if (EngDeviceIoControl(ppdev->hDriver, IOCTL_VIDEO_DISABLE_POINTER, NULL, 0, NULL, 0, &returnedDataLength))
+ {
+ /* hw did not disable the mouse, we try then with software */
+ EngMovePointer(pso, x, y, prcl);
+ }
+ }
+ else
+ {
+ /* Calc the mouse positions and set it to the new positions */
+ NewPointerPosition.Column = (SHORT) x - (SHORT) (ppdev->PointerHotSpot.x);
+ NewPointerPosition.Row = (SHORT) y - (SHORT) (ppdev->PointerHotSpot.y);
+
+ if (EngDeviceIoControl(ppdev->hDriver, IOCTL_VIDEO_SET_POINTER_POSITION, &NewPointerPosition,
+ sizeof(VIDEO_POINTER_POSITION), NULL, 0, &returnedDataLength))
+ {
+ /* hw did not disable the mouse, we try then with software */
+ EngMovePointer(pso, x, y, prcl);
+ }
+ }
+}
+
/*
* DrvSetPointerShape
@@ -48,24 +95,6 @@ DrvSetPointerShape(
return EngSetPointerShape(pso, psoMask, psoColor, pxlo, xHot, yHot, x, y, prcl, fl);
}
-/*
- * DrvMovePointer
- *
- * Moves the pointer to a new position and ensures that GDI does not interfere
- * with the display of the pointer.
- *
- * Status
- * @unimplemented
- */
-
-VOID APIENTRY
-DrvMovePointer(
- IN SURFOBJ *pso,
- IN LONG x,
- IN LONG y,
- IN RECTL *prcl)
-{
- return EngMovePointer(pso, x, y, prcl);
-}
+
diff --git a/reactos/drivers/video/displays/framebuf_acc/screen.c b/reactos/drivers/video/displays/framebufacc/screen.c
similarity index 100%
rename from reactos/drivers/video/displays/framebuf_acc/screen.c
rename to reactos/drivers/video/displays/framebufacc/screen.c
diff --git a/reactos/drivers/video/displays/framebuf_acc/surface.c b/reactos/drivers/video/displays/framebufacc/surface.c
similarity index 99%
rename from reactos/drivers/video/displays/framebuf_acc/surface.c
rename to reactos/drivers/video/displays/framebufacc/surface.c
index 470153d36bf..0d04451c9ae 100644
--- a/reactos/drivers/video/displays/framebuf_acc/surface.c
+++ b/reactos/drivers/video/displays/framebufacc/surface.c
@@ -155,6 +155,9 @@ DrvEnableSurface(
return FALSE;
}
+ /* Rest the desktop vitual position */
+ ppdev->ScreenOffsetXY = {0,0};
+
switch (ppdev->BitsPerPixel)
{