Alexandre Julliard : gdi32: Allow user32 to specify the display driver to use.

Alexandre Julliard julliard at winehq.org
Tue Oct 29 15:12:25 CDT 2013


Module: wine
Branch: master
Commit: 9675aa173a779eba5e97ee4bbbde6a6cfeced179
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=9675aa173a779eba5e97ee4bbbde6a6cfeced179

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Tue Oct 29 12:39:46 2013 +0100

gdi32: Allow user32 to specify the display driver to use.

---

 dlls/gdi32/driver.c       |   17 +++++++++++++++++
 dlls/gdi32/gdi32.spec     |    1 +
 dlls/user32/driver.c      |    1 +
 include/wine/gdi_driver.h |    1 +
 4 files changed, 20 insertions(+), 0 deletions(-)

diff --git a/dlls/gdi32/driver.c b/dlls/gdi32/driver.c
index f625f32..73d11da 100644
--- a/dlls/gdi32/driver.c
+++ b/dlls/gdi32/driver.c
@@ -223,6 +223,23 @@ HMODULE CDECL __wine_get_driver_module( HDC hdc )
 }
 
 
+/***********************************************************************
+ *           __wine_set_display_driver_module    (GDI32.@)
+ */
+void CDECL __wine_set_display_driver( HMODULE module )
+{
+    struct graphics_driver *driver;
+
+    if (!(driver = create_driver( module )))
+    {
+        ERR( "Could not create graphics driver\n" );
+        ExitProcess(1);
+    }
+    if (InterlockedCompareExchangePointer( (void **)&display_driver, driver, NULL ))
+        HeapFree( GetProcessHeap(), 0, driver );
+}
+
+
 static INT nulldrv_AbortDoc( PHYSDEV dev )
 {
     return 0;
diff --git a/dlls/gdi32/gdi32.spec b/dlls/gdi32/gdi32.spec
index 65f1d0c..be6410d 100644
--- a/dlls/gdi32/gdi32.spec
+++ b/dlls/gdi32/gdi32.spec
@@ -515,6 +515,7 @@
 
 # Graphics drivers
 @ cdecl __wine_get_driver_module(long)
+@ cdecl __wine_set_display_driver(long)
 
 # OpenGL
 @ cdecl __wine_get_wgl_driver(long long)
diff --git a/dlls/user32/driver.c b/dlls/user32/driver.c
index fdcf853..37de424 100644
--- a/dlls/user32/driver.c
+++ b/dlls/user32/driver.c
@@ -158,6 +158,7 @@ static const USER_DRIVER *load_driver(void)
     }
     else LdrAddRefDll( 0, graphics_driver );
 
+    __wine_set_display_driver( graphics_driver );
     register_builtin_classes();
 
     return driver;
diff --git a/include/wine/gdi_driver.h b/include/wine/gdi_driver.h
index 83f4885..ad9c7c4 100644
--- a/include/wine/gdi_driver.h
+++ b/include/wine/gdi_driver.h
@@ -277,6 +277,7 @@ extern void CDECL __wine_make_gdi_object_system( HGDIOBJ handle, BOOL set );
 extern void CDECL __wine_set_visible_region( HDC hdc, HRGN hrgn, const RECT *vis_rect,
                                              const RECT *device_rect, struct window_surface *surface );
 extern HMODULE CDECL __wine_get_driver_module( HDC hdc );
+extern void CDECL __wine_set_display_driver( HMODULE module );
 extern struct opengl_funcs * CDECL __wine_get_wgl_driver( HDC hdc, UINT version );
 
 #endif /* __WINE_WINE_GDI_DRIVER_H */




More information about the wine-cvs mailing list