diff -r 3321d3e205b6 -r b01126ce0bec idlehomescreen/xmluirendering/uiengine/src/xnviewdata.cpp --- a/idlehomescreen/xmluirendering/uiengine/src/xnviewdata.cpp Tue Sep 14 20:58:58 2010 +0300 +++ b/idlehomescreen/xmluirendering/uiengine/src/xnviewdata.cpp Wed Sep 15 12:00:00 2010 +0300 @@ -624,4 +624,60 @@ __PRINTS( "*** CXnViewData::DestroyPublishers - done" ); } +// ----------------------------------------------------------------------------- +// ----------------------------------------------------------------------------- +// +TXnDirtyRegion* CXnViewData::DirtyRegionL( CXnNode& aNode ) + { + // First make sure that the given node is "window owning" + CCoeControl* control( aNode.Control() ); + if( !control || !control->OwnsWindow() ) + { + return NULL; + } + + if( iDirtyRegion && iDirtyRegion->iControl == control ) + { + return iDirtyRegion; + } + + // in case of widget extension / popup, a widget may own window + for( TInt i = 0; i < iPluginsData.Count(); i++ ) + { + TXnDirtyRegion* region( iPluginsData[i]->DirtyRegion() ); + if( region && region->iControl == control ) + { + return region; + } + } + + // Region not found, create a new one + CXnPluginData* pluginData( Plugin( &aNode ) ); + if( pluginData ) + { + return pluginData->CreateDirtyRegionL( aNode, *control ); + } + + return NULL; + } + +// ----------------------------------------------------------------------------- +// ----------------------------------------------------------------------------- +// +void CXnViewData::GetDirtyRegions( RPointerArray& aList ) + { + if( iDirtyRegion ) + { + aList.Append( iDirtyRegion ); + } + for( TInt i = 0; i < iPluginsData.Count(); i++ ) + { + TXnDirtyRegion* region( iPluginsData[i]->DirtyRegion() ); + if( region ) + { + aList.Append( region ); + } + } + } + // End of file