Convert the list of dialog controls to a standard list.
This commit is contained in:
parent
8c6649e457
commit
b84e29747b
|
@ -48,7 +48,7 @@ typedef UINT (*msi_handler)( msi_dialog *, msi_control *, WPARAM );
|
||||||
|
|
||||||
struct msi_control_tag
|
struct msi_control_tag
|
||||||
{
|
{
|
||||||
struct msi_control_tag *next;
|
struct list entry;
|
||||||
HWND hwnd;
|
HWND hwnd;
|
||||||
msi_handler handler;
|
msi_handler handler;
|
||||||
LPWSTR property;
|
LPWSTR property;
|
||||||
|
@ -77,7 +77,7 @@ struct msi_dialog_tag
|
||||||
HWND hwnd;
|
HWND hwnd;
|
||||||
LPWSTR default_font;
|
LPWSTR default_font;
|
||||||
msi_font *font_list;
|
msi_font *font_list;
|
||||||
msi_control *control_list;
|
struct list controls;
|
||||||
HWND hWndFocus;
|
HWND hWndFocus;
|
||||||
WCHAR name[1];
|
WCHAR name[1];
|
||||||
};
|
};
|
||||||
|
@ -147,7 +147,7 @@ static msi_control *msi_dialog_find_control( msi_dialog *dialog, LPCWSTR name )
|
||||||
|
|
||||||
if( !name )
|
if( !name )
|
||||||
return NULL;
|
return NULL;
|
||||||
for( control = dialog->control_list; control; control = control->next )
|
LIST_FOR_EACH_ENTRY( control, &dialog->controls, msi_control, entry )
|
||||||
if( !strcmpW( control->name, name ) ) /* FIXME: case sensitive? */
|
if( !strcmpW( control->name, name ) ) /* FIXME: case sensitive? */
|
||||||
break;
|
break;
|
||||||
return control;
|
return control;
|
||||||
|
@ -157,7 +157,7 @@ static msi_control *msi_dialog_find_control_by_hwnd( msi_dialog *dialog, HWND hw
|
||||||
{
|
{
|
||||||
msi_control *control;
|
msi_control *control;
|
||||||
|
|
||||||
for( control = dialog->control_list; control; control = control->next )
|
LIST_FOR_EACH_ENTRY( control, &dialog->controls, msi_control, entry )
|
||||||
if( hwnd == control->hwnd )
|
if( hwnd == control->hwnd )
|
||||||
break;
|
break;
|
||||||
return control;
|
return control;
|
||||||
|
@ -306,8 +306,7 @@ static msi_control *msi_dialog_create_window( msi_dialog *dialog,
|
||||||
control = HeapAlloc( GetProcessHeap(), 0,
|
control = HeapAlloc( GetProcessHeap(), 0,
|
||||||
sizeof *control + strlenW(name)*sizeof(WCHAR) );
|
sizeof *control + strlenW(name)*sizeof(WCHAR) );
|
||||||
strcpyW( control->name, name );
|
strcpyW( control->name, name );
|
||||||
control->next = dialog->control_list;
|
list_add_head( &dialog->controls, &control->entry );
|
||||||
dialog->control_list = control;
|
|
||||||
control->handler = NULL;
|
control->handler = NULL;
|
||||||
control->property = NULL;
|
control->property = NULL;
|
||||||
control->value = NULL;
|
control->value = NULL;
|
||||||
|
@ -1418,7 +1417,7 @@ static UINT msi_dialog_set_tab_order( msi_dialog *dialog )
|
||||||
{
|
{
|
||||||
msi_control *control, *tab_next;
|
msi_control *control, *tab_next;
|
||||||
|
|
||||||
for( control = dialog->control_list; control; control = control->next )
|
LIST_FOR_EACH_ENTRY( control, &dialog->controls, msi_control, entry )
|
||||||
{
|
{
|
||||||
tab_next = msi_dialog_find_control( dialog, control->tabnext );
|
tab_next = msi_dialog_find_control( dialog, control->tabnext );
|
||||||
if( !tab_next )
|
if( !tab_next )
|
||||||
|
@ -1804,6 +1803,7 @@ msi_dialog *msi_dialog_create( MSIPACKAGE* package, LPCWSTR szDialogName,
|
||||||
dialog->package = package;
|
dialog->package = package;
|
||||||
dialog->event_handler = event_handler;
|
dialog->event_handler = event_handler;
|
||||||
dialog->finished = 0;
|
dialog->finished = 0;
|
||||||
|
list_init( &dialog->controls );
|
||||||
|
|
||||||
/* verify that the dialog exists */
|
/* verify that the dialog exists */
|
||||||
rec = msi_get_dialog_record( dialog );
|
rec = msi_get_dialog_record( dialog );
|
||||||
|
@ -1929,10 +1929,11 @@ void msi_dialog_destroy( msi_dialog *dialog )
|
||||||
DestroyWindow( dialog->hwnd );
|
DestroyWindow( dialog->hwnd );
|
||||||
|
|
||||||
/* destroy the list of controls */
|
/* destroy the list of controls */
|
||||||
while( dialog->control_list )
|
while( !list_empty( &dialog->controls ) )
|
||||||
{
|
{
|
||||||
msi_control *t = dialog->control_list;
|
msi_control *t = LIST_ENTRY( list_head( &dialog->controls ),
|
||||||
dialog->control_list = t->next;
|
msi_control, entry );
|
||||||
|
list_remove( &t->entry );
|
||||||
/* leave dialog->hwnd - destroying parent destroys child windows */
|
/* leave dialog->hwnd - destroying parent destroys child windows */
|
||||||
HeapFree( GetProcessHeap(), 0, t->property );
|
HeapFree( GetProcessHeap(), 0, t->property );
|
||||||
HeapFree( GetProcessHeap(), 0, t->value );
|
HeapFree( GetProcessHeap(), 0, t->value );
|
||||||
|
|
Loading…
Reference in New Issue