Alexandre Julliard : user32: Register classes once the graphics driver has been loaded, except for the desktop class.

Alexandre Julliard julliard at winehq.org
Thu Oct 24 13:18:56 CDT 2013


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

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Thu Oct 24 17:40:37 2013 +0200

user32: Register classes once the graphics driver has been loaded, except for the desktop class.

---

 dlls/user32/class.c     |   18 +++++++++++++-----
 dlls/user32/controls.h  |    3 ++-
 dlls/user32/desktop.c   |    2 +-
 dlls/user32/driver.c    |    3 +++
 dlls/user32/message.c   |    2 +-
 dlls/user32/user_main.c |    2 ++
 dlls/user32/win.c       |    2 --
 7 files changed, 22 insertions(+), 10 deletions(-)

diff --git a/dlls/user32/class.c b/dlls/user32/class.c
index 333cb76..e03272f 100644
--- a/dlls/user32/class.c
+++ b/dlls/user32/class.c
@@ -369,7 +369,7 @@ static void register_builtin( const struct builtin_class_descr *descr )
     if (!(classPtr = CLASS_RegisterClass( descr->name, user32_module, FALSE,
                                           descr->style, 0, descr->extra ))) return;
 
-    classPtr->hCursor       = LoadCursorA( 0, (LPSTR)descr->cursor );
+    if (descr->cursor) classPtr->hCursor = LoadCursorA( 0, (LPSTR)descr->cursor );
     classPtr->hbrBackground = descr->brush;
     classPtr->winproc       = BUILTIN_WINPROC( descr->proc );
     release_class_ptr( classPtr );
@@ -381,7 +381,6 @@ static void register_builtin( const struct builtin_class_descr *descr )
  */
 static BOOL WINAPI register_builtins( INIT_ONCE *once, void *param, void **context )
 {
-    register_builtin( &DESKTOP_builtin_class );
     register_builtin( &BUTTON_builtin_class );
     register_builtin( &COMBO_builtin_class );
     register_builtin( &COMBOLBOX_builtin_class );
@@ -391,7 +390,6 @@ static BOOL WINAPI register_builtins( INIT_ONCE *once, void *param, void **conte
     register_builtin( &LISTBOX_builtin_class );
     register_builtin( &MDICLIENT_builtin_class );
     register_builtin( &MENU_builtin_class );
-    register_builtin( &MESSAGE_builtin_class );
     register_builtin( &SCROLL_builtin_class );
     register_builtin( &STATIC_builtin_class );
     return TRUE;
@@ -399,15 +397,25 @@ static BOOL WINAPI register_builtins( INIT_ONCE *once, void *param, void **conte
 
 
 /***********************************************************************
- *           CLASS_RegisterBuiltinClasses
+ *           register_builtin_classes
  */
-void CLASS_RegisterBuiltinClasses(void)
+void register_builtin_classes(void)
 {
     InitOnceExecuteOnce( &init_once, register_builtins, NULL, NULL );
 }
 
 
 /***********************************************************************
+ *           register_desktop_class
+ */
+void register_desktop_class(void)
+{
+    register_builtin( &DESKTOP_builtin_class );
+    register_builtin( &MESSAGE_builtin_class );
+}
+
+
+/***********************************************************************
  *           get_class_winproc
  */
 WNDPROC get_class_winproc( CLASS *class )
diff --git a/dlls/user32/controls.h b/dlls/user32/controls.h
index 32e9815..3ce804f 100644
--- a/dlls/user32/controls.h
+++ b/dlls/user32/controls.h
@@ -139,7 +139,8 @@ extern ULONG_PTR set_icon_param( HICON handle, ULONG_PTR param ) DECLSPEC_HIDDEN
 struct tagCLASS;  /* opaque structure */
 struct tagWND;
 extern ATOM get_int_atom_value( LPCWSTR name ) DECLSPEC_HIDDEN;
-extern void CLASS_RegisterBuiltinClasses(void) DECLSPEC_HIDDEN;
+extern void register_builtin_classes(void) DECLSPEC_HIDDEN;
+extern void register_desktop_class(void) DECLSPEC_HIDDEN;
 extern WNDPROC get_class_winproc( struct tagCLASS *class ) DECLSPEC_HIDDEN;
 extern struct dce *get_class_dce( struct tagCLASS *class ) DECLSPEC_HIDDEN;
 extern struct dce *set_class_dce( struct tagCLASS *class, struct dce *dce ) DECLSPEC_HIDDEN;
diff --git a/dlls/user32/desktop.c b/dlls/user32/desktop.c
index 2204b77..563a214 100644
--- a/dlls/user32/desktop.c
+++ b/dlls/user32/desktop.c
@@ -48,7 +48,7 @@ const struct builtin_class_descr DESKTOP_builtin_class =
     CS_DBLCLKS,           /* style */
     WINPROC_DESKTOP,      /* proc */
     0,                    /* extra */
-    IDC_ARROW,            /* cursor */
+    0,                    /* cursor */
     (HBRUSH)(COLOR_BACKGROUND+1)    /* brush */
 };
 
diff --git a/dlls/user32/driver.c b/dlls/user32/driver.c
index 18778cd..192eebe 100644
--- a/dlls/user32/driver.c
+++ b/dlls/user32/driver.c
@@ -28,6 +28,7 @@
 #include "wine/gdi_driver.h"
 
 #include "user_private.h"
+#include "controls.h"
 
 static USER_DRIVER null_driver, lazy_load_driver;
 
@@ -119,6 +120,8 @@ static const USER_DRIVER *load_driver(void)
     }
     else LdrAddRefDll( 0, graphics_driver );
 
+    register_builtin_classes();
+
     DeleteDC( hdc );
     return driver;
 }
diff --git a/dlls/user32/message.c b/dlls/user32/message.c
index d09e5dd..4fc87ad 100644
--- a/dlls/user32/message.c
+++ b/dlls/user32/message.c
@@ -290,7 +290,7 @@ const struct builtin_class_descr MESSAGE_builtin_class =
     0,                    /* style */
     WINPROC_MESSAGE,      /* proc */
     0,                    /* extra */
-    IDC_ARROW,            /* cursor */
+    0,                    /* cursor */
     0                     /* brush */
 };
 
diff --git a/dlls/user32/user_main.c b/dlls/user32/user_main.c
index e74ac19..d08a93c 100644
--- a/dlls/user32/user_main.c
+++ b/dlls/user32/user_main.c
@@ -262,6 +262,8 @@ static void winstation_init(void)
         if (handle) SetThreadDesktop( handle );
     }
     HeapFree( GetProcessHeap(), 0, buffer );
+
+    register_desktop_class();
 }
 
 
diff --git a/dlls/user32/win.c b/dlls/user32/win.c
index d506fee..30a7c6f 100644
--- a/dlls/user32/win.c
+++ b/dlls/user32/win.c
@@ -1391,8 +1391,6 @@ HWND WIN_CreateWindowEx( CREATESTRUCTW *cs, LPCWSTR className, HINSTANCE module,
         }
     }
 
-    CLASS_RegisterBuiltinClasses();
-
     /* Find the parent window */
 
     parent = cs->hwndParent;




More information about the wine-cvs mailing list