Hans Leidekker : msi: Follow the parent state for preselected features unless the parent is an advertised feature .

Alexandre Julliard julliard at winehq.org
Mon Feb 6 15:17:55 CST 2012


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

Author: Hans Leidekker <hans at codeweavers.com>
Date:   Fri Feb  3 10:48:33 2012 +0100

msi: Follow the parent state for preselected features unless the parent is an advertised feature.

---

 dlls/msi/action.c |   24 ++++++++++++++++++++++--
 1 files changed, 22 insertions(+), 2 deletions(-)

diff --git a/dlls/msi/action.c b/dlls/msi/action.c
index 663a917..87fc906 100644
--- a/dlls/msi/action.c
+++ b/dlls/msi/action.c
@@ -1793,6 +1793,9 @@ UINT MSI_SetFeatureStates(MSIPACKAGE *package)
                 }
                 else if (fl->feature->Attributes & msidbFeatureAttributesFollowParent)
                 {
+                    TRACE("feature %s (level %d request %d) follows parent %s (level %d request %d)\n",
+                          debugstr_w(fl->feature->Feature), fl->feature->Level, fl->feature->ActionRequest,
+                          debugstr_w(feature->Feature), feature->Level, feature->ActionRequest);
                     fl->feature->Action = feature->Action;
                     fl->feature->ActionRequest = feature->ActionRequest;
                 }
@@ -1819,6 +1822,23 @@ UINT MSI_SetFeatureStates(MSIPACKAGE *package)
                 }
             }
         }
+        LIST_FOR_EACH_ENTRY( feature, &package->features, MSIFEATURE, entry )
+        {
+            FeatureList *fl;
+
+            LIST_FOR_EACH_ENTRY( fl, &feature->Children, FeatureList, entry )
+            {
+                if (fl->feature->Attributes & msidbFeatureAttributesFollowParent &&
+                    (!(feature->Attributes & msidbFeatureAttributesFavorAdvertise)))
+                {
+                    TRACE("feature %s (level %d request %d) follows parent %s (level %d request %d)\n",
+                          debugstr_w(fl->feature->Feature), fl->feature->Level, fl->feature->ActionRequest,
+                          debugstr_w(feature->Feature), feature->Level, feature->ActionRequest);
+                    fl->feature->Action = feature->Action;
+                    fl->feature->ActionRequest = feature->ActionRequest;
+                }
+            }
+        }
     }
 
     /* now we want to set component state based based on feature state */
@@ -1826,7 +1846,7 @@ UINT MSI_SetFeatureStates(MSIPACKAGE *package)
     {
         ComponentList *cl;
 
-        TRACE("Examining Feature %s (Level %d Installed %d Request %d Action %d)\n",
+        TRACE("examining feature %s (level %d installed %d request %d action %d)\n",
               debugstr_w(feature->Feature), feature->Level, feature->Installed,
               feature->ActionRequest, feature->Action);
 
@@ -1941,7 +1961,7 @@ UINT MSI_SetFeatureStates(MSIPACKAGE *package)
             component->ActionRequest = INSTALLSTATE_UNKNOWN;
         }
 
-        TRACE("Result: Component %s (Installed %d Request %d Action %d)\n",
+        TRACE("component %s (installed %d request %d action %d)\n",
               debugstr_w(component->Component), component->Installed, component->ActionRequest, component->Action);
     }
 




More information about the wine-cvs mailing list