msi: Cleanup the dialog event subscriptions when destroying the dialog.

This commit is contained in:
James Hawkins 2007-02-20 14:16:10 -06:00 committed by Alexandre Julliard
parent 0197c2c292
commit 0746b9076d
3 changed files with 5 additions and 2 deletions

View File

@ -3429,6 +3429,9 @@ void msi_dialog_destroy( msi_dialog *dialog )
if( dialog->hwnd ) if( dialog->hwnd )
DestroyWindow( dialog->hwnd ); DestroyWindow( dialog->hwnd );
/* unsubscribe events */
ControlEvent_CleanupDialogSubscriptions(dialog->package, dialog->name);
/* destroy the list of controls */ /* destroy the list of controls */
while( !list_empty( &dialog->controls ) ) while( !list_empty( &dialog->controls ) )
{ {

View File

@ -54,7 +54,6 @@ struct subscriber {
}; };
static UINT ControlEvent_HandleControlEvent(MSIPACKAGE *, LPCWSTR, LPCWSTR, msi_dialog*); static 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
@ -321,7 +320,7 @@ VOID ControlEvent_FireSubscribedEvent( MSIPACKAGE *package, LPCWSTR event,
} }
} }
static VOID ControlEvent_CleanupDialogSubscriptions(MSIPACKAGE *package, LPWSTR dialog) VOID ControlEvent_CleanupDialogSubscriptions(MSIPACKAGE *package, LPWSTR dialog)
{ {
struct list *i, *t; struct list *i, *t;
struct subscriber *sub; struct subscriber *sub;

View File

@ -781,6 +781,7 @@ extern void msi_ui_error( DWORD msg_id, DWORD type );
/* control event stuff */ /* control event stuff */
extern VOID ControlEvent_FireSubscribedEvent(MSIPACKAGE *package, LPCWSTR event, extern VOID ControlEvent_FireSubscribedEvent(MSIPACKAGE *package, LPCWSTR event,
MSIRECORD *data); MSIRECORD *data);
extern VOID ControlEvent_CleanupDialogSubscriptions(MSIPACKAGE *package, LPWSTR dialog);
extern VOID ControlEvent_CleanupSubscriptions(MSIPACKAGE *package); extern VOID ControlEvent_CleanupSubscriptions(MSIPACKAGE *package);
extern VOID ControlEvent_SubscribeToEvent(MSIPACKAGE *package, msi_dialog *dialog, extern VOID ControlEvent_SubscribeToEvent(MSIPACKAGE *package, msi_dialog *dialog,
LPCWSTR event, LPCWSTR control, LPCWSTR attribute); LPCWSTR event, LPCWSTR control, LPCWSTR attribute);