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

oldstable
Alexandre Julliard 2013-10-24 17:40:37 +02:00
parent e4a43cfa1f
commit fe441a0682
7 changed files with 22 additions and 10 deletions

View File

@ -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,14 +397,24 @@ 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
*/

View File

@ -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;

View File

@ -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 */
};

View File

@ -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;
}

View File

@ -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 */
};

View File

@ -262,6 +262,8 @@ static void winstation_init(void)
if (handle) SetThreadDesktop( handle );
}
HeapFree( GetProcessHeap(), 0, buffer );
register_desktop_class();
}

View File

@ -1391,8 +1391,6 @@ HWND WIN_CreateWindowEx( CREATESTRUCTW *cs, LPCWSTR className, HINSTANCE module,
}
}
CLASS_RegisterBuiltinClasses();
/* Find the parent window */
parent = cs->hwndParent;