MSI: make sure there's only one place we allocate dialog controls
Mike McCormack
mike at codeweavers.com
Thu Mar 24 05:27:04 CST 2005
ChangeLog:
* make sure there's only one place we allocate dialog controls
-------------- next part --------------
Index: dlls/msi/dialog.c
===================================================================
RCS file: /home/wine/wine/dlls/msi/dialog.c,v
retrieving revision 1.8
diff -u -p -r1.8 dialog.c
--- dlls/msi/dialog.c 16 Mar 2005 11:31:35 -0000 1.8
+++ dlls/msi/dialog.c 24 Mar 2005 11:26:44 -0000
@@ -226,17 +226,16 @@ static UINT msi_dialog_build_font_list(
return r;
}
-static msi_control *msi_dialog_add_control( msi_dialog *dialog,
- MSIRECORD *rec, LPCWSTR szCls, DWORD style )
+static msi_control *msi_dialog_create_window( msi_dialog *dialog,
+ MSIRECORD *rec, LPCWSTR szCls, LPCWSTR name, LPCWSTR text,
+ DWORD style, HWND parent )
{
- DWORD x, y, width, height, attributes;
- LPCWSTR text, name;
+ DWORD x, y, width, height;
LPWSTR font = NULL, title = NULL;
- msi_control *control = NULL;
+ msi_control *control;
style |= WS_CHILD | WS_GROUP;
- name = MSI_RecordGetString( rec, 2 );
control = HeapAlloc( GetProcessHeap(), 0,
sizeof *control + strlenW(name)*sizeof(WCHAR) );
strcpyW( control->name, name );
@@ -249,34 +248,51 @@ static msi_control *msi_dialog_add_contr
y = MSI_RecordGetInteger( rec, 5 );
width = MSI_RecordGetInteger( rec, 6 );
height = MSI_RecordGetInteger( rec, 7 );
- attributes = MSI_RecordGetInteger( rec, 8 );
- text = MSI_RecordGetString( rec, 10 );
-
- TRACE("Dialog %s control %s\n", debugstr_w(dialog->name), debugstr_w(text));
x = msi_dialog_scale_unit( dialog, x );
y = msi_dialog_scale_unit( dialog, y );
width = msi_dialog_scale_unit( dialog, width );
height = msi_dialog_scale_unit( dialog, height );
- if( attributes & 1 )
- style |= WS_VISIBLE;
- if( ~attributes & 2 )
- style |= WS_DISABLED;
if( text )
{
font = msi_dialog_get_style( &text );
deformat_string( dialog->package, text, &title );
}
+
control->hwnd = CreateWindowW( szCls, title, style,
- x, y, width, height, dialog->hwnd, NULL, NULL, NULL );
+ x, y, width, height, parent, NULL, NULL, NULL );
+
+ TRACE("Dialog %s control %s hwnd %p\n",
+ debugstr_w(dialog->name), debugstr_w(text), control->hwnd );
+
msi_dialog_set_font( dialog, control->hwnd,
font ? font : dialog->default_font );
+
HeapFree( GetProcessHeap(), 0, font );
HeapFree( GetProcessHeap(), 0, title );
+
return control;
}
+/* everything except radio buttons */
+static msi_control *msi_dialog_add_control( msi_dialog *dialog,
+ MSIRECORD *rec, LPCWSTR szCls, DWORD style )
+{
+ DWORD attributes;
+ LPCWSTR text, name;
+
+ name = MSI_RecordGetString( rec, 2 );
+ attributes = MSI_RecordGetInteger( rec, 8 );
+ text = MSI_RecordGetString( rec, 10 );
+ if( attributes & 1 )
+ style |= WS_VISIBLE;
+ if( ~attributes & 2 )
+ style |= WS_DISABLED;
+ return msi_dialog_create_window( dialog, rec, szCls, name, text,
+ style, dialog->hwnd );
+}
+
static UINT msi_dialog_text_control( msi_dialog *dialog, MSIRECORD *rec )
{
TRACE("%p %p\n", dialog, rec);
@@ -327,7 +343,7 @@ static UINT msi_dialog_scrolltext_contro
{
const static WCHAR szEdit[] = { 'E','D','I','T',0 };
- TRACE("%p %p\n", dialog, rec);
+ FIXME("%p %p\n", dialog, rec);
msi_dialog_add_control( dialog, rec, szEdit, WS_BORDER |
ES_MULTILINE | WS_VSCROLL | ES_READONLY | ES_AUTOVSCROLL );
@@ -377,58 +393,26 @@ static UINT msi_dialog_pathedit_control(
return msi_dialog_edit_control( dialog, rec );
}
+/* radio buttons are a bit different to a normal control */
static UINT msi_dialog_create_radiobutton( MSIRECORD *rec, LPVOID param )
{
radio_button_group_descr *group = (radio_button_group_descr *)param;
msi_dialog *dialog = group->dialog;
msi_control *control;
- LPCWSTR prop;
- DWORD x, y, width, height, style;
+ LPCWSTR prop, text, name;
+ DWORD style;
DWORD attributes = group->attributes;
- LPCWSTR text, name;
- LPWSTR font = NULL, title = NULL;
style = WS_CHILD | BS_AUTORADIOBUTTON | BS_MULTILINE;
name = MSI_RecordGetString( rec, 3 );
- control = HeapAlloc( GetProcessHeap(), 0,
- sizeof *control + strlenW(name)*sizeof(WCHAR) );
- strcpyW( control->name, name );
- control->next = dialog->control_list;
- dialog->control_list = control;
-
- x = MSI_RecordGetInteger( rec, 4 );
- y = MSI_RecordGetInteger( rec, 5 );
- width = MSI_RecordGetInteger( rec, 6 );
- height = MSI_RecordGetInteger( rec, 7 );
text = MSI_RecordGetString( rec, 8 );
-
- x = msi_dialog_scale_unit( dialog, x );
- y = msi_dialog_scale_unit( dialog, y );
- width = msi_dialog_scale_unit( dialog, width );
- height = msi_dialog_scale_unit( dialog, height );
-
if( attributes & 1 )
style |= WS_VISIBLE;
if( ~attributes & 2 )
style |= WS_DISABLED;
- if( text )
- {
- font = msi_dialog_get_style( &text );
- deformat_string( dialog->package, text, &title );
- }
-
- control->hwnd = CreateWindowW( szButton, title, style, x, y, width, height,
- group->parent->hwnd, NULL, NULL, NULL );
-
- TRACE("Dialog %s control %s hwnd %p\n", debugstr_w(dialog->name), debugstr_w(text), control->hwnd);
-
- msi_dialog_set_font( dialog, control->hwnd,
- font ? font : dialog->default_font );
-
- HeapFree( GetProcessHeap(), 0, font );
- HeapFree( GetProcessHeap(), 0, title );
-
+ control = msi_dialog_create_window( dialog, rec, szButton, name, text,
+ style, group->parent->hwnd );
control->handler = msi_dialog_radiogroup_handler;
prop = MSI_RecordGetString( rec, 1 );
More information about the wine-patches
mailing list