diff --git a/dlls/d3d9/tests/Makefile.in b/dlls/d3d9/tests/Makefile.in index 37befbe..9f8308d 100644 --- a/dlls/d3d9/tests/Makefile.in +++ b/dlls/d3d9/tests/Makefile.in @@ -3,7 +3,7 @@ TOPOBJDIR = ../../.. SRCDIR = @srcdir@ VPATH = @srcdir@ TESTDLL = d3d9.dll -IMPORTS = user32 kernel32 +IMPORTS = user32 kernel32 gdi32 EXTRALIBS = -ldxerr9 -luuid -ldxguid CTESTS = \ diff --git a/dlls/d3d9/tests/visual.c b/dlls/d3d9/tests/visual.c index fdafb88..35e6dd1 100644 --- a/dlls/d3d9/tests/visual.c +++ b/dlls/d3d9/tests/visual.c @@ -125,6 +125,7 @@ static IDirect3DDevice9 *init_d3d9(void) hr = IDirect3D9_CreateDevice(d3d9_ptr, D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, present_parameters.hDeviceWindow, D3DCREATE_SOFTWARE_VERTEXPROCESSING, &present_parameters, &device_ptr); } ok(hr == D3D_OK || hr == D3DERR_NOTAVAILABLE, "IDirect3D_CreateDevice returned: %s\n", DXGetErrorString9(hr)); + GdiFlush(); return device_ptr; } diff --git a/dlls/ddraw/tests/visual.c b/dlls/ddraw/tests/visual.c index 3d8fecb..2a3a2c8 100644 --- a/dlls/ddraw/tests/visual.c +++ b/dlls/ddraw/tests/visual.c @@ -74,6 +74,7 @@ static BOOL createObjects(void) trace("SetDisplayMode failed\n"); goto err; } + GdiFlush(); hr = IDirectDraw7_QueryInterface(DirectDraw, &IID_IDirect3D7, (void**) &Direct3D); if (hr == E_NOINTERFACE) goto err; @@ -844,6 +845,7 @@ static BOOL D3D1_createObjects(void) if (FAILED(hr)) { return FALSE; } + GdiFlush(); hr = IDirectDraw_QueryInterface(DirectDraw1, &IID_IDirect3D, (void**) &Direct3D1); ok(hr==DD_OK, "QueryInterface returned: %x\n", hr); diff --git a/dlls/winex11.drv/graphics.c b/dlls/winex11.drv/graphics.c index e580fd6..c485059 100644 --- a/dlls/winex11.drv/graphics.c +++ b/dlls/winex11.drv/graphics.c @@ -43,6 +43,8 @@ WINE_DEFAULT_DEBUG_CHANNEL(graphics); #define ABS(x) ((x)<0?(-(x)):(x)) +DWORD LastChangedResolutionTicks = 0; + /* ROP code to GC function conversion */ const int X11DRV_XROPfunction[16] = { @@ -1374,3 +1376,17 @@ DWORD X11DRV_SetDCOrg( X11DRV_PDEVICE *physDev, INT x, INT y ) physDev->dc_rect.top = y - physDev->drawable_rect.top; return ret; } + +/*********************************************************************** + * GdiFlush (X11DRV.@) + */ +BOOL X11DRV_GdiFlush(void) +{ + DWORD Ticks; + TRACE("\n"); + XSync(gdi_display, False); + Ticks = GetTickCount(); + if (Ticks - LastChangedResolutionTicks < 500) + Sleep(500 - (Ticks - LastChangedResolutionTicks)); + return TRUE; +} diff --git a/dlls/winex11.drv/winex11.drv.spec b/dlls/winex11.drv/winex11.drv.spec index 74ddb66..7280c02 100644 --- a/dlls/winex11.drv/winex11.drv.spec +++ b/dlls/winex11.drv/winex11.drv.spec @@ -16,6 +16,7 @@ @ cdecl ExtEscape(ptr long long ptr long ptr) X11DRV_ExtEscape @ cdecl ExtFloodFill(ptr long long long long) X11DRV_ExtFloodFill @ cdecl ExtTextOut(ptr long long long ptr ptr long ptr) X11DRV_ExtTextOut +@ cdecl GdiFlush() X11DRV_GdiFlush @ cdecl GetBitmapBits(long ptr long) X11DRV_GetBitmapBits @ cdecl GetCharWidth(ptr long long ptr) X11DRV_GetCharWidth @ cdecl GetDCOrgEx(ptr ptr) X11DRV_GetDCOrgEx diff --git a/dlls/winex11.drv/x11drv.h b/dlls/winex11.drv/x11drv.h index 8f80452..6badff5 100644 --- a/dlls/winex11.drv/x11drv.h +++ b/dlls/winex11.drv/x11drv.h @@ -436,6 +436,7 @@ extern INT X11DRV_DCICommand(INT cbInput, const struct _DCICMD *lpCmd, LPVOID lp extern void X11DRV_GDI_Finalize(void); extern Display *gdi_display; /* display to use for all GDI functions */ +extern DWORD LastChangedResolutionTicks; /* Ticks of last time resolution was changed */ /* X11 GDI palette driver */ diff --git a/dlls/winex11.drv/xrandr.c b/dlls/winex11.drv/xrandr.c index fd930a2..c99b6c6 100644 --- a/dlls/winex11.drv/xrandr.c +++ b/dlls/winex11.drv/xrandr.c @@ -230,6 +230,7 @@ static LONG X11DRV_XRandR_SetCurrentMode(int mode) if (stat == RRSetConfigSuccess) { X11DRV_resize_desktop( dd_modes[mode].dwWidth, dd_modes[mode].dwHeight ); + LastChangedResolutionTicks = GetTickCount(); return DISP_CHANGE_SUCCESSFUL; }