Alexandre Julliard : user32: Register classes once the graphics driver has been loaded, except for the desktop class.
Module: wine Branch: master Commit: fe441a0682ce21ba2d379c3c343efb00094f9ece URL: http://source.winehq.org/git/wine.git/?a=commit;h=fe441a0682ce21ba2d379c3c34... Author: Alexandre Julliard <julliard(a)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;
participants (1)
-
Alexandre Julliard