featuremgmt/featuremgr/src/serverexe/featmgrfeatureregistry.cpp
changeset 40 b8bdbc8f59c7
parent 17 55f2396f6d25
child 51 7d4490026038
--- a/featuremgmt/featuremgr/src/serverexe/featmgrfeatureregistry.cpp	Thu Jul 08 12:09:58 2010 +0100
+++ b/featuremgmt/featuremgr/src/serverexe/featmgrfeatureregistry.cpp	Thu Aug 12 11:53:23 2010 +0100
@@ -163,6 +163,11 @@
         }
     else
         {
+        TBitFlags32 flags = iFeatureList[index].FeatureFlags();
+        flags.Assign( EFeatureSupported, KFeatureUnsupported );
+        TUint32 data = iFeatureList[index].FeatureData();
+        TFeatureServerEntry entry( aFeature.FeatureUid(), flags, data );
+        aFeature = entry;
         err = KFeatureUnsupported;
         }
 
@@ -269,10 +274,26 @@
     
     if( iSWIProcessId == aPrcId && iSWICacheFeature )
     	{
-		TBitFlags32 flags(0);
-    	flags.Assign( EFeatureSupported, aEnable );
-    	TFeatureServerEntry entry( aFeature, flags, *aData );    
-	    err = SWICacheCommand(ESWISetFeatAndData, entry);
+        TBitFlags32 flags(0);
+        flags.Assign( EFeatureSupported, aEnable );
+        TUint32 data = 0;
+        if( aData )
+            {
+            data = *aData;
+            }
+
+        TFeatureServerEntry entry( aFeature, flags, data );
+
+        // If aData is not null, we want to change the user data too
+        //  otherwise only change the feature status.
+        if( aData )
+            {
+            err = SWICacheCommand(ESWISetFeatAndData, entry);
+            }
+        else
+            {
+            err = SWICacheCommand(ESWISetFeat, entry);
+            }
     	}
     else 
     	{
@@ -1437,6 +1458,13 @@
 							EFeatureSupportUntouch,&data);
 				}
 				break;
+            case ESWISetFeat:
+                {
+                SetFeature( iSWICachedOperations[i].iFeatEntry.FeatureUid(),
+                            iSWICachedOperations[i].iFeatEntry.FeatureFlags().Value(),
+                            NULL);
+                }
+                break;
 			default:
 				break;
 				};