Commit 6f3f2549 authored by James Hawkins's avatar James Hawkins Committed by Alexandre Julliard

msi: Only cleanup event subscriptions of the dialog being closed.

parent 975d7ff2
...@@ -54,6 +54,7 @@ struct subscriber { ...@@ -54,6 +54,7 @@ struct subscriber {
}; };
UINT ControlEvent_HandleControlEvent(MSIPACKAGE *, LPCWSTR, LPCWSTR, msi_dialog*); UINT ControlEvent_HandleControlEvent(MSIPACKAGE *, LPCWSTR, LPCWSTR, msi_dialog*);
static VOID ControlEvent_CleanupDialogSubscriptions(MSIPACKAGE *package, LPWSTR dialog);
/* /*
* Create a dialog box and run it if it's modal * Create a dialog box and run it if it's modal
...@@ -123,7 +124,7 @@ static UINT ControlEvent_EndDialog(MSIPACKAGE* package, LPCWSTR argument, ...@@ -123,7 +124,7 @@ static UINT ControlEvent_EndDialog(MSIPACKAGE* package, LPCWSTR argument,
package->CurrentInstallState = ERROR_FUNCTION_FAILED; package->CurrentInstallState = ERROR_FUNCTION_FAILED;
} }
ControlEvent_CleanupSubscriptions(package); ControlEvent_CleanupDialogSubscriptions(package, msi_dialog_get_name( dialog ));
msi_dialog_end_dialog( dialog ); msi_dialog_end_dialog( dialog );
return ERROR_SUCCESS; return ERROR_SUCCESS;
} }
...@@ -320,6 +321,23 @@ VOID ControlEvent_FireSubscribedEvent( MSIPACKAGE *package, LPCWSTR event, ...@@ -320,6 +321,23 @@ VOID ControlEvent_FireSubscribedEvent( MSIPACKAGE *package, LPCWSTR event,
} }
} }
static VOID ControlEvent_CleanupDialogSubscriptions(MSIPACKAGE *package, LPWSTR dialog)
{
struct list *i, *t;
struct subscriber *sub;
LIST_FOR_EACH_SAFE( i, t, &package->subscriptions )
{
sub = LIST_ENTRY( i, struct subscriber, entry );
if ( lstrcmpW( msi_dialog_get_name( sub->dialog ), dialog ))
continue;
list_remove( &sub->entry );
free_subscriber( sub );
}
}
VOID ControlEvent_CleanupSubscriptions(MSIPACKAGE *package) VOID ControlEvent_CleanupSubscriptions(MSIPACKAGE *package)
{ {
struct list *i, *t; struct list *i, *t;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment