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