diff -r 15bf7259bb7c -r d8a3531bc6b8 uiacceltk/hitchcock/coretoolkit/src/HuiEnv.cpp --- a/uiacceltk/hitchcock/coretoolkit/src/HuiEnv.cpp Tue Feb 02 07:56:43 2010 +0200 +++ b/uiacceltk/hitchcock/coretoolkit/src/HuiEnv.cpp Mon Feb 22 17:57:49 2010 +0200 @@ -47,6 +47,8 @@ #include "huicanvastexturecache.h" #include "HuiFxEngine.h" +#include "huisynchronizationobserver.h" + #define HUI_HIRES_TIMER @@ -1069,6 +1071,8 @@ } } + DoSynchronize(); + iCurrentDisplay = NULL; // informs the egosystem that the drawing is done. CHuiStatic::ReportNewFrame(); @@ -1762,3 +1766,65 @@ { return iMemoryLevel; } + +EXPORT_C void CHuiEnv::Synchronize(TInt aId, MHuiSynchronizationObserver* aObserver) + { + iSynchObserver = aObserver; + iSynchId = aId; + + if ( aObserver ) + { + ContinueRefresh(); + } + } + +void CHuiEnv::DoSynchronize() + { + if ( !iSynchObserver ) + { + return; + } + + // Synchronize commands before signalling through P&S + for(TInt i = 0; i < iDisplays.Count(); ++i) + { + if ( ( iDisplays[i]->DisplayType() != CHuiDisplay::EDisplayOffScreenBuffer ) + && ( iDisplays[i]->ScreenBufferObserver() == NULL ) ) + { + MakeCurrent(*iDisplays[i]); + iDisplays[i]->RenderSurface().Finish(); + } + } + + iSynchObserver->Synchronized( iSynchId ); + iSynchObserver = NULL; + } + +void CHuiEnv::RemoveTheControlGroup(TInt aId) + { + TInt i; + + for(i = 0; i < iLoadedGroups.Count(); ++i) + { + if(iLoadedGroups[i]->ResourceId() == aId) + { + // This is control group to delete. + CHuiControlGroup* group = iLoadedGroups[i]; + CancelCommands(group); + + for (TInt ii = iDisplays.Count()-1; ii>=0; ii--) + { + TInt index = iDisplays[ii]->Roster().Find(group); + if (index != KErrNotFound) + { + iDisplays[ii]->Roster().Hide(iDisplays[ii]->Roster().ControlGroup(index)); + } + } + + iLoadedGroups.Remove(i); + + } + } + + + } \ No newline at end of file