msi: Search for the browse dialog controls by type instead of name.

This commit is contained in:
James Hawkins 2006-08-31 13:42:54 -07:00 committed by Alexandre Julliard
parent 4e3f6eda0e
commit 9c3e640c10
1 changed files with 18 additions and 3 deletions

View File

@ -63,6 +63,7 @@ struct msi_control_tag
HBITMAP hBitmap;
HICON hIcon;
LPWSTR tabnext;
LPWSTR type;
HMODULE hDll;
float progress_current;
float progress_max;
@ -177,6 +178,18 @@ static msi_control *msi_dialog_find_control( msi_dialog *dialog, LPCWSTR name )
return NULL;
}
static msi_control *msi_dialog_find_control_by_type( msi_dialog *dialog, LPCWSTR type )
{
msi_control *control;
if( !type )
return NULL;
LIST_FOR_EACH_ENTRY( control, &dialog->controls, msi_control, entry )
if( !strcmpW( control->type, type ) ) /* FIXME: case sensitive? */
return control;
return NULL;
}
static msi_control *msi_dialog_find_control_by_hwnd( msi_dialog *dialog, HWND hwnd )
{
msi_control *control;
@ -359,6 +372,7 @@ static msi_control *msi_dialog_create_window( msi_dialog *dialog,
control->hIcon = NULL;
control->hDll = NULL;
control->tabnext = strdupW( MSI_RecordGetString( rec, 11) );
control->type = strdupW( MSI_RecordGetString( rec, 3 ) );
control->progress_current = 0;
control->progress_max = 100;
@ -1423,7 +1437,7 @@ static void msi_dialog_update_pathedit( msi_dialog *dialog, msi_control *control
LPWSTR prop, path;
BOOL indirect;
if (!control && !(control = msi_dialog_find_control( dialog, szPathEdit ) ))
if (!control && !(control = msi_dialog_find_control_by_type( dialog, szPathEdit ) ))
return;
indirect = control->attributes & msidbControlAttributesIndirect;
@ -1967,7 +1981,7 @@ static void msi_dialog_update_directory_combo( msi_dialog *dialog, msi_control *
LPWSTR prop, path;
BOOL indirect;
if (!control && !(control = msi_dialog_find_control( dialog, szDirectoryCombo )))
if (!control && !(control = msi_dialog_find_control_by_type( dialog, szDirectoryCombo )))
return;
indirect = control->attributes & msidbControlAttributesIndirect;
@ -2014,7 +2028,7 @@ UINT msi_dialog_directorylist_up( msi_dialog *dialog )
LPWSTR prop, path, ptr;
BOOL indirect;
control = msi_dialog_find_control( dialog, szDirectoryList );
control = msi_dialog_find_control_by_type( dialog, szDirectoryList );
indirect = control->attributes & msidbControlAttributesIndirect;
prop = msi_dialog_dup_property( dialog, control->property, indirect );
@ -2863,6 +2877,7 @@ void msi_dialog_destroy( msi_dialog *dialog )
if( t->hIcon )
DestroyIcon( t->hIcon );
msi_free( t->tabnext );
msi_free( t->type );
msi_free( t );
if (t->hDll)
FreeLibrary( t->hDll );