From e27bc88693b2ac023af90f727daa75b1e2278ac1 Mon Sep 17 00:00:00 2001 From: Alexandre Julliard Date: Thu, 6 May 2010 13:50:30 +0200 Subject: [PATCH] gdi32: Add a global function to retrieve the display driver. --- dlls/gdi32/dc.c | 2 +- dlls/gdi32/driver.c | 15 ++++++--------- dlls/gdi32/gdi_private.h | 1 + 3 files changed, 8 insertions(+), 10 deletions(-) diff --git a/dlls/gdi32/dc.c b/dlls/gdi32/dc.c index 27d491aa2c3..5f304a22100 100644 --- a/dlls/gdi32/dc.c +++ b/dlls/gdi32/dc.c @@ -760,7 +760,7 @@ HDC WINAPI CreateCompatibleDC( HDC hdc ) release_dc_ptr( origDC ); } - if (!funcs && !(funcs = DRIVER_load_driver( displayW ))) return 0; + if (!funcs && !(funcs = DRIVER_get_display_driver())) return 0; if (!(dc = alloc_dc_ptr( funcs, OBJ_MEMDC ))) goto error; diff --git a/dlls/gdi32/driver.c b/dlls/gdi32/driver.c index f23cdc1c2ab..e6713ea2085 100644 --- a/dlls/gdi32/driver.c +++ b/dlls/gdi32/driver.c @@ -214,18 +214,18 @@ static struct graphics_driver *create_driver( HMODULE module ) /********************************************************************** - * load_display_driver + * DRIVER_get_display_driver * * Special case for loading the display driver: get the name from the config file */ -static struct graphics_driver *load_display_driver(void) +const DC_FUNCTIONS *DRIVER_get_display_driver(void) { struct graphics_driver *driver; char buffer[MAX_PATH], libname[32], *name, *next; HMODULE module = 0; HKEY hkey; - if (display_driver) return display_driver; /* already loaded */ + if (display_driver) return &display_driver->funcs; /* already loaded */ strcpy( buffer, "x11" ); /* default value */ /* @@ Wine registry key: HKCU\Software\Wine\Drivers */ @@ -259,7 +259,7 @@ static struct graphics_driver *load_display_driver(void) FreeLibrary( driver->module ); HeapFree( GetProcessHeap(), 0, driver ); } - return display_driver; + return &display_driver->funcs; } @@ -274,11 +274,8 @@ const DC_FUNCTIONS *DRIVER_load_driver( LPCWSTR name ) static const WCHAR display1W[] = {'\\','\\','.','\\','D','I','S','P','L','A','Y','1',0}; /* display driver is a special case */ - if (!strcmpiW( name, displayW ) || !strcmpiW( name, display1W )) - { - driver = load_display_driver(); - return &driver->funcs; - } + if (!strcmpiW( name, displayW ) || !strcmpiW( name, display1W )) return DRIVER_get_display_driver(); + if ((module = GetModuleHandleW( name ))) { if (display_driver && display_driver->module == module) return &display_driver->funcs; diff --git a/dlls/gdi32/gdi_private.h b/dlls/gdi32/gdi_private.h index a3ec9548f2e..766668b7a6b 100644 --- a/dlls/gdi32/gdi_private.h +++ b/dlls/gdi32/gdi_private.h @@ -385,6 +385,7 @@ extern int DIB_GetBitmapInfo( const BITMAPINFOHEADER *header, LONG *width, LONG *height, WORD *planes, WORD *bpp, DWORD *compr, DWORD *size ) DECLSPEC_HIDDEN; /* driver.c */ +extern const DC_FUNCTIONS *DRIVER_get_display_driver(void) DECLSPEC_HIDDEN; extern const DC_FUNCTIONS *DRIVER_load_driver( LPCWSTR name ) DECLSPEC_HIDDEN; extern BOOL DRIVER_GetDriverName( LPCWSTR device, LPWSTR driver, DWORD size ) DECLSPEC_HIDDEN;