From fe441a0682ce21ba2d379c3c343efb00094f9ece Mon Sep 17 00:00:00 2001 From: Alexandre Julliard Date: Thu, 24 Oct 2013 17:40:37 +0200 Subject: [PATCH] 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 333cb764176..e03272fd616 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 32e9815dbf2..3ce804f231d 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 2204b77c330..563a214d7b1 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 18778cdfc84..192eebe5efb 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 d09e5ddab79..4fc87ad2680 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 e74ac192ec4..d08a93c2dca 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 d506fee7c1f..30a7c6fc9bc 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; -- 2.11.4.GIT