Added a bunch of stubs for ddraw suface routines. All stubs for
surface present now.
Commented out message pump calls. I don't see a reason for them being
there. Everything works fine with -desktop and -managed still has
problems. Disagreements?

diff --git a/graphics/ddraw.c b/graphics/ddraw.c
index 3677f4b..c8eea6d 100644
--- a/graphics/ddraw.c
+++ b/graphics/ddraw.c
@@ -351,7 +351,7 @@
 static HRESULT WINAPI Xlib_IDirectDrawSurface3_Unlock(
 	LPDIRECTDRAWSURFACE3 this,LPVOID surface
 ) {
-	Xlib_MessagePump(this->s.ddraw->e.xlib.window);
+	/* Xlib_MessagePump(this->s.ddraw->e.xlib.window); */
 
 	TRACE(ddraw,"(%p)->Unlock(%p)\n",this,surface);
 
@@ -414,7 +414,7 @@
 	LPDIRECTDRAWSURFACE3 this,LPDIRECTDRAWSURFACE3 flipto,DWORD dwFlags
 ) {
 	TRACE(ddraw,"(%p)->Flip(%p,%08lx)\n",this,flipto,dwFlags);
-	Xlib_MessagePump(this->s.ddraw->e.xlib.window);
+	/* Xlib_MessagePump(this->s.ddraw->e.xlib.window); */
 	if (!this->s.ddraw->e.xlib.paintable)
 		return 0;
 
@@ -826,28 +826,176 @@
 	return DD_OK;
 }
 
+static HRESULT WINAPI IDirectDrawSurface3_AddOverlayDirtyRect(
+        LPDIRECTDRAWSURFACE3 this, 
+        LPRECT32 lpRect )
+{
+  FIXME(ddraw,"(%p)->(%p),stub!\n",this,lpRect); 
+
+  return DD_OK;
+}
+
+static HRESULT WINAPI IDirectDrawSurface3_DeleteAttachedSurface(
+        LPDIRECTDRAWSURFACE3 this, 
+        DWORD dwFlags,
+        LPDIRECTDRAWSURFACE3 lpDDSAttachedSurface )
+{
+  FIXME(ddraw,"(%p)->(0x%08lx,%p),stub!\n",this,dwFlags,lpDDSAttachedSurface);
+
+  return DD_OK;
+}
+
+static HRESULT WINAPI IDirectDrawSurface3_EnumOverlayZOrders(
+        LPDIRECTDRAWSURFACE3 this,
+        DWORD dwFlags,
+        LPVOID lpContext,
+        LPDDENUMSURFACESCALLBACK lpfnCallback )
+{
+  FIXME(ddraw,"(%p)->(0x%08lx,%p,%p),stub!\n", this,dwFlags,
+          lpContext, lpfnCallback );
+
+  return DD_OK;
+}
+
+static HRESULT WINAPI IDirectDrawSurface3_GetClipper(
+        LPDIRECTDRAWSURFACE3 this,
+        LPDIRECTDRAWCLIPPER* lplpDDClipper )
+{
+  FIXME(ddraw,"(%p)->(%p),stub!\n", this, lplpDDClipper);
+
+  return DD_OK;
+}
+
+static HRESULT WINAPI IDirectDrawSurface3_GetColorKey(
+        LPDIRECTDRAWSURFACE3 this,
+        DWORD dwFlags,
+        LPDDCOLORKEY lpDDColorKey )
+{
+  FIXME(ddraw,"(%p)->(0x%08lx,%p),stub!\n", this, dwFlags, lpDDColorKey);
+
+  return DD_OK;
+}
+
+static HRESULT WINAPI IDirectDrawSurface3_GetFlipStatus(
+        LPDIRECTDRAWSURFACE3 this,
+        DWORD dwFlags ) 
+{
+  FIXME(ddraw,"(%p)->(0x%08lx),stub!\n", this, dwFlags);
+
+  return DD_OK;
+}
+
+static HRESULT WINAPI IDirectDrawSurface3_GetPalette(
+        LPDIRECTDRAWSURFACE3 this,
+        LPDIRECTDRAWPALETTE* lplpDDPalette )
+{
+  FIXME(ddraw,"(%p)->(%p),stub!\n", this, lplpDDPalette);
+
+  return DD_OK;
+}
+
+static HRESULT WINAPI IDirectDrawSurface3_SetOverlayPosition(
+        LPDIRECTDRAWSURFACE3 this,
+        LONG lX,
+        LONG lY)
+{
+  FIXME(ddraw,"(%p)->(%ld,%ld),stub!\n", this, lX, lY);
+
+  return DD_OK;
+}
+
+static HRESULT WINAPI IDirectDrawSurface3_UpdateOverlay(
+        LPDIRECTDRAWSURFACE3 this,
+        LPRECT32 lpSrcRect,
+        LPDIRECTDRAWSURFACE3 lpDDDestSurface,
+        LPRECT32 lpDestRect,
+        DWORD dwFlags,
+        LPDDOVERLAYFX lpDDOverlayFx )
+{
+  FIXME(ddraw,"(%p)->(%p,%p,%p,0x%08lx,%p),stub!\n", this,
+         lpSrcRect, lpDDDestSurface, lpDestRect, dwFlags, lpDDOverlayFx );  
+
+  return DD_OK;
+}
+ 
+static HRESULT WINAPI IDirectDrawSurface3_UpdateOverlayDisplay(
+        LPDIRECTDRAWSURFACE3 this,
+        DWORD dwFlags )
+{
+  FIXME(ddraw,"(%p)->(0x%08lx),stub!\n", this, dwFlags); 
+
+  return DD_OK;
+}
+
+static HRESULT WINAPI IDirectDrawSurface3_UpdateOverlayZOrder(
+        LPDIRECTDRAWSURFACE3 this,
+        DWORD dwFlags,
+        LPDIRECTDRAWSURFACE3 lpDDSReference )
+{
+  FIXME(ddraw,"(%p)->(0x%08lx,%p),stub!\n", this, dwFlags, lpDDSReference);
+
+  return DD_OK;
+}
+
+static HRESULT WINAPI IDirectDrawSurface3_GetDDInterface(
+        LPDIRECTDRAWSURFACE3 this,
+        LPVOID* lplpDD )
+{
+  FIXME(ddraw,"(%p)->(%p),stub!\n", this, lplpDD);
+
+  return DD_OK;
+}
+
+static HRESULT WINAPI IDirectDrawSurface3_PageLock(
+        LPDIRECTDRAWSURFACE3 this,
+        DWORD dwFlags )
+{
+  FIXME(ddraw,"(%p)->(0x%08lx),stub!\n", this, dwFlags);
+
+  return DD_OK;
+}
+
+static HRESULT WINAPI IDirectDrawSurface3_PageUnlock(
+        LPDIRECTDRAWSURFACE3 this,
+        DWORD dwFlags )
+{
+  FIXME(ddraw,"(%p)->(0x%08lx),stub!\n", this, dwFlags);
+
+  return DD_OK;
+}
+
+static HRESULT WINAPI IDirectDrawSurface3_SetSurfaceDesc(
+        LPDIRECTDRAWSURFACE3 this,
+        LPDDSURFACEDESC lpDDSD,
+        DWORD dwFlags )
+{
+  FIXME(ddraw,"(%p)->(%p,0x%08lx),stub!\n", this, lpDDSD, dwFlags);
+
+  return DD_OK;
+}
+
 static struct IDirectDrawSurface3_VTable dga_dds3vt = {
 	IDirectDrawSurface3_QueryInterface,
 	IDirectDrawSurface3_AddRef,
 	DGA_IDirectDrawSurface3_Release,
 	IDirectDrawSurface3_AddAttachedSurface,
-	(void*)5,
+	IDirectDrawSurface3_AddOverlayDirtyRect,
 	IDirectDrawSurface3_Blt,
 	IDirectDrawSurface3_BltBatch,
 	IDirectDrawSurface3_BltFast,
-	(void*)9,
+	IDirectDrawSurface3_DeleteAttachedSurface,
 	IDirectDrawSurface3_EnumAttachedSurfaces,
-	(void*)11,
+	IDirectDrawSurface3_EnumOverlayZOrders,
 	DGA_IDirectDrawSurface3_Flip,
 	IDirectDrawSurface3_GetAttachedSurface,
 	IDirectDrawSurface3_GetBltStatus,
 	IDirectDrawSurface3_GetCaps,
-	(void*)16,
-	(void*)17,
+	IDirectDrawSurface3_GetClipper,
+	IDirectDrawSurface3_GetColorKey,
 	IDirectDrawSurface3_GetDC,
-	(void*)19,
+	IDirectDrawSurface3_GetFlipStatus,
 	IDirectDrawSurface3_GetOverlayPosition,
-	(void*)21,
+	IDirectDrawSurface3_GetPalette,
 	IDirectDrawSurface3_GetPixelFormat,
 	IDirectDrawSurface3_GetSurfaceDesc,
 	IDirectDrawSurface3_Initialize,
@@ -857,16 +1005,16 @@
 	IDirectDrawSurface3_Restore,
 	IDirectDrawSurface3_SetClipper,
 	IDirectDrawSurface3_SetColorKey,
-	(void*)31,
+	IDirectDrawSurface3_SetOverlayPosition,
 	DGA_IDirectDrawSurface3_SetPalette,
 	DGA_IDirectDrawSurface3_Unlock,
-	(void*)34,
-	(void*)35,
-	(void*)36,
-	(void*)37,
-	(void*)38,
-	(void*)39,
-	(void*)40,
+	IDirectDrawSurface3_UpdateOverlay,
+	IDirectDrawSurface3_UpdateOverlayDisplay,
+	IDirectDrawSurface3_UpdateOverlayZOrder,
+	IDirectDrawSurface3_GetDDInterface,
+	IDirectDrawSurface3_PageLock,
+	IDirectDrawSurface3_PageUnlock,
+	IDirectDrawSurface3_SetSurfaceDesc,
 };
 
 static struct IDirectDrawSurface3_VTable xlib_dds3vt = {
@@ -874,23 +1022,23 @@
 	IDirectDrawSurface3_AddRef,
 	Xlib_IDirectDrawSurface3_Release,
 	IDirectDrawSurface3_AddAttachedSurface,
-	(void*)5,
+	IDirectDrawSurface3_AddOverlayDirtyRect,
 	IDirectDrawSurface3_Blt,
 	IDirectDrawSurface3_BltBatch,
 	IDirectDrawSurface3_BltFast,
-	(void*)9,
+	IDirectDrawSurface3_DeleteAttachedSurface,
 	IDirectDrawSurface3_EnumAttachedSurfaces,
-	(void*)11,
+	IDirectDrawSurface3_EnumOverlayZOrders,
 	Xlib_IDirectDrawSurface3_Flip,
 	IDirectDrawSurface3_GetAttachedSurface,
 	IDirectDrawSurface3_GetBltStatus,
 	IDirectDrawSurface3_GetCaps,
-	(void*)16,
-	(void*)17,
+	IDirectDrawSurface3_GetClipper,
+	IDirectDrawSurface3_GetColorKey,
 	IDirectDrawSurface3_GetDC,
-	(void*)19,
+	IDirectDrawSurface3_GetFlipStatus,
 	IDirectDrawSurface3_GetOverlayPosition,
-	(void*)21,
+	IDirectDrawSurface3_GetPalette,
 	IDirectDrawSurface3_GetPixelFormat,
 	IDirectDrawSurface3_GetSurfaceDesc,
 	IDirectDrawSurface3_Initialize,
@@ -900,16 +1048,16 @@
 	IDirectDrawSurface3_Restore,
 	IDirectDrawSurface3_SetClipper,
 	IDirectDrawSurface3_SetColorKey,
-	(void*)31,
+	IDirectDrawSurface3_SetOverlayPosition,
 	Xlib_IDirectDrawSurface3_SetPalette,
 	Xlib_IDirectDrawSurface3_Unlock,
-	(void*)34,
-	(void*)35,
-	(void*)36,
-	(void*)37,
-	(void*)38,
-	(void*)39,
-	(void*)40,
+	IDirectDrawSurface3_UpdateOverlay,
+	IDirectDrawSurface3_UpdateOverlayDisplay,
+	IDirectDrawSurface3_UpdateOverlayZOrder,
+	IDirectDrawSurface3_GetDDInterface,
+	IDirectDrawSurface3_PageLock,
+	IDirectDrawSurface3_PageUnlock,
+	IDirectDrawSurface3_SetSurfaceDesc,
 };
 
 /******************************************************************************