diff -r 5e4beccba4e9 -r b8bdbc8f59c7 featuremgmt/featuremgr/src/serverexe/featmgrfeatureregistry.cpp --- 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; };