Module: wine Branch: master Commit: 9c3e640c100b90a928de7d9f45ab176dd88c7631 URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=9c3e640c100b90a928de7d9f...
Author: James Hawkins truiken@gmail.com Date: Thu Aug 31 13:42:54 2006 -0700
msi: Search for the browse dialog controls by type instead of name.
---
dlls/msi/dialog.c | 21 ++++++++++++++++++--- 1 files changed, 18 insertions(+), 3 deletions(-)
diff --git a/dlls/msi/dialog.c b/dlls/msi/dialog.c index 6c1123b..ab58219 100644 --- a/dlls/msi/dialog.c +++ b/dlls/msi/dialog.c @@ -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_cont 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_wi 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( 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_ 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_di 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 *dia if( t->hIcon ) DestroyIcon( t->hIcon ); msi_free( t->tabnext ); + msi_free( t->type ); msi_free( t ); if (t->hDll) FreeLibrary( t->hDll );