James Hawkins : msi: Provide a specific dialog to ControlEvent_SubscribeToEvent, as package-> dialog does not always point to the same dialog.

Alexandre Julliard julliard at wine.codeweavers.com
Wed Oct 4 04:25:20 CDT 2006


Module: wine
Branch: master
Commit: 2a8c38ff74f0ba488934cdb0fd30fce3139ab43e
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=2a8c38ff74f0ba488934cdb0fd30fce3139ab43e

Author: James Hawkins <truiken at gmail.com>
Date:   Tue Oct  3 15:01:23 2006 -0700

msi: Provide a specific dialog to ControlEvent_SubscribeToEvent, as package->dialog does not always point to the same dialog.

---

 dlls/msi/action.h |    4 ++--
 dlls/msi/dialog.c |    2 +-
 dlls/msi/events.c |   11 +++++------
 3 files changed, 8 insertions(+), 9 deletions(-)

diff --git a/dlls/msi/action.h b/dlls/msi/action.h
index ae7de82..d58bc52 100644
--- a/dlls/msi/action.h
+++ b/dlls/msi/action.h
@@ -295,8 +295,8 @@ extern UINT msi_create_component_directo
 extern VOID ControlEvent_FireSubscribedEvent(MSIPACKAGE *package, LPCWSTR event,
                                       MSIRECORD *data);
 extern VOID ControlEvent_CleanupSubscriptions(MSIPACKAGE *package);
-extern VOID ControlEvent_SubscribeToEvent(MSIPACKAGE *package, LPCWSTR event,
-                                   LPCWSTR control, LPCWSTR attribute);
+extern VOID ControlEvent_SubscribeToEvent(MSIPACKAGE *package, msi_dialog *dialog,
+                                      LPCWSTR event, LPCWSTR control, LPCWSTR attribute);
 extern VOID ControlEvent_UnSubscribeToEvent( MSIPACKAGE *package, LPCWSTR event,
                                       LPCWSTR control, LPCWSTR attribute );
 
diff --git a/dlls/msi/dialog.c b/dlls/msi/dialog.c
index 7d60791..940939f 100644
--- a/dlls/msi/dialog.c
+++ b/dlls/msi/dialog.c
@@ -602,7 +602,7 @@ static void msi_dialog_map_events(msi_di
 
     event = MSI_RecordGetString( row, 3 );
     attribute = MSI_RecordGetString( row, 4 );
-    ControlEvent_SubscribeToEvent( dialog->package, event, control, attribute );
+    ControlEvent_SubscribeToEvent( dialog->package, dialog, event, control, attribute );
     msiobj_release( &row->hdr );
 }
 
diff --git a/dlls/msi/events.c b/dlls/msi/events.c
index e9b7d55..3502e9a 100644
--- a/dlls/msi/events.c
+++ b/dlls/msi/events.c
@@ -48,6 +48,7 @@ struct _events {
 
 struct subscriber {
     struct list entry;
+    msi_dialog *dialog;
     LPWSTR event;
     LPWSTR control;
     LPWSTR attribute;
@@ -267,14 +268,15 @@ static void free_subscriber( struct subs
     msi_free(sub);
 }
 
-VOID ControlEvent_SubscribeToEvent( MSIPACKAGE *package, LPCWSTR event,
-                                    LPCWSTR control, LPCWSTR attribute )
+VOID ControlEvent_SubscribeToEvent( MSIPACKAGE *package, msi_dialog *dialog,
+                                    LPCWSTR event, LPCWSTR control, LPCWSTR attribute )
 {
     struct subscriber *sub;
 
     sub = msi_alloc(sizeof (*sub));
     if( !sub )
         return;
+    sub->dialog = dialog;
     sub->event = strdupW(event);
     sub->control = strdupW(control);
     sub->attribute = strdupW(attribute);
@@ -309,14 +311,11 @@ VOID ControlEvent_FireSubscribedEvent( M
 
     TRACE("Firing Event %s\n",debugstr_w(event));
 
-    if (!package->dialog)
-        return;
-
     LIST_FOR_EACH_ENTRY( sub, &package->subscriptions, struct subscriber, entry )
     {
         if (lstrcmpiW(sub->event, event))
             continue;
-        msi_dialog_handle_event( package->dialog, sub->control,
+        msi_dialog_handle_event( sub->dialog, sub->control,
                                  sub->attribute, rec );
     }
 }




More information about the wine-cvs mailing list