Alexandre Julliard : explorer: Retrieve the graphics driver module from gdi32.

Alexandre Julliard julliard at winehq.org
Wed Feb 6 13:38:12 CST 2013


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

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Wed Feb  6 12:46:14 2013 +0100

explorer: Retrieve the graphics driver module from gdi32.

---

 programs/explorer/desktop.c          |   24 ++++++++++++++++--------
 programs/explorer/explorer_private.h |    2 +-
 programs/explorer/systray.c          |    8 +++-----
 3 files changed, 20 insertions(+), 14 deletions(-)

diff --git a/programs/explorer/desktop.c b/programs/explorer/desktop.c
index 12888d8..a4f21bf 100644
--- a/programs/explorer/desktop.c
+++ b/programs/explorer/desktop.c
@@ -21,13 +21,14 @@
 #include "config.h"
 #include "wine/port.h"
 #include <stdio.h>
-#include "wine/unicode.h"
 
 #define OEMRESOURCE
-
 #include <windows.h>
 #include <rpc.h>
-#include <wine/debug.h>
+
+#include "wine/gdi_driver.h"
+#include "wine/unicode.h"
+#include "wine/debug.h"
 #include "explorer_private.h"
 
 WINE_DEFAULT_DEBUG_CHANNEL(explorer);
@@ -35,6 +36,7 @@ WINE_DEFAULT_DEBUG_CHANNEL(explorer);
 #define DESKTOP_CLASS_ATOM ((LPCWSTR)MAKEINTATOM(32769))
 #define DESKTOP_ALL_ACCESS 0x01ff
 
+static HMODULE graphics_driver;
 static BOOL using_root;
 
 /* screen saver handler */
@@ -108,7 +110,6 @@ static LRESULT WINAPI desktop_wnd_proc( HWND hwnd, UINT message, WPARAM wp, LPAR
 static unsigned long create_desktop( const WCHAR *name, unsigned int width, unsigned int height )
 {
     static const WCHAR rootW[] = {'r','o','o','t',0};
-    HMODULE x11drv = GetModuleHandleA( "winex11.drv" );
     HDESK desktop;
     unsigned long xwin = 0;
     unsigned long (CDECL *create_desktop_func)(unsigned int, unsigned int);
@@ -119,10 +120,10 @@ static unsigned long create_desktop( const WCHAR *name, unsigned int width, unsi
         WINE_ERR( "failed to create desktop %s error %d\n", wine_dbgstr_w(name), GetLastError() );
         ExitProcess( 1 );
     }
-    /* magic: desktop "root" means use the X11 root window */
-    if (x11drv && strcmpiW( name, rootW ))
+    /* magic: desktop "root" means use the root window */
+    if (graphics_driver && strcmpiW( name, rootW ))
     {
-        create_desktop_func = (void *)GetProcAddress( x11drv, "wine_create_desktop" );
+        create_desktop_func = (void *)GetProcAddress( graphics_driver, "wine_create_desktop" );
         if (create_desktop_func) xwin = create_desktop_func( width, height );
     }
     SetThreadDesktop( desktop );
@@ -260,8 +261,10 @@ static void set_desktop_window_title( HWND hwnd, const WCHAR *name )
 /* main desktop management function */
 void manage_desktop( WCHAR *arg )
 {
+    static const WCHAR displayW[] = {'D','I','S','P','L','A','Y',0};
     static const WCHAR messageW[] = {'M','e','s','s','a','g','e',0};
     MSG msg;
+    HDC hdc;
     HWND hwnd, msg_hwnd;
     unsigned long xwin = 0;
     unsigned int width, height;
@@ -293,6 +296,9 @@ void manage_desktop( WCHAR *arg )
         if (!get_default_desktop_size( name, &width, &height )) width = height = 0;
     }
 
+    hdc = CreateDCW( displayW, NULL, NULL, NULL );
+    graphics_driver = __wine_get_driver_module( hdc );
+
     if (name && width && height) xwin = create_desktop( name, width, height );
 
     if (!xwin) using_root = TRUE; /* using the root window */
@@ -308,6 +314,8 @@ void manage_desktop( WCHAR *arg )
     msg_hwnd = CreateWindowExW( 0, messageW, NULL, WS_POPUP | WS_CLIPSIBLINGS | WS_CLIPCHILDREN,
                                 0, 0, 100, 100, 0, 0, 0, NULL );
 
+    DeleteDC( hdc );
+
     if (hwnd == GetDesktopWindow())
     {
         HMODULE shell32;
@@ -320,7 +328,7 @@ void manage_desktop( WCHAR *arg )
         ClipCursor( NULL );
         initialize_display_settings( hwnd );
         initialize_appbar();
-        initialize_systray( using_root );
+        initialize_systray( graphics_driver, using_root );
 
         if ((shell32 = LoadLibraryA( "shell32.dll" )) &&
             (pShellDDEInit = (void *)GetProcAddress( shell32, (LPCSTR)188)))
diff --git a/programs/explorer/explorer_private.h b/programs/explorer/explorer_private.h
index 44e0e39..74ca7f0 100644
--- a/programs/explorer/explorer_private.h
+++ b/programs/explorer/explorer_private.h
@@ -22,7 +22,7 @@
 #define __WINE_EXPLORER_PRIVATE_H
 
 extern void manage_desktop( WCHAR *arg );
-extern void initialize_systray( BOOL using_root );
+extern void initialize_systray( HMODULE graphics_driver, BOOL using_root );
 extern void initialize_appbar(void);
 
 #endif  /* __WINE_EXPLORER_PRIVATE_H */
diff --git a/programs/explorer/systray.c b/programs/explorer/systray.c
index 716335c..c15fbf0 100644
--- a/programs/explorer/systray.c
+++ b/programs/explorer/systray.c
@@ -629,14 +629,12 @@ static LRESULT WINAPI tray_wndproc( HWND hwnd, UINT msg, WPARAM wparam, LPARAM l
 }
 
 /* this function creates the listener window */
-void initialize_systray( BOOL using_root )
+void initialize_systray( HMODULE graphics_driver, BOOL using_root )
 {
-    HMODULE x11drv;
     WNDCLASSEXW class;
     static const WCHAR classname[] = {'S','h','e','l','l','_','T','r','a','y','W','n','d',0};
 
-    if ((x11drv = GetModuleHandleA( "winex11.drv" )))
-        wine_notify_icon = (void *)GetProcAddress( x11drv, "wine_notify_icon" );
+    wine_notify_icon = (void *)GetProcAddress( graphics_driver, "wine_notify_icon" );
 
     icon_cx = GetSystemMetrics( SM_CXSMICON ) + 2*ICON_BORDER;
     icon_cy = GetSystemMetrics( SM_CYSMICON ) + 2*ICON_BORDER;
@@ -651,7 +649,7 @@ void initialize_systray( BOOL using_root )
     class.hIcon         = LoadIconW(0, (LPCWSTR)IDI_WINLOGO);
     class.hCursor       = LoadCursorW(0, (LPCWSTR)IDC_ARROW);
     class.hbrBackground = (HBRUSH) COLOR_WINDOW;
-    class.lpszClassName = (WCHAR *) &classname;
+    class.lpszClassName = classname;
 
     if (!RegisterClassExW(&class))
     {




More information about the wine-cvs mailing list