msi: Subscribe to all control events instead of just the first.
This commit is contained in:
parent
ec7650908a
commit
4759dcc3c1
|
@ -735,27 +735,41 @@ static void event_subscribe( msi_dialog *dialog, const WCHAR *event, const WCHAR
|
||||||
list_add_tail( &dialog->package->subscriptions, &sub->entry );
|
list_add_tail( &dialog->package->subscriptions, &sub->entry );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct dialog_control
|
||||||
|
{
|
||||||
|
msi_dialog *dialog;
|
||||||
|
const WCHAR *control;
|
||||||
|
};
|
||||||
|
|
||||||
|
static UINT map_event( MSIRECORD *row, void *param )
|
||||||
|
{
|
||||||
|
struct dialog_control *dc = param;
|
||||||
|
const WCHAR *event = MSI_RecordGetString( row, 3 );
|
||||||
|
const WCHAR *attribute = MSI_RecordGetString( row, 4 );
|
||||||
|
|
||||||
|
event_subscribe( dc->dialog, event, dc->control, attribute );
|
||||||
|
return ERROR_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
static void dialog_map_events( msi_dialog *dialog, const WCHAR *control )
|
static void dialog_map_events( msi_dialog *dialog, const WCHAR *control )
|
||||||
{
|
{
|
||||||
static const WCHAR Query[] = {
|
static const WCHAR queryW[] =
|
||||||
'S','E','L','E','C','T',' ','*',' ','F','R','O','M',' ',
|
{'S','E','L','E','C','T',' ','*',' ','F','R','O','M',' ',
|
||||||
'`','E','v','e','n','t','M','a','p','p','i','n','g','`',' ',
|
'`','E','v','e','n','t','M','a','p','p','i','n','g','`',' ',
|
||||||
'W','H','E','R','E',' ',
|
'W','H','E','R','E',' ','`','D','i','a','l','o','g','_','`',' ','=',' ','\'','%','s','\'',' ',
|
||||||
'`','D','i','a','l','o','g','_','`',' ','=',' ','\'','%','s','\'',' ',
|
'A','N','D',' ','`','C','o','n','t','r','o','l','_','`',' ','=',' ','\'','%','s','\'',0};
|
||||||
'A','N','D',' ',
|
MSIQUERY *view;
|
||||||
'`','C','o','n','t','r','o','l','_','`',' ','=',' ','\'','%','s','\'',0
|
struct dialog_control dialog_control =
|
||||||
|
{
|
||||||
|
dialog,
|
||||||
|
control
|
||||||
};
|
};
|
||||||
MSIRECORD *row;
|
|
||||||
LPCWSTR event, attribute;
|
|
||||||
|
|
||||||
row = MSI_QueryGetRecord( dialog->package->db, Query, dialog->name, control );
|
if (!MSI_OpenQuery( dialog->package->db, &view, queryW, dialog->name, control ))
|
||||||
if (!row)
|
{
|
||||||
return;
|
MSI_IterateRecords( view, NULL, map_event, &dialog_control );
|
||||||
|
msiobj_release( &view->hdr );
|
||||||
event = MSI_RecordGetString( row, 3 );
|
}
|
||||||
attribute = MSI_RecordGetString( row, 4 );
|
|
||||||
event_subscribe( dialog, event, control, attribute );
|
|
||||||
msiobj_release( &row->hdr );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* everything except radio buttons */
|
/* everything except radio buttons */
|
||||||
|
|
Loading…
Reference in New Issue