More code moved to the X11 driver (bitmap and palette and misc).

diff --git a/windows/clipboard.c b/windows/clipboard.c
index c7af89c..75a1a1e 100644
--- a/windows/clipboard.c
+++ b/windows/clipboard.c
@@ -21,18 +21,14 @@
 #include "xmalloc.h"
 #include "debug.h"
 
-#ifndef X_DISPLAY_MISSING
-extern CLIPBOARD_DRIVER X11DRV_CLIPBOARD_Driver;
-#else /* X_DISPLAY_MISSING */
-extern CLIPBOARD_DRIVER TTYDRV_CLIPBOARD_Driver;
-#endif /* X_DISPLAY_MISSING */
-
 #define  CF_REGFORMATBASE 	0xC000
 
 /**************************************************************************
  *			internal variables
  */
 
+CLIPBOARD_DRIVER *CLIPBOARD_Driver = NULL;
+
 static HQUEUE16 hqClipLock   = 0;
 static BOOL bCBHasChanged  = FALSE;
 
@@ -72,19 +68,6 @@
     return lpFormat;
 }
 
-
-/**************************************************************************
- *		CLIPBOARD_GetDriver
- */
-CLIPBOARD_DRIVER *CLIPBOARD_GetDriver()
-{
-#ifndef X_DISPLAY_MISSING
-  return &X11DRV_CLIPBOARD_Driver;
-#else /* X_DISPLAY_MISSING */
-  return &TTYDRV_CLIPBOARD_Driver;
-#endif /* X_DISPLAY_MISSING */
-};
-
 /**************************************************************************
  *                      CLIPBOARD_ResetLock
  */
@@ -267,7 +250,7 @@
 
     hWndClipOwner = hWndClipWindow;
 
-    CLIPBOARD_GetDriver()->pEmptyClipboard();
+    CLIPBOARD_Driver->pEmptyClipboard();
 
     return TRUE;
 }
@@ -310,7 +293,7 @@
     if( (hqClipLock != GetFastQueue16()) || !lpFormat ||
 	(!hData && (!hWndClipOwner || (hWndClipOwner != hWndClipWindow))) ) return 0; 
 
-    CLIPBOARD_GetDriver()->pSetClipboardData(wFormat);
+    CLIPBOARD_Driver->pSetClipboardData(wFormat);
 
     if ( lpFormat->wDataPresent || lpFormat->hData16 || lpFormat->hData32 ) 
     {
@@ -358,7 +341,7 @@
     if( (hqClipLock != GetFastQueue16()) || !lpFormat ||
 	(!hData && (!hWndClipOwner || (hWndClipOwner != hWndClipWindow))) ) return 0; 
 
-    CLIPBOARD_GetDriver()->pSetClipboardData(wFormat);
+    CLIPBOARD_Driver->pSetClipboardData(wFormat);
 
     if ( lpFormat->wDataPresent || lpFormat->hData16 || lpFormat->hData32 ) 
     {
@@ -626,7 +609,7 @@
     TRACE(clipboard,"(void)\n");
 
     /* FIXME: Returns BOOL32 */
-    CLIPBOARD_GetDriver()->pRequestSelection();
+    CLIPBOARD_Driver->pRequestSelection();
 
     FormatCount += abs(lpFormat[CF_TEXT-1].wDataPresent -
 		       lpFormat[CF_OEMTEXT-1].wDataPresent); 
@@ -668,7 +651,7 @@
     if( hqClipLock != GetFastQueue16() ) return 0;
 
     if( (!wFormat || wFormat == CF_TEXT || wFormat == CF_OEMTEXT) ) 
-        CLIPBOARD_GetDriver()->pRequestSelection();
+        CLIPBOARD_Driver->pRequestSelection();
 
     if (wFormat == 0)
     {
@@ -895,7 +878,7 @@
     TRACE(clipboard,"(%04X) !\n", wFormat);
 
     if( (wFormat == CF_TEXT || wFormat == CF_OEMTEXT) )
-        CLIPBOARD_GetDriver()->pRequestSelection();
+        CLIPBOARD_Driver->pRequestSelection();
 
     return CLIPBOARD_IsPresent(wFormat);
 }
diff --git a/windows/dce.c b/windows/dce.c
index ad8433c..2f52572 100644
--- a/windows/dce.c
+++ b/windows/dce.c
@@ -17,8 +17,7 @@
  * DCX_WINDOWPAINT - BeginPaint() is in effect
  */
 
-#include "x11drv.h"
-
+#include "desktop.h"
 #include "options.h"
 #include "dce.h"
 #include "class.h"
@@ -798,11 +797,9 @@
 		hrgnVisible = CreateRectRgn( 0, 0, 0, 0 );
             WIN_ReleaseWndPtr(parentPtr);
         }
-        else 
-	    if ((hwnd == GetDesktopWindow()) &&
-                (X11DRV_WND_GetXRootWindow(wndPtr) == DefaultRootWindow(display)))
-                 hrgnVisible = CreateRectRgn( 0, 0, SYSMETRICS_CXSCREEN,
-						      SYSMETRICS_CYSCREEN );
+        else
+	    if ((hwnd == GetDesktopWindow()) && !DESKTOP_IsSingleWindow())
+                 hrgnVisible = CreateRectRgn( 0, 0, SYSMETRICS_CXSCREEN, SYSMETRICS_CYSCREEN );
 	    else 
             {
                 hrgnVisible = DCE_GetVisRgn( hwnd, flags, 0, 0 );
diff --git a/windows/defwnd.c b/windows/defwnd.c
index 3bd9e15..94f7d0c 100644
--- a/windows/defwnd.c
+++ b/windows/defwnd.c
@@ -6,6 +6,7 @@
  */
 
 #include <string.h>
+
 #include "win.h"
 #include "user.h"
 #include "heap.h"
diff --git a/windows/display.c b/windows/display.c
index 7909a69..9f1b7cf 100644
--- a/windows/display.c
+++ b/windows/display.c
@@ -5,29 +5,11 @@
  *
  */
 
-#include "config.h"
-
-#include "display.h"
 #include "debug.h"
+#include "display.h"
+#include "mouse.h"
 #include "windef.h"
-
-#ifndef X_DISPLAY_MISSING
-extern MOUSE_DRIVER X11DRV_MOUSE_Driver;
-#else /* X_DISPLAY_MISSING */
-extern MOUSE_DRIVER TTYDRV_MOUSE_Driver;
-#endif /* X_DISPLAY_MISSING */
-
-/***********************************************************************
- *           MOUSE_GetDriver()
- */
-MOUSE_DRIVER *MOUSE_GetDriver()
-{
-#ifndef X_DISPLAY_MISSING
-  return &X11DRV_MOUSE_Driver;
-#else /* X_DISPLAY_MISSING */
-  return &TTYDRV_MOUSE_Driver;
-#endif /* X_DISPLAY_MISSING */
-}
+#include "wine/winuser16.h"
 
 /***********************************************************************
  *           DISPLAY_Inquire			(DISPLAY.101)
@@ -45,7 +27,7 @@
  */
 VOID WINAPI DISPLAY_SetCursor( CURSORICONINFO *lpCursor )
 {
-   MOUSE_GetDriver()->pSetCursor(lpCursor);
+   MOUSE_Driver->pSetCursor(lpCursor);
 }
 
 /***********************************************************************
@@ -53,7 +35,7 @@
  */
 VOID WINAPI DISPLAY_MoveCursor( WORD wAbsX, WORD wAbsY )
 {
-   MOUSE_GetDriver()->pMoveCursor(wAbsX, wAbsY);
+   MOUSE_Driver->pMoveCursor(wAbsX, wAbsY);
 }
 
 /***********************************************************************
diff --git a/windows/event.c b/windows/event.c
index 636cb11..5deeb86 100644
--- a/windows/event.c
+++ b/windows/event.c
@@ -5,27 +5,11 @@
  * 
  */
 
-#include "config.h"
-
 #include "message.h"
 
-#ifndef X_DISPLAY_MISSING
-extern EVENT_DRIVER X11DRV_EVENT_Driver;
-#else /* X_DISPLAY_MISSING */
-extern EVENT_DRIVER TTYDRV_EVENT_Driver;
-#endif /* X_DISPLAY_MISSING */
+/**********************************************************************/
 
-/***********************************************************************
- *		EVENT_GetDriver
- */
-EVENT_DRIVER *EVENT_GetDriver(void)
-{
-#ifndef X_DISPLAY_MISSING
-  return &X11DRV_EVENT_Driver;
-#else /* X_DISPLAY_MISSING */
-  return &TTYDRV_EVENT_Driver;
-#endif /* X_DISPLAY_MISSING */
-}
+EVENT_DRIVER *EVENT_Driver = NULL;
 
 /***********************************************************************
  *		EVENT_Init
@@ -34,7 +18,7 @@
  */
 BOOL EVENT_Init(void)
 {
-  return EVENT_GetDriver()->pInit();
+  return EVENT_Driver->pInit();
 }
 
 /***********************************************************************
@@ -42,7 +26,7 @@
  */
 void EVENT_AddIO(int fd, unsigned io_type)
 {
-  EVENT_GetDriver()->pAddIO(fd, io_type);
+  EVENT_Driver->pAddIO(fd, io_type);
 }
 
 /***********************************************************************
@@ -50,7 +34,7 @@
  */
 void EVENT_DeleteIO(int fd, unsigned io_type)
 {
-  EVENT_GetDriver()->pDeleteIO(fd, io_type);
+  EVENT_Driver->pDeleteIO(fd, io_type);
 }
 
 /***********************************************************************
@@ -62,7 +46,7 @@
  */
 BOOL EVENT_WaitNetEvent(BOOL sleep, BOOL peek)
 {
-  return EVENT_GetDriver()->pWaitNetEvent(sleep, peek);
+  return EVENT_Driver->pWaitNetEvent(sleep, peek);
 }
 
 /***********************************************************************
@@ -72,7 +56,7 @@
  */
 void EVENT_Synchronize(void)
 {
-  EVENT_GetDriver()->pSynchronize();
+  EVENT_Driver->pSynchronize();
 }
 
 /**********************************************************************
@@ -80,7 +64,7 @@
  */
 BOOL EVENT_CheckFocus(void)
 {
-  return EVENT_GetDriver()->pCheckFocus();
+  return EVENT_Driver->pCheckFocus();
 }
 
 /***********************************************************************
@@ -88,7 +72,7 @@
  */
 BOOL EVENT_QueryPointer(DWORD *posX, DWORD *posY, DWORD *state)
 {
-  return EVENT_GetDriver()->pQueryPointer(posX, posY, state);
+  return EVENT_Driver->pQueryPointer(posX, posY, state);
 }
 
 
@@ -99,15 +83,15 @@
  */
 void EVENT_DummyMotionNotify(void)
 {
-  EVENT_GetDriver()->pDummyMotionNotify();
+  EVENT_Driver->pDummyMotionNotify();
 }
 
 /**********************************************************************
- *		X11DRV_EVENT_Pending
+ *		EVENT_Pending
  */
 BOOL EVENT_Pending()
 {
-  return EVENT_GetDriver()->pPending();
+  return EVENT_Driver->pPending();
 }
 
 /***********************************************************************
@@ -117,7 +101,7 @@
  */
 BOOL16 WINAPI IsUserIdle16(void)
 {
-  return EVENT_GetDriver()->pIsUserIdle();
+  return EVENT_Driver->pIsUserIdle();
 }
 
 /***********************************************************************
@@ -129,5 +113,5 @@
  */
 void EVENT_WakeUp(void)
 {
-  EVENT_GetDriver()->pWakeUp();
+  EVENT_Driver->pWakeUp();
 }
diff --git a/windows/keyboard.c b/windows/keyboard.c
index 2ddf793..fa39c62 100644
--- a/windows/keyboard.c
+++ b/windows/keyboard.c
@@ -9,11 +9,10 @@
  *
  */
 
-#include "config.h"
-
 #include <stdlib.h>
 #include <string.h>
 #include <ctype.h>
+
 #include "winuser.h"
 #include "wine/keyboard16.h"
 #include "win.h"
@@ -25,27 +24,13 @@
 #include "struct32.h"
 #include "winerror.h"
 
+/**********************************************************************/
+
+KEYBOARD_DRIVER *KEYBOARD_Driver = NULL;
+
 static LPKEYBD_EVENT_PROC DefKeybEventProc = NULL;
 LPBYTE pKeyStateTable = NULL;
 
-#ifndef X_DISPLAY_MISSING
-extern KEYBOARD_DRIVER X11DRV_KEYBOARD_Driver;
-#else /* X_DISPLAY_MISSING */
-extern KEYBOARD_DRIVER TTYDRV_KEYBOARD_Driver;
-#endif /* X_DISPLAY_MISSING */
-
-/***********************************************************************
- *           KEYBOARD_GetDriver
- */
-KEYBOARD_DRIVER *KEYBOARD_GetDriver()
-{
-#ifndef X_DISPLAY_MISSING
-  return &X11DRV_KEYBOARD_Driver;
-#else /* X_DISPLAY_MISSING */
-  return &TTYDRV_KEYBOARD_Driver;
-#endif /* X_DISPLAY_MISSING */
-}
-
 /***********************************************************************
  *           KEYBOARD_Inquire			(KEYBOARD.1)
  */
@@ -74,7 +59,7 @@
   /* all states to false */
   memset( lpKeyState, 0, sizeof(lpKeyState) );
   
-  if (!initDone) KEYBOARD_GetDriver()->pInit();
+  if (!initDone) KEYBOARD_Driver->pInit();
   initDone = TRUE;
 }
 
@@ -145,7 +130,7 @@
 
 WORD WINAPI VkKeyScan16(CHAR cChar)
 {
-  return KEYBOARD_GetDriver()->pVkKeyScan(cChar);
+  return KEYBOARD_Driver->pVkKeyScan(cChar);
 }
 
 /******************************************************************************
@@ -178,7 +163,7 @@
  */
 UINT16 WINAPI MapVirtualKey16(UINT16 wCode, UINT16 wMapType)
 {
-  return KEYBOARD_GetDriver()->pMapVirtualKey(wCode,wMapType);
+  return KEYBOARD_Driver->pMapVirtualKey(wCode,wMapType);
 }
 
 /****************************************************************************
@@ -195,7 +180,7 @@
  */
 INT16 WINAPI GetKeyNameText16(LONG lParam, LPSTR lpBuffer, INT16 nSize)
 {
-  return KEYBOARD_GetDriver()->pGetKeyNameText(lParam, lpBuffer, nSize);
+  return KEYBOARD_Driver->pGetKeyNameText(lParam, lpBuffer, nSize);
 }
 
 /****************************************************************************
@@ -219,8 +204,32 @@
 INT16 WINAPI ToAscii16(UINT16 virtKey,UINT16 scanCode, LPBYTE lpKeyState, 
                        LPVOID lpChar, UINT16 flags) 
 {
-    return KEYBOARD_GetDriver()->pToAscii(
+    return KEYBOARD_Driver->pToAscii(
         virtKey, scanCode, lpKeyState, lpChar, flags
     );
 }
 
+/***********************************************************************
+ *		KEYBOARD_GetBeepActive
+ */
+BOOL KEYBOARD_GetBeepActive()
+{
+  return KEYBOARD_Driver->pGetBeepActive();
+}
+
+/***********************************************************************
+ *		KEYBOARD_SetBeepActive
+ */
+void KEYBOARD_SetBeepActive(BOOL bActivate)
+{
+  KEYBOARD_Driver->pSetBeepActive(bActivate);
+}
+
+/***********************************************************************
+ *		KEYBOARD_Beep
+ */
+void KEYBOARD_Beep(void)
+{
+  KEYBOARD_Driver->pBeep();
+}
+
diff --git a/windows/mouse.c b/windows/mouse.c
index 64f4998..cfd59f1 100644
--- a/windows/mouse.c
+++ b/windows/mouse.c
@@ -5,17 +5,14 @@
  * 
  */
 
-#include <assert.h>
-#include "winuser.h"
-#include "gdi.h"
-#include "mouse.h"
 #include "debug.h"
-#include "debugtools.h"
+#include "mouse.h"
 #include "monitor.h"
+#include "winuser.h"
 
 /**********************************************************************/
 
-extern BOOL X11DRV_MOUSE_DisableWarpPointer;
+MOUSE_DRIVER *MOUSE_Driver = NULL;
 
 static LPMOUSE_EVENT_PROC DefMouseEventProc = NULL;
 
@@ -62,6 +59,7 @@
     int width  = MONITOR_GetWidth (&MONITOR_PrimaryMonitor);
     int height = MONITOR_GetHeight(&MONITOR_PrimaryMonitor);
     WINE_MOUSEEVENT wme;
+    BOOL bOldWarpPointer;
 
     if ( !DefMouseEventProc ) return;
 
@@ -76,8 +74,7 @@
     wme.time     = time;
     wme.hWnd     = hWnd;
 
-    X11DRV_MOUSE_DisableWarpPointer = TRUE;
+    bOldWarpPointer = MOUSE_Driver->pEnableWarpPointer(FALSE);
     DefMouseEventProc( mouseStatus, posX, posY, 0, (DWORD)&wme );
-    X11DRV_MOUSE_DisableWarpPointer = FALSE;
+    MOUSE_Driver->pEnableWarpPointer(bOldWarpPointer);
 }
-
diff --git a/windows/multimon.c b/windows/multimon.c
index 12ba428..5dc3987 100644
--- a/windows/multimon.c
+++ b/windows/multimon.c
@@ -4,9 +4,13 @@
  * Copyright 1998 Turchanov Sergey
  */
 
+#include "monitor.h"
 #include "winbase.h"
 #include "winuser.h"
-#include "monitor.h"
+
+/**********************************************************************/
+
+MONITOR_DRIVER *MONITOR_Driver;
 
 /**********************************************************************/
 
@@ -15,11 +19,26 @@
 MONITOR MONITOR_PrimaryMonitor;
 
 /***********************************************************************
+ *              MONITOR_GetMonitor
+ */
+MONITOR *MONITOR_GetMonitor(HMONITOR hMonitor)
+{
+  if(hMonitor == xPRIMARY_MONITOR)
+    {
+      return &MONITOR_PrimaryMonitor;
+    }
+  else
+    {
+      return NULL;
+    }
+}
+
+/***********************************************************************
  *              MONITOR_Initialize
  */
 void MONITOR_Initialize(MONITOR *pMonitor)
 {
-  pMonitor->pDriver->pInitialize(pMonitor);
+  MONITOR_Driver->pInitialize(pMonitor);
 }
 
 /***********************************************************************
@@ -27,7 +46,15 @@
  */
 void MONITOR_Finalize(MONITOR *pMonitor)
 {
-  pMonitor->pDriver->pFinalize(pMonitor);
+  MONITOR_Driver->pFinalize(pMonitor);
+}
+
+/***********************************************************************
+ *              MONITOR_IsSingleWindow
+ */
+BOOL MONITOR_IsSingleWindow(MONITOR *pMonitor)
+{
+  return MONITOR_Driver->pIsSingleWindow(pMonitor);
 }
 
 /***********************************************************************
@@ -35,7 +62,7 @@
  */
 int MONITOR_GetWidth(MONITOR *pMonitor)
 {
-  return pMonitor->pDriver->pGetWidth(pMonitor);
+  return MONITOR_Driver->pGetWidth(pMonitor);
 }
 
 /***********************************************************************
@@ -43,7 +70,7 @@
  */
 int MONITOR_GetHeight(MONITOR *pMonitor)
 {
-  return pMonitor->pDriver->pGetHeight(pMonitor);
+  return MONITOR_Driver->pGetHeight(pMonitor);
 }
 
 /***********************************************************************
@@ -51,9 +78,42 @@
  */
 int MONITOR_GetDepth(MONITOR *pMonitor)
 {
-  return pMonitor->pDriver->pGetDepth(pMonitor);
+  return MONITOR_Driver->pGetDepth(pMonitor);
 }
 
+/***********************************************************************
+ *              MONITOR_GetScreenSaveActive
+ */
+BOOL MONITOR_GetScreenSaveActive(MONITOR *pMonitor)
+{
+  return MONITOR_Driver->pGetScreenSaveActive(pMonitor);
+}
+
+/***********************************************************************
+ *              MONITOR_SetScreenSaveActive
+ */
+void MONITOR_SetScreenSaveActive(MONITOR *pMonitor, BOOL bActivate)
+{
+  MONITOR_Driver->pSetScreenSaveActive(pMonitor, bActivate);
+}
+
+/***********************************************************************
+ *              MONITOR_GetScreenSaveTimeout
+ */
+int MONITOR_GetScreenSaveTimeout(MONITOR *pMonitor)
+{
+  return MONITOR_Driver->pGetScreenSaveTimeout(pMonitor);
+}
+
+/***********************************************************************
+ *              MONITOR_SetScreenSaveTimeout
+ */
+void MONITOR_SetScreenSaveTimeout(MONITOR *pMonitor, int nTimeout)
+{
+  MONITOR_Driver->pSetScreenSaveTimeout(pMonitor, nTimeout);
+}
+
+
 /**********************************************************************/
 
 HMONITOR WINAPI MonitorFromPoint(POINT ptScreenCoords, DWORD dwFlags)
diff --git a/windows/scroll.c b/windows/scroll.c
index ddf6d7c..97523b0 100644
--- a/windows/scroll.c
+++ b/windows/scroll.c
@@ -8,6 +8,7 @@
  */
 
 #include <stdlib.h>
+
 #include "winuser.h"
 #include "class.h"
 #include "dc.h"
diff --git a/windows/ttydrv/init.c b/windows/ttydrv/init.c
index b7e6396..7f6a15b 100644
--- a/windows/ttydrv/init.c
+++ b/windows/ttydrv/init.c
@@ -6,12 +6,22 @@
 
 #include "clipboard.h"
 #include "desktop.h"
-#include "display.h"
 #include "keyboard.h"
 #include "message.h"
 #include "monitor.h"
+#include "mouse.h"
+#include "user.h"
+#include "win.h"
 #include "ttydrv.h"
 
+USER_DRIVER TTYDRV_USER_Driver =
+{
+  TTYDRV_USER_Initialize,
+  TTYDRV_USER_Finalize,
+  TTYDRV_USER_BeginDebugging,
+  TTYDRV_USER_EndDebugging
+};
+
 CLIPBOARD_DRIVER TTYDRV_CLIPBOARD_Driver =
 {
   TTYDRV_CLIPBOARD_EmptyClipboard,
@@ -47,22 +57,31 @@
   TTYDRV_KEYBOARD_VkKeyScan,
   TTYDRV_KEYBOARD_MapVirtualKey,
   TTYDRV_KEYBOARD_GetKeyNameText,
-  TTYDRV_KEYBOARD_ToAscii
+  TTYDRV_KEYBOARD_ToAscii,
+  TTYDRV_KEYBOARD_GetBeepActive,
+  TTYDRV_KEYBOARD_SetBeepActive,
+  TTYDRV_KEYBOARD_Beep
 };
 
 MONITOR_DRIVER TTYDRV_MONITOR_Driver =
 {
   TTYDRV_MONITOR_Initialize,
   TTYDRV_MONITOR_Finalize,
+  TTYDRV_MONITOR_IsSingleWindow,
   TTYDRV_MONITOR_GetWidth,
   TTYDRV_MONITOR_GetHeight,
-  TTYDRV_MONITOR_GetDepth
+  TTYDRV_MONITOR_GetDepth,
+  TTYDRV_MONITOR_GetScreenSaveActive,
+  TTYDRV_MONITOR_SetScreenSaveActive,
+  TTYDRV_MONITOR_GetScreenSaveTimeout,
+  TTYDRV_MONITOR_SetScreenSaveTimeout
 };
 
 MOUSE_DRIVER TTYDRV_MOUSE_Driver =
 {
   TTYDRV_MOUSE_SetCursor,
-  TTYDRV_MOUSE_MoveCursor
+  TTYDRV_MOUSE_MoveCursor,
+  TTYDRV_MOUSE_EnableWarpPointer
 };
 
 WND_DRIVER TTYDRV_WND_Driver =
diff --git a/windows/ttydrv/keyboard.c b/windows/ttydrv/keyboard.c
index a6a1f6f..8010b79 100644
--- a/windows/ttydrv/keyboard.c
+++ b/windows/ttydrv/keyboard.c
@@ -53,6 +53,27 @@
   return 0;
 }
 
+/***********************************************************************
+ *		TTYDRV_KEYBOARD_GetBeepActive
+ */
+BOOL TTYDRV_KEYBOARD_GetBeepActive()
+{
+  return FALSE;
+}
+
+/***********************************************************************
+ *		TTYDRV_KEYBOARD_SetBeepActive
+ */
+void TTYDRV_KEYBOARD_SetBeepActive(BOOL bActivate)
+{
+}
+
+/***********************************************************************
+ *		TTYDRV_KEYBOARD_Beep
+ */
+void TTYDRV_KEYBOARD_Beep()
+{
+}
 
 
 
diff --git a/windows/ttydrv/main.c b/windows/ttydrv/main.c
index 88e39b8..b398585 100644
--- a/windows/ttydrv/main.c
+++ b/windows/ttydrv/main.c
@@ -5,46 +5,50 @@
  *
  */
 
+#include "clipboard.h"
+#include "desktop.h"
+#include "message.h"
+#include "keyboard.h"
+#include "monitor.h"
+#include "mouse.h"
 #include "ttydrv.h"
+#include "win.h"
 
 /***********************************************************************
- *              TTYDRV_MAIN_Initialize
+ *              TTYDRV_USER_Initialize
  */
-void TTYDRV_MAIN_Initialize()
+BOOL TTYDRV_USER_Initialize(void)
 {
+  CLIPBOARD_Driver = &TTYDRV_CLIPBOARD_Driver;
+  DESKTOP_Driver = &TTYDRV_DESKTOP_Driver;
+  EVENT_Driver = &TTYDRV_EVENT_Driver;
+  KEYBOARD_Driver = &TTYDRV_KEYBOARD_Driver;
+  MONITOR_Driver = &TTYDRV_MONITOR_Driver;
+  MOUSE_Driver = &TTYDRV_MOUSE_Driver;
+  WND_Driver = &TTYDRV_WND_Driver;
+
+  return TRUE;
 }
 
 /***********************************************************************
- *              TTYDRV_MAIN_Finalize
+ *              TTYDRV_USER_Finalize
  */
-void TTYDRV_MAIN_Finalize()
+void TTYDRV_USER_Finalize(void)
 {
 }
 
-/***********************************************************************
- *              TTYDRV_MAIN_ParseOptions
+/**************************************************************************
+ *		TTYDRV_USER_BeginDebugging
  */
-void TTYDRV_MAIN_ParseOptions(int *argc, char *argv[])
+void TTYDRV_USER_BeginDebugging(void)
 {
 }
 
-/***********************************************************************
- *		TTYDRV_MAIN_Create
+/**************************************************************************
+ *		TTYDRV_USER_EndDebugging
  */
-void TTYDRV_MAIN_Create()
+void TTYDRV_USER_EndDebugging(void)
 {
 }
 
-/***********************************************************************
- *           TTYDRV_MAIN_SaveSetup
- */
-void TTYDRV_MAIN_SaveSetup()
-{
-}
 
-/***********************************************************************
- *           TTYDRV_MAIN_RestoreSetup
- */
-void TTYDRV_MAIN_RestoreSetup()
-{
-}
diff --git a/windows/ttydrv/monitor.c b/windows/ttydrv/monitor.c
index 469330a..bf5297c 100644
--- a/windows/ttydrv/monitor.c
+++ b/windows/ttydrv/monitor.c
@@ -34,6 +34,14 @@
 }
 
 /***********************************************************************
+ *              TTYDRV_MONITOR_IsSingleWindow
+ */
+BOOL TTYDRV_MONITOR_IsSingleWindow(MONITOR *pMonitor)
+{
+  return TRUE;
+}
+
+/***********************************************************************
  *              TTYDRV_MONITOR_GetWidth
  *
  * Return the width of the monitor
@@ -71,3 +79,42 @@
 
   return pTTYMonitor->depth;
 }
+
+/***********************************************************************
+ *              TTYDRV_MONITOR_GetScreenSaveActive
+ *
+ * Returns the active status of the screen saver
+ */
+BOOL TTYDRV_MONITOR_GetScreenSaveActive(MONITOR *pMonitor)
+{
+  return FALSE;
+}
+
+/***********************************************************************
+ *              TTYDRV_MONITOR_SetScreenSaveActive
+ *
+ * Activate/Deactivate the screen saver
+ */
+void TTYDRV_MONITOR_SetScreenSaveActive(MONITOR *pMonitor, BOOL bActivate)
+{
+}
+
+/***********************************************************************
+ *              TTYDRV_MONITOR_GetScreenSaveTimeout
+ *
+ * Return the screen saver timeout
+ */
+int TTYDRV_MONITOR_GetScreenSaveTimeout(MONITOR *pMonitor)
+{
+  return 0;
+}
+
+/***********************************************************************
+ *              TTYDRV_MONITOR_SetScreenSaveTimeout
+ *
+ * Set the screen saver timeout
+ */
+void TTYDRV_MONITOR_SetScreenSaveTimeout(
+  MONITOR *pMonitor, int nTimeout)
+{
+}
diff --git a/windows/ttydrv/mouse.c b/windows/ttydrv/mouse.c
index fba316d..9ea016e 100644
--- a/windows/ttydrv/mouse.c
+++ b/windows/ttydrv/mouse.c
@@ -19,3 +19,11 @@
 void TTYDRV_MOUSE_MoveCursor(WORD wAbsX, WORD wAbsY)
 {
 }
+
+/***********************************************************************
+ *           TTYDRV_MOUSE_EnableWarpPointer
+ */
+BOOL TTYDRV_MOUSE_EnableWarpPointer(BOOL bEnable)
+{
+  return TRUE;
+}
diff --git a/windows/ttydrv/wnd.c b/windows/ttydrv/wnd.c
index 7085ac9..e488037 100644
--- a/windows/ttydrv/wnd.c
+++ b/windows/ttydrv/wnd.c
@@ -48,7 +48,7 @@
 }
 
 /*****************************************************************
- *		X11DRV_WND_SetParent
+ *		TTYDRV_WND_SetParent
  */
 WND *TTYDRV_WND_SetParent(WND *wndPtr, WND *pWndParent)
 {
@@ -64,8 +64,6 @@
 
 /***********************************************************************
  *           WINPOS_SetXWindowPos
- *
- * SetWindowPos() for an X window. Used by the real SetWindowPos().
  */
 void TTYDRV_WND_SetWindowPos(WND *wndPtr, const WINDOWPOS *winpos, BOOL bSMC_SETXPOS)
 {
@@ -131,4 +129,3 @@
 {
   return FALSE;
 }
-
diff --git a/windows/win.c b/windows/win.c
index e2ea887..402319d 100644
--- a/windows/win.c
+++ b/windows/win.c
@@ -4,8 +4,6 @@
  * Copyright 1993, 1994 Alexandre Julliard
  */
 
-#include "config.h"
-
 #include <stdlib.h>
 #include <string.h>
 #include "wine/winbase16.h"
@@ -36,13 +34,9 @@
 #include "local.h"
 #include "desktop.h"
 
-#ifndef X_DISPLAY_MISSING
-extern DESKTOP_DRIVER X11DRV_DESKTOP_Driver;
-extern WND_DRIVER X11DRV_WND_Driver;
-#else /* X_DISPLAY_MISSING */
-extern DESKTOP_DRIVER TTYDRV_DESKTOP_Driver;
-extern WND_DRIVER TTYDRV_WND_Driver;
-#endif /* X_DISPLAY_MISSING */
+/**********************************************************************/
+
+WND_DRIVER *WND_Driver = NULL;
 
 /* Desktop window */
 static WND *pWndDesktop = NULL;
@@ -624,13 +618,8 @@
     pWndDesktop = (WND *) USER_HEAP_LIN_ADDR( hwndDesktop );
 
     pDesktop = (DESKTOP *) pWndDesktop->wExtra;
-#ifndef X_DISPLAY_MISSING
-    pDesktop->pDriver = &X11DRV_DESKTOP_Driver;
-    pWndDesktop->pDriver = &X11DRV_WND_Driver;
-#else /* X_DISPLAY_MISSING */
-    pDesktop->pDriver = &TTYDRV_DESKTOP_Driver;
-    pWndDesktop->pDriver = &TTYDRV_WND_Driver;
-#endif /* X_DISPLAY_MISSING */
+    pDesktop->pDriver = DESKTOP_Driver;
+    pWndDesktop->pDriver = WND_Driver;
 
     pDesktop->pDriver->pInitialize(pDesktop);
     pWndDesktop->pDriver->pInitialize(pWndDesktop);
@@ -1179,7 +1168,7 @@
     WIN_CheckFocus(pWnd);
 
     if( CARET_GetHwnd() == pWnd->hwndSelf ) DestroyCaret();
-    CLIPBOARD_GetDriver()->pResetOwner( pWnd, TRUE ); 
+    CLIPBOARD_Driver->pResetOwner( pWnd, TRUE ); 
 
     /*
      * Send the WM_DESTROY to the window.
@@ -1320,7 +1309,7 @@
             }
 	}
 
-    CLIPBOARD_GetDriver()->pResetOwner( wndPtr, FALSE ); /* before the window is unmapped */
+    CLIPBOARD_Driver->pResetOwner( wndPtr, FALSE ); /* before the window is unmapped */
 
       /* Hide the window */
 
diff --git a/windows/winpos.c b/windows/winpos.c
index 99399c0..aadcd07 100644
--- a/windows/winpos.c
+++ b/windows/winpos.c
@@ -5,8 +5,6 @@
  *                       1995, 1996, 1999 Alex Korobka
  */
 
-#include "x11drv.h"
-
 #include <string.h>
 #include "sysmetrics.h"
 #include "heap.h"
diff --git a/windows/x11drv/event.c b/windows/x11drv/event.c
index e1bf6da..106903a 100644
--- a/windows/x11drv/event.c
+++ b/windows/x11drv/event.c
@@ -1156,7 +1156,10 @@
   unsigned char*	p_data = NULL;
   union {
     Atom		atom_aux;
-    POINT	pt_aux;
+    struct {
+      int x;
+      int y;
+    } pt_aux;
     int		i;
   }		u;
   int			x, y;
@@ -1278,7 +1281,6 @@
   int		x, y, drop32 = FALSE ;
   union {
     Atom	atom_aux;
-    POINT	pt_aux;
     int         i;
     Window      w_aux;
   }		u; /* unused */
@@ -1456,7 +1458,7 @@
 {
   if( !Options.managed && X11DRV_GetXRootWindow() == DefaultRootWindow(display) &&
       (COLOR_GetSystemPaletteFlags() & COLOR_PRIVATE) && GetFocus() )
-    TSXInstallColormap( display, X11DRV_COLOR_GetColormap() );
+    TSXInstallColormap( display, X11DRV_PALETTE_GetColormap() );
 }
 #endif
 
diff --git a/windows/x11drv/init.c b/windows/x11drv/init.c
index ead5570..d7a59e1 100644
--- a/windows/x11drv/init.c
+++ b/windows/x11drv/init.c
@@ -10,13 +10,22 @@
 
 #include "clipboard.h"
 #include "desktop.h"
-#include "display.h"
 #include "keyboard.h"
 #include "message.h"
 #include "monitor.h"
+#include "mouse.h"
+#include "user.h"
 #include "win.h"
 #include "x11drv.h"
 
+USER_DRIVER X11DRV_USER_Driver =
+{
+  X11DRV_USER_Initialize,
+  X11DRV_USER_Finalize,
+  X11DRV_USER_BeginDebugging,
+  X11DRV_USER_EndDebugging
+};
+
 CLIPBOARD_DRIVER X11DRV_CLIPBOARD_Driver =
 {
   X11DRV_CLIPBOARD_EmptyClipboard,
@@ -52,22 +61,31 @@
   X11DRV_KEYBOARD_VkKeyScan,
   X11DRV_KEYBOARD_MapVirtualKey,
   X11DRV_KEYBOARD_GetKeyNameText,
-  X11DRV_KEYBOARD_ToAscii
+  X11DRV_KEYBOARD_ToAscii,
+  X11DRV_KEYBOARD_GetBeepActive,
+  X11DRV_KEYBOARD_SetBeepActive,
+  X11DRV_KEYBOARD_Beep
 };
 
 MONITOR_DRIVER X11DRV_MONITOR_Driver =
 {
   X11DRV_MONITOR_Initialize,
   X11DRV_MONITOR_Finalize,
+  X11DRV_MONITOR_IsSingleWindow,
   X11DRV_MONITOR_GetWidth,
   X11DRV_MONITOR_GetHeight,
-  X11DRV_MONITOR_GetDepth
+  X11DRV_MONITOR_GetDepth,
+  X11DRV_MONITOR_GetScreenSaveActive,
+  X11DRV_MONITOR_SetScreenSaveActive,
+  X11DRV_MONITOR_GetScreenSaveTimeout,
+  X11DRV_MONITOR_SetScreenSaveTimeout
 };
 
 MOUSE_DRIVER X11DRV_MOUSE_Driver =
 {
   X11DRV_MOUSE_SetCursor,
-  X11DRV_MOUSE_MoveCursor
+  X11DRV_MOUSE_MoveCursor,
+  X11DRV_MOUSE_EnableWarpPointer
 };
 
 WND_DRIVER X11DRV_WND_Driver =
diff --git a/windows/x11drv/keyboard.c b/windows/x11drv/keyboard.c
index baabca7..3f011ed 100644
--- a/windows/x11drv/keyboard.c
+++ b/windows/x11drv/keyboard.c
@@ -1144,6 +1144,40 @@
     return ret;
 }
 
-#endif /* !defined(X_DISPLAY_MISSING) */
+/***********************************************************************
+ *		X11DRV_KEYBOARD_GetBeepActive
+ */
+BOOL X11DRV_KEYBOARD_GetBeepActive()
+{
+  XKeyboardState  keyboard_state;
 
+  TSXGetKeyboardControl(display, &keyboard_state);
+
+  return keyboard_state.bell_percent != 0;
+}
+
+/***********************************************************************
+ *		X11DRV_KEYBOARD_SetBeepActive
+ */
+void X11DRV_KEYBOARD_SetBeepActive(BOOL bActivate)
+{
+  XKeyboardControl keyboard_value;
+  
+  if(bActivate)
+    keyboard_value.bell_percent = -1;
+  else
+    keyboard_value.bell_percent = 0;
+  
+  TSXChangeKeyboardControl(display, KBBellPercent, &keyboard_value);
+}
+
+/***********************************************************************
+ *		X11DRV_KEYBOARD_Beep
+ */
+void X11DRV_KEYBOARD_Beep()
+{
+  TSXBell(display, 0);
+}
+
+#endif /* !defined(X_DISPLAY_MISSING) */
 
diff --git a/windows/x11drv/main.c b/windows/x11drv/main.c
index 9d2a74e..d5cc1fa 100644
--- a/windows/x11drv/main.c
+++ b/windows/x11drv/main.c
@@ -18,17 +18,30 @@
 #include <stdlib.h>
 #include <string.h>
 #include <unistd.h>
+
+#include "clipboard.h"
 #include "console.h"
 #include "debug.h"
 #include "desktop.h"
+#include "keyboard.h"
 #include "main.h"
+#include "message.h"
 #include "monitor.h"
+#include "mouse.h"
 #include "options.h"
 #include "win.h"
 #include "windef.h"
 #include "x11drv.h"
 #include "xmalloc.h"
 #include "version.h"
+#include "win.h"
+
+/**********************************************************************/
+
+void X11DRV_USER_ParseOptions(int *argc, char *argv[]);
+void X11DRV_USER_Create(void);
+void X11DRV_USER_SaveSetup(void);
+void X11DRV_USER_RestoreSetup(void);
 
 /**********************************************************************/
 
@@ -89,10 +102,18 @@
 }
 
 /***********************************************************************
- *              X11DRV_MAIN_Initialize
+ *              X11DRV_USER_Initialize
  */
-void X11DRV_MAIN_Initialize()
+BOOL X11DRV_USER_Initialize(void)
 {
+  CLIPBOARD_Driver = &X11DRV_CLIPBOARD_Driver;
+  DESKTOP_Driver = &X11DRV_DESKTOP_Driver;
+  EVENT_Driver = &X11DRV_EVENT_Driver;
+  KEYBOARD_Driver = &X11DRV_KEYBOARD_Driver;
+  MONITOR_Driver = &X11DRV_MONITOR_Driver;
+  MOUSE_Driver = &X11DRV_MOUSE_Driver;
+  WND_Driver = &X11DRV_WND_Driver;
+
   /* We need this before calling any Xlib function */
   InitializeCriticalSection( &X11DRV_CritSection );
   MakeCriticalSectionGlobal( &X11DRV_CritSection );
@@ -100,22 +121,43 @@
   TSXrmInitialize();
   
   putenv("XKB_DISABLE="); /* Disable XKB extension if present. */
+
+  X11DRV_USER_ParseOptions( Options.argc, Options.argv );
+  X11DRV_USER_Create();
+  X11DRV_USER_SaveSetup();
 }
 
 /***********************************************************************
- *              X11DRV_MAIN_Finalize
+ *              X11DRV_USER_Finalize
  */
-void X11DRV_MAIN_Finalize()
+void X11DRV_USER_Finalize(void)
+{
+  X11DRV_USER_RestoreSetup();
+}
+
+/**************************************************************************
+ *		X11DRV_USER_BeginDebugging
+ */
+void X11DRV_USER_BeginDebugging(void)
+{
+  TSXUngrabServer(display);
+  TSXFlush(display);
+}
+
+/**************************************************************************
+ *		X11DRV_USER_EndDebugging
+ */
+void X11DRV_USER_EndDebugging(void)
 {
 }
 
 /***********************************************************************
- *		 X11DRV_MAIN_GetResource
+ *		 X11DRV_USER_GetResource
  *
  * Fetch the value of resource 'name' using the correct instance name.
  * 'name' must begin with '.' or '*'
  */
-static int X11DRV_MAIN_GetResource( XrmDatabase db, char *name, XrmValue *value )
+static int X11DRV_USER_GetResource( XrmDatabase db, char *name, XrmValue *value )
 {
   char *buff_instance, *buff_class;
   char *dummy;
@@ -135,10 +177,10 @@
 }
 
 /***********************************************************************
- *              X11DRV_MAIN_ParseOptions
+ *              X11DRV_USER_ParseOptions
  * Parse command line options and open display.
  */
-void X11DRV_MAIN_ParseOptions(int *argc, char *argv[])
+void X11DRV_USER_ParseOptions(int *argc, char *argv[])
 {
   int i;
   char *display_name = NULL;
@@ -155,7 +197,7 @@
   /* Open display */
   
   if (display_name == NULL &&
-      X11DRV_MAIN_GetResource( db, ".display", &value )) display_name = value.addr;
+      X11DRV_USER_GetResource( db, ".display", &value )) display_name = value.addr;
   
   if (!(display = TSXOpenDisplay( display_name )))
     {
@@ -184,35 +226,35 @@
 		     Options.programName, argc, argv );
   
   /* Get all options */
-  if (X11DRV_MAIN_GetResource( db, ".iconic", &value ))
+  if (X11DRV_USER_GetResource( db, ".iconic", &value ))
     Options.cmdShow = SW_SHOWMINIMIZED;
-  if (X11DRV_MAIN_GetResource( db, ".privatemap", &value ))
+  if (X11DRV_USER_GetResource( db, ".privatemap", &value ))
     Options.usePrivateMap = TRUE;
-  if (X11DRV_MAIN_GetResource( db, ".fixedmap", &value ))
+  if (X11DRV_USER_GetResource( db, ".fixedmap", &value ))
     Options.useFixedMap = TRUE;
-  if (X11DRV_MAIN_GetResource( db, ".synchronous", &value ))
+  if (X11DRV_USER_GetResource( db, ".synchronous", &value ))
     Options.synchronous = TRUE;
-  if (X11DRV_MAIN_GetResource( db, ".backingstore", &value ))
+  if (X11DRV_USER_GetResource( db, ".backingstore", &value ))
     Options.backingstore = TRUE;	
-  if (X11DRV_MAIN_GetResource( db, ".debug", &value ))
+  if (X11DRV_USER_GetResource( db, ".debug", &value ))
     Options.debug = TRUE;
-  if (X11DRV_MAIN_GetResource( db, ".failreadonly", &value ))
+  if (X11DRV_USER_GetResource( db, ".failreadonly", &value ))
     Options.failReadOnly = TRUE;
-  if (X11DRV_MAIN_GetResource( db, ".perfect", &value ))
+  if (X11DRV_USER_GetResource( db, ".perfect", &value ))
     Options.perfectGraphics = TRUE;
-  if (X11DRV_MAIN_GetResource( db, ".depth", &value))
+  if (X11DRV_USER_GetResource( db, ".depth", &value))
     Options.screenDepth = atoi( value.addr );
-  if (X11DRV_MAIN_GetResource( db, ".desktop", &value))
+  if (X11DRV_USER_GetResource( db, ".desktop", &value))
     Options.desktopGeometry = value.addr;
-  if (X11DRV_MAIN_GetResource( db, ".language", &value))
+  if (X11DRV_USER_GetResource( db, ".language", &value))
     MAIN_ParseLanguageOption( (char *)value.addr );
-  if (X11DRV_MAIN_GetResource( db, ".managed", &value))
+  if (X11DRV_USER_GetResource( db, ".managed", &value))
     Options.managed = TRUE;
-  if (X11DRV_MAIN_GetResource( db, ".mode", &value))
+  if (X11DRV_USER_GetResource( db, ".mode", &value))
     MAIN_ParseModeOption( (char *)value.addr );
-  if (X11DRV_MAIN_GetResource( db, ".debugoptions", &value))
+  if (X11DRV_USER_GetResource( db, ".debugoptions", &value))
     MAIN_ParseDebugOptions((char*)value.addr);
-  if (X11DRV_MAIN_GetResource( db, ".debugmsg", &value))
+  if (X11DRV_USER_GetResource( db, ".debugmsg", &value))
     {
 #ifndef DEBUG_RUNTIME
       MSG("%s: Option \"-debugmsg\" not implemented.\n" \
@@ -224,7 +266,7 @@
 #endif
     }
   
-  if (X11DRV_MAIN_GetResource( db, ".dll", &value))
+  if (X11DRV_USER_GetResource( db, ".dll", &value))
   {
       if (Options.dllFlags)
       {
@@ -236,35 +278,35 @@
       else Options.dllFlags = xstrdup((char *)value.addr);
   }
   
-  if (X11DRV_MAIN_GetResource( db, ".winver", &value))
+  if (X11DRV_USER_GetResource( db, ".winver", &value))
     VERSION_ParseWinVersion( (char*)value.addr );
-  if (X11DRV_MAIN_GetResource( db, ".dosver", &value))
+  if (X11DRV_USER_GetResource( db, ".dosver", &value))
     VERSION_ParseDosVersion( (char*)value.addr );
-  if (X11DRV_MAIN_GetResource( db, ".config", &value))
+  if (X11DRV_USER_GetResource( db, ".config", &value))
     Options.configFileName = xstrdup((char *)value.addr);
-  if (X11DRV_MAIN_GetResource( db, ".nodga", &value))
+  if (X11DRV_USER_GetResource( db, ".nodga", &value))
     Options.noDGA = TRUE;
-  if (X11DRV_MAIN_GetResource( db, ".console", &value))
+  if (X11DRV_USER_GetResource( db, ".console", &value))
       driver.driver_list = xstrdup((char *)value.addr);
   else
       driver.driver_list = CONSOLE_DEFAULT_DRIVER;
 }
 
 /***********************************************************************
- *		X11DRV_MAIN_ErrorHandler
+ *		X11DRV_USER_ErrorHandler
  */
-static int X11DRV_MAIN_ErrorHandler(Display *display, XErrorEvent *error_evt)
+static int X11DRV_USER_ErrorHandler(Display *display, XErrorEvent *error_evt)
 {
     kill( getpid(), SIGHUP ); /* force an entry in the debugger */
     return 0;
 }
 
 /***********************************************************************
- *		X11DRV_MAIN_Create
+ *		X11DRV_USER_Create
  */
-void X11DRV_MAIN_Create()
+void X11DRV_USER_Create()
 {
-  if (Options.synchronous) XSetErrorHandler( X11DRV_MAIN_ErrorHandler );
+  if (Options.synchronous) XSetErrorHandler( X11DRV_USER_ErrorHandler );
   
   if (Options.desktopGeometry && Options.managed)
     {
@@ -279,17 +321,17 @@
 }
 
 /***********************************************************************
- *           X11DRV_MAIN_SaveSetup
+ *           X11DRV_USER_SaveSetup
  */
-void X11DRV_MAIN_SaveSetup()
+void X11DRV_USER_SaveSetup()
 {
   TSXGetKeyboardControl(display, &X11DRV_XKeyboardState);
 }
 
 /***********************************************************************
- *           X11DRV_MAIN_RestoreSetup
+ *           X11DRV_USER_RestoreSetup
  */
-void X11DRV_MAIN_RestoreSetup()
+void X11DRV_USER_RestoreSetup()
 {
   XKeyboardControl keyboard_value;
   
diff --git a/windows/x11drv/monitor.c b/windows/x11drv/monitor.c
index 97e3080..debec81 100644
--- a/windows/x11drv/monitor.c
+++ b/windows/x11drv/monitor.c
@@ -184,6 +184,17 @@
 }
 
 /***********************************************************************
+ *              X11DRV_MONITOR_IsSingleWindow
+ */
+BOOL X11DRV_MONITOR_IsSingleWindow(MONITOR *pMonitor)
+{
+  X11DRV_MONITOR_DATA *pX11Monitor =
+    (X11DRV_MONITOR_DATA *) pMonitor->pDriverData;
+
+  return (pX11Monitor->rootWindow != DefaultRootWindow(display));
+}
+
+/***********************************************************************
  *              X11DRV_MONITOR_GetWidth
  *
  * Return the width of the monitor
@@ -222,6 +233,53 @@
   return pX11Monitor->depth;
 }
 
+/***********************************************************************
+ *              X11DRV_MONITOR_GetScreenSaveActive
+ *
+ * Returns the active status of the screen saver
+ */
+BOOL X11DRV_MONITOR_GetScreenSaveActive(MONITOR *pMonitor)
+{
+  int timeout, temp;
+  TSXGetScreenSaver(display, &timeout, &temp, &temp, &temp);
+  return timeout!=NULL;
+}
+
+/***********************************************************************
+ *              X11DRV_MONITOR_SetScreenSaveActive
+ *
+ * Activate/Deactivate the screen saver
+ */
+void X11DRV_MONITOR_SetScreenSaveActive(MONITOR *pMonitor, BOOL bActivate)
+{
+  if(bActivate)
+    TSXActivateScreenSaver(display);
+  else
+    TSXResetScreenSaver(display);
+}
+
+/***********************************************************************
+ *              X11DRV_MONITOR_GetScreenSaveTimeout
+ *
+ * Return the screen saver timeout
+ */
+int X11DRV_MONITOR_GetScreenSaveTimeout(MONITOR *pMonitor)
+{
+  int timeout, temp;
+  TSXGetScreenSaver(display, &timeout, &temp, &temp, &temp);
+  return timeout;
+}
+
+/***********************************************************************
+ *              X11DRV_MONITOR_SetScreenSaveTimeout
+ *
+ * Set the screen saver timeout
+ */
+void X11DRV_MONITOR_SetScreenSaveTimeout(
+  MONITOR *pMonitor, int nTimeout)
+{
+  TSXSetScreenSaver(display, nTimeout, 60, 
+		    DefaultBlanking, DefaultExposures);
+}
+
 #endif /* X_DISPLAY_MISSING */
-
-
diff --git a/windows/x11drv/mouse.c b/windows/x11drv/mouse.c
index 7eb8f7f..19eaac2 100644
--- a/windows/x11drv/mouse.c
+++ b/windows/x11drv/mouse.c
@@ -12,7 +12,7 @@
 
 #include "callback.h"
 #include "debug.h"
-#include "display.h"
+#include "mouse.h"
 #include "win.h"
 #include "windef.h"
 #include "x11drv.h"
@@ -21,7 +21,7 @@
 
 Cursor X11DRV_MOUSE_XCursor = None;    /* Current X cursor */
 
-BOOL X11DRV_MOUSE_DisableWarpPointer = FALSE;  /* hack; see DISPLAY_MoveCursor */
+static BOOL X11DRV_MOUSE_WarpPointer = FALSE;  /* hack; see DISPLAY_MoveCursor */
 
 /***********************************************************************
  *		X11DRV_MOUSE_DoSetCursor
@@ -203,7 +203,7 @@
   int rootX, rootY, winX, winY;
   unsigned int xstate;
   
-  if (X11DRV_MOUSE_DisableWarpPointer) return;
+  if (!X11DRV_MOUSE_WarpPointer) return;
 
   if (!TSXQueryPointer( display, X11DRV_GetXRootWindow(), &root, &child,
 			&rootX, &rootY, &winX, &winY, &xstate ))
@@ -218,4 +218,16 @@
 		  0, 0, 0, 0, wAbsX, wAbsY );
 }
 
+/***********************************************************************
+ *           X11DRV_MOUSE_EnableWarpPointer
+ */
+BOOL X11DRV_MOUSE_EnableWarpPointer(BOOL bEnable)
+{
+  BOOL bOldEnable = X11DRV_MOUSE_WarpPointer;
+
+  X11DRV_MOUSE_WarpPointer = bEnable;
+
+  return bOldEnable;
+}
+
 #endif /* !defined(X_DISPLAY_MISSING) */
diff --git a/windows/x11drv/wnd.c b/windows/x11drv/wnd.c
index cb5f474..a877dec 100644
--- a/windows/x11drv/wnd.c
+++ b/windows/x11drv/wnd.c
@@ -196,7 +196,7 @@
       wndPtr->flags |= WIN_NATIVE;
 
       win_attr.bit_gravity   = BGNorthWest;
-      win_attr.colormap      = X11DRV_COLOR_GetColormap();
+      win_attr.colormap      = X11DRV_PALETTE_PaletteXColormap;
       win_attr.backing_store = Options.backingstore ? WhenMapped : NotUseful;
       win_attr.save_under    = ((classPtr->style & CS_SAVEBITS) != 0);
       win_attr.cursor        = X11DRV_MOUSE_XCursor;
@@ -548,8 +548,8 @@
   
   if (!hwnd)	/* If setting the focus to 0, uninstall the colormap */
     {
-      if (COLOR_GetSystemPaletteFlags() & COLOR_PRIVATE)
-	TSXUninstallColormap( display, X11DRV_COLOR_GetColormap() );
+      if (X11DRV_PALETTE_PaletteFlags & X11DRV_PALETTE_PRIVATE)
+	TSXUninstallColormap( display, X11DRV_PALETTE_PaletteXColormap );
       return;
     }
   
@@ -561,8 +561,8 @@
     return;  /* If window is not viewable, don't change anything */
   
   TSXSetInputFocus( display, win, RevertToParent, CurrentTime );
-  if (COLOR_GetSystemPaletteFlags() & COLOR_PRIVATE)
-    TSXInstallColormap( display, X11DRV_COLOR_GetColormap() );
+  if (X11DRV_PALETTE_PaletteFlags & X11DRV_PALETTE_PRIVATE)
+    TSXInstallColormap( display, X11DRV_PALETTE_PaletteXColormap );
   
   EVENT_Synchronize();
 }
@@ -716,10 +716,7 @@
  */
 BOOL X11DRV_WND_IsSelfClipping(WND *wndPtr)
 {
-  if( X11DRV_WND_GetXWindow(wndPtr) ) 
-      return TRUE; /* X itself will do the clipping */
-
-  return FALSE;
+  return X11DRV_WND_GetXWindow(wndPtr) != None;
 }
 
 #endif /* !defined(X_DISPLAY_MISSING) */