--- a/uiacceltk/hitchcock/ServerCore/Src/alfbridge.cpp Thu May 27 13:47:19 2010 +0300
+++ b/uiacceltk/hitchcock/ServerCore/Src/alfbridge.cpp Fri Jun 11 14:31:43 2010 +0300
@@ -171,6 +171,7 @@
iDeadControlGroups.Close();
iEffectWindowGroups.Close();
delete iFullScreenEffectData;
+ delete iSecondaryFullScreenEffectData;
if (iActivated)
{
@@ -674,6 +675,13 @@
if (anyVisualHasEffect)
{
TInt activeEffectHandle = iEffectCleanupStack[activeEffectIndex].iHandle;
+ if (iSecondaryFullScreenEffectData && iSecondaryFullScreenEffectData->iHandle == activeEffectHandle)
+ {
+ __ALFFXLOGSTRING1("CAlfBridge::DeleteControlGroupL - WARNING! Control group with 2 phase effect is being destroyed. Canceling second phase for handle %d", activeEffectHandle);
+ delete iSecondaryFullScreenEffectData;
+ iSecondaryFullScreenEffectData = NULL;
+ }
+
__ALFFXLOGSTRING1("Layout 0x%x has external content", layout);
// EHuiVisualFlagShouldDestroy destroy flag should have come for the windows in this layout already
layout->SetFlags(EHuiVisualFlagShouldDestroy);
@@ -702,7 +710,7 @@
if (!HasActiveEffect(familyTree[familyIndex]))
{
TInt dummy;
- AddEffectItemL(activeEffectHandle, familyTree[familyIndex], NULL, NULL, EFalse, dummy, EFalse);
+ AddEffectItemL(activeEffectHandle, familyTree[familyIndex], NULL, NULL, EFalse, dummy, ETrue, EFalse);
}
}
}
@@ -773,7 +781,7 @@
cntrl->ConstructL();
group->AppendL(cntrl);
CleanupStack::Pop(cntrl);
- cntrl->SetRole(EAlfWindowGroupContainer);
+ cntrl->SetRole(EHuiWindowGroupContainer);
layout = CHuiCanvasVisual::AddNewL(*cntrl);
layout->SetTagL(KAlfWindowGroupContainerControlTag);
@@ -798,10 +806,14 @@
entry.iSecureId = aSecureId;
// we have received start effect for this group, but the group did not exist in alf universe at the time. hide the group.
if (iFullScreenEffectData
- && iFullScreenEffectData->iWaitingWindowGroup
+ && (iFullScreenEffectData->State() == EWaitingWindowGroup || iFullScreenEffectData->State() == EEndFullScreenReceivedWaitingWindowGroup)
&& iFullScreenEffectData->iToSecureId == aSecureId)
{
iFullScreenEffectData->iToWg = aClientWindowGroupId;
+ if (iSecondaryFullScreenEffectData)
+ {
+ iSecondaryFullScreenEffectData->iToWg = aClientWindowGroupId;
+ }
CHuiControlGroup* fromGroup = NULL;
CHuiLayout* fromLayout = NULL;
fromGroup = FindControlGroupByFullScreenFromEffect();
@@ -815,10 +827,16 @@
// First HandleGfxEvent, then clear iWaitingWindowGroup.
__ALFFXLOGSTRING1("CAlfBridge::CreateControlGroupL - try triggering effect 0x%x", layout);
TBool failed = HandleGfxEventL( *iFullScreenEffectData, layout, fromLayout );
- if ( iFullScreenEffectData )
- {
- iFullScreenEffectData->iWaitingWindowGroup = EFalse;
+ if ( iFullScreenEffectData->State() == EWaitingWindowGroup)
+ {
+ iFullScreenEffectData->SetState(EWaitEndFullScreen);
}
+ else
+ {
+ // was CFullScreenEffectState::EEndFullScreenReceivedWaitingWindowGroup
+ iFullScreenEffectData->SetState(EEndFullscreenReceived);
+ }
+
if ( failed )
{
// Effect failed, reset state
@@ -827,7 +845,7 @@
}
}
entry.iScreenNumber = aScreenNumber;
-// entry.iRole = EAlfWindowGroupContainer;
+// entry.iRole = EHuiWindowGroupContainer;
iAlfScreens[aScreenNumber]->iControlGroups.Append(entry);
CleanupStack::Pop(group);
@@ -872,7 +890,7 @@
// disappear.
if ( aGroup.Control(0).Visual(0).Effect() )
{
- if ( aGroup.Control(0).Role() != EAlfWindowGroupContainer )
+ if ( aGroup.Control(0).Role() != EHuiWindowGroupContainer )
{
// The case where the application control group is deleted by window server
// has been solved by deleting the tag when window server wants to delete
@@ -882,13 +900,13 @@
}
}
- if (aGroup.Control(0).Role() == EAlfWindowGroupContainer)
+ if (aGroup.Control(0).Role() == EHuiWindowGroupContainer)
{
// Window group control groups
ShowWindowGroupControlGroupL(aRoster, aGroup, aWhere, aScreenNumber);
aGroup.SetAcceptInput(EFalse);
}
- else if (aGroup.Control(0).Role() == EAlfSessionContainer)
+ else if (aGroup.Control(0).Role() == EHuiSessionContainer)
{
// ALF application control groups
ShowSessionContainerControlGroupL(aRoster, aGroup, aWhere, aScreenNumber);
@@ -976,7 +994,7 @@
move = ETrue;
}
- if (aRoster.ControlGroup(i).Control(0).Role() == EAlfSessionContainer)
+ if (aRoster.ControlGroup(i).Control(0).Role() == EHuiSessionContainer)
{
index++;
}
@@ -1050,7 +1068,7 @@
break;
}
- if (aRoster.ControlGroup(i).Control(0).Role() == EAlfWindowGroupContainer &&
+ if (aRoster.ControlGroup(i).Control(0).Role() == EHuiWindowGroupContainer &&
&aRoster.ControlGroup(i) != &aGroup)
{
index++;
@@ -1063,7 +1081,7 @@
// Topmost
for (TInt i=aRoster.Count() - screen->FixedControlGroupCount(); i >= 0; i--)
{
- if (aRoster.ControlGroup(i).Control(0).Role() == EAlfWindowGroupContainer)
+ if (aRoster.ControlGroup(i).Control(0).Role() == EHuiWindowGroupContainer)
{
// increasing the count, assuming that WindowControlGroup is not in the Roster
i++;
@@ -1081,7 +1099,7 @@
//
void CAlfBridge::SetAlfWindowGroupId(TInt aAlfWindowGroupId)
{
- iAlfWindowGroupId = aAlfWindowGroupId;
+ iAlfWindowGroupId = aAlfWindowGroupId;
// check if hithcock window group was already there
TInt secureId = RThread().SecureId();
if (iAlfScreens.Count())
@@ -1092,6 +1110,11 @@
iAlfScreens[0]->iControlGroups[i].iClientWindowGroupId != CHuiStatic::RootWin(0)->Identifier())
{
iAlfWindowGroupNodeId = iAlfScreens[0]->iControlGroups[i].iWindowGroupNodeId;
+
+ CHuiControlGroup* controlGroup = FindControlGroup(iAlfWindowGroupNodeId, 0);
+ CHuiControl& control = controlGroup->Control(0);
+ CHuiVisual* layout = &control.Visual(0);
+ iAlfScreens[0]->iDisplay->Roster().SetAlfEventWindow(layout);
return;
}
}
@@ -1126,7 +1149,7 @@
for (TInt j=0; j<roster.Count();j++)
{
CHuiControlGroup& controlGroup = roster.ControlGroup(j);
- if (controlGroup.Control(0).Role() == EAlfSessionContainer)
+ if (controlGroup.Control(0).Role() == EHuiSessionContainer)
{
controlGroupOrder.Append(&controlGroup);
roster.Hide(controlGroup);
@@ -1154,7 +1177,7 @@
CHuiRoster& roster = iAlfScreens[aScreenNumber]->iDisplay->Roster();
for (TInt j=0; j<roster.Count();j++)
{
- if( roster.ControlGroup(j).Control(0).Role() == EAlfSessionContainer
+ if( roster.ControlGroup(j).Control(0).Role() == EHuiSessionContainer
|| roster.ControlGroup(j).ResourceId() == iAlfWindowGroupNodeId )
{
return j; // Alf groups positioned just above alf servers window group
@@ -1281,7 +1304,12 @@
{
return EFalse;
}
- if ( aVisual.Layout() && IsNonFadeEffect( aVisual.Layout()->Effect() ) )
+
+ // Note: The long startup effect uses opaque effect to hide the background.
+ if ( aVisual.Layout()
+ && (IsNonFadeEffect( aVisual.Layout()->Effect() )
+ && !IsOpaqueEffect(aVisual.Layout()->Effect() ))
+ )
{
return EFalse;
}
@@ -1438,7 +1466,7 @@
CHuiControlGroup& controlgroup = iAlfScreens[aScreenNumber]->iDisplay->Roster().ControlGroup(j);
CHuiControl& control = controlgroup.Control(0);
- if (control.Role() == EAlfFpsIndicatorContainer)
+ if (control.Role() == EHuiFpsIndicatorContainer)
{
// FPS container doesn't contain canvas visuals
continue;
@@ -1465,11 +1493,18 @@
// Dont mess with alf control group visuals, alf session handling does it for us
- if (control.Role() == EAlfSessionContainer)
+ if (control.Role() == EHuiSessionContainer)
{
CHuiLayout* hostContainer = control.ContainerLayout( NULL );
- TInt flags = hostContainer->Flags();
- if (!fullscreenCovered || alfClientWindowGroupVisible)
+ TInt flags = hostContainer->Flags();
+ CAlfAppSrvSessionBase* activeSession = NULL;
+ if (iAppUi)
+ {
+ activeSession = iAppUi->ActiveSession();
+ }
+ // !fullscreenCovered need to be checked because for fullscreen
+ // alf applications alf event window group could be on top of alf client windowgroup
+ if ( (alfClientWindowGroupVisible || !fullscreenCovered) && activeSession)
{
// clear inactive flag if client has not made this controlgroup hidden
if(!(flags&EHuiVisualFlagUnderOpaqueHint))
@@ -1616,14 +1651,16 @@
}
TBool isLayoutActive = !(layout->Flags() & EHuiVisualFlagInactive);
- if (isLayoutActive && !hasActiveVisualsInVisualTree)
+
+ if (isLayoutActive && !hasActiveVisualsInVisualTree && !IsOpaqueEffect(layout->Effect()))
{
// Setting also the root visual (layout) as inactive, if it had none
- // active children. This is because otherwise the Inactive checks won't
- // work correctly within RosterImpl ScanDirty & ClearChanged phases.
+ // active children. This is because otherwise the Inactive checks won't
+ // work correctly within RosterImpl ScanDirty & ClearChanged phases.
+ // If root visual is having an opaque effect, it must remain active
layout->SetFlag(EHuiVisualFlagInactive);
}
- else if(!isLayoutActive && hasActiveVisualsInVisualTree)
+ else if(!isLayoutActive && (hasActiveVisualsInVisualTree || IsOpaqueEffect(layout->Effect())))
{
layout->ClearFlag(EHuiVisualFlagInactive);
layout->SetPos(fullscreen.iTl);
@@ -1697,9 +1734,11 @@
iHomeScreenPSValue = value;
}
}
-
- screen->iDisplay->SetForegroundTextureOptions( alfWindowGroupFoundVisible | alfClientWindowGroupVisible );
-
+ if ( iSwRenderingEnabled )
+ {
+ screen->iDisplay->SetForegroundTextureOptions( alfWindowGroupFoundVisible | alfClientWindowGroupVisible );
+ }
+
// Finally, if there are fadeeffects applied to windowgroups, make sure first one does not
// blend itself, but other windowgroups do blend. Otherwise windowgrouops above others
// would clear the screen areas where they do not really draw.
@@ -1722,11 +1761,7 @@
if ((controlgroup.ResourceId() == iAlfWindowGroupNodeId))
{
- // Special handling for ALF fading...fading happens via empty alf originated event window group
- TInt flags = layout->Effect()->EffectFlags();
- flags |= KHuiFxEnableBackgroundInAllLayers; // This forces effect to happen to background pixels that are read from surface.
- flags |= KHuiFxFrozenBackground; // To get optimal UI performance, we ignore changes in ALF scene when it is faded.
- layout->Effect()->SetEffectFlags(flags);
+ // no special actions needed currently for alf content.
}
firstFadedWindowGroupFound = ETrue;
}
@@ -1970,8 +2005,8 @@
// Sprites and effects as we consider them always as transparent and also
// if controlgroup is transformed somehow
- if (aControl.Role() == EAlfFullScreenEffectContainer
- || aControl.Role() == EAlfWindowFloatingSpriteContainer ||
+ if (aControl.Role() == EHuiFullScreenEffectContainer
+ || aControl.Role() == EHuiWindowFloatingSpriteContainer ||
aControlGroup.IsTransformed())
{
visualIsOpaque = EFalse;
@@ -2171,8 +2206,8 @@
CHuiControlGroup& controlgroup = iAlfScreens[0]->iDisplay->Roster().ControlGroup(j);
CHuiControl& control = controlgroup.Control(0);
- if ( control.Role() == EAlfSessionContainer ||
- control.Role() == EAlfFpsIndicatorContainer )
+ if ( control.Role() == EHuiSessionContainer ||
+ control.Role() == EHuiFpsIndicatorContainer )
{
continue;
}
@@ -3138,7 +3173,7 @@
TInt wsWindowGroupCount = 0;
for (TInt i=0; i<iAlfScreens[screenNumber]->iDisplay->Roster().Count();i++)
{
- if (iAlfScreens[screenNumber]->iDisplay->Roster().ControlGroup(i).Control(0).Role()==EAlfWindowGroupContainer)
+ if (iAlfScreens[screenNumber]->iDisplay->Roster().ControlGroup(i).Control(0).Role()==EHuiWindowGroupContainer)
{
wsWindowGroupCount++;
}
@@ -3327,9 +3362,11 @@
__ALFLOGSTRING3("CAlfBridge::HandlePostCanvasBufferL, EAlfDSPostCanvasBuffer: Visual not found! Screen: %d, Id: %d, GroupId: %d ", screenNumber, windowNodeId, windowGroupNodeId );
}
#ifdef USE_APPLICATION_ENDFULLSCREEN_TIMEOUT
- if (iFullScreenEffectData
+ if (iFullScreenEffectData
+ && !iSecondaryFullScreenEffectData
&& iFullScreenEffectData->iEffectType != CFullScreenEffectState::ENotDefinedEffect
- && !iFullScreenEffectData->iEndFullScreen)
+ && iFullScreenEffectData->State() == EWaitEndFullScreen
+ && iFullScreenEffectData->iTwoPhaseEffect != CFullScreenEffectState::ESecondPartActive)
{
CHuiControlGroup *to_group = NULL;
if (iFullScreenEffectData->iEffectType == CFullScreenEffectState::EExitEffect)
@@ -3360,7 +3397,7 @@
//
void CAlfBridge::GfxTriggerEndFullScreen(CFullScreenEffectState* aFullScreenEffectData)
{
- if (aFullScreenEffectData->iEndFullScreen)
+ if (iFullScreenEffectData->State() == EFinalEffectActive)
{
return;
}
@@ -3389,9 +3426,9 @@
// from layout may be undefined
__ALFFXLOGSTRING1("CAlfBridge::HandleGfxEndFullScreenTimeout : Enough app drawing. Trigger EndFullScreen for layout 0x%x", to_layout);
HandleGfxEventL( *aFullScreenEffectData, to_layout, from_layout );
- }
-
- aFullScreenEffectData->iEndFullScreen = ETrue;
+ aFullScreenEffectData->SetState(EFinalEffectActive);
+ }
+
iAlfScreens[0]->SetVisualTreeVisibilityChanged(ETrue);
}
@@ -4123,7 +4160,7 @@
CHuiControlGroup& controlgroup = screen->iDisplay->Roster().ControlGroup(j);
CHuiControl& control = controlgroup.Control(0);
- if( control.Role() == EAlfWindowGroupContainer)
+ if( control.Role() == EHuiWindowGroupContainer)
{
// Only update layout which are made to correspond window groups.
// Layouts that fullscreen effects are applied to
@@ -4525,8 +4562,9 @@
TBool CAlfBridge::HandleGfxEventL(CFullScreenEffectState& aEvent, CHuiLayout* aToLayout, CHuiLayout *aFromLayout)
{
- __ALFFXLOGSTRING2("CAlfBridge::HandleGfxEventL - To SecureUid: 0x%x, From SecureUid: 0x%x", aEvent.iToSecureId, aEvent.iFromSecureId);
+ __ALFFXLOGSTRING3("CAlfBridge::HandleGfxEventL - To SecureUid: 0x%x, From SecureUid: 0x%x, effect %S", aEvent.iToSecureId, aEvent.iFromSecureId, aEvent.iEffectName);
__ALFFXLOGSTRING4("CAlfBridge::HandleGfxEventL - To layout: 0x%x, From layout: 0x%x, Effect handle: %d, Action: %d", aToLayout, aFromLayout, aEvent.iHandle, aEvent.iAction);
+
TInt err = KErrNone;
TBool failed = EFalse;
@@ -4559,7 +4597,7 @@
if (!HasActiveEffect(aToLayout, dummy))
{
__ALFFXLOGSTRING2("CAlfBridge::HandleGfxEventL - Add layout 0x%x with handle %d to cleanupstack", aToLayout, aEvent.iHandle);
- AddEffectItemL(aEvent.iHandle, aToLayout, NULL, NULL, EFalse, dummy, EFalse);
+ AddEffectItemL(aEvent.iHandle, aToLayout, NULL, NULL, EFalse, dummy, ETrue, EFalse);
}
}
// Screenshot was requested, but it could not be taken. Lets cancel the effect.
@@ -4581,6 +4619,11 @@
aToLayout->iOpacity.Set(0.0f); // these are meant for applications that are not yet ready to be drawn, but possible already on the foreground
FreezeLayoutUntilEffectDestroyedL(aFromLayout, aEvent.iHandle);
aEvent.iEffectType = CFullScreenEffectState::EStartEffect;
+ if (iSecondaryFullScreenEffectData)
+ {
+ iSecondaryFullScreenEffectData->iEffectType = CFullScreenEffectState::EStartEffect;
+ }
+
aEvent.iCanDestroyOrHideImmediately = ETrue; // enable hiding of windows during application start/activate effects
break;
}
@@ -4606,7 +4649,9 @@
if (!(aToLayout->Flags() & EHuiVisualFlagInactive))
{
TInt index;
- if (aToLayout->StoredRenderBuffer() && HasActiveEffect(aToLayout, index) && index != KErrNotFound)
+ if (aToLayout->StoredRenderBuffer()
+ && HasActiveEffect(aToLayout, index)
+ && index != KErrNotFound)
{
// a screenshot has been saved into the layout, and the layout was added to cleanupstack
// for cleaning. SetupEffectLayoutContainerL will add the same layout
@@ -4616,7 +4661,7 @@
}
// this will tag the visual, that they cannot be hidden by HandleVisualVisibility
// Initialize layout for the exit effect
- iLayoutInitializedForExitEffect = SetupEffectLayoutContainerL(aEvent.iHandle, aToLayout, ETrue, aEvent.iCanDestroyOrHideImmediately);
+ iLayoutInitializedForExitEffect = SetupEffectLayoutContainerL(aEvent.iHandle, aToLayout, ETrue, ETrue, aEvent.iCanDestroyOrHideImmediately);
__ALFFXLOGSTRING1("CAlfBridge::HandleGfxEventL - EBeginFullscreen - iLayoutInitializedForExitEffect: %d", iLayoutInitializedForExitEffect);
aEvent.iSetupDone = iLayoutInitializedForExitEffect;
}
@@ -4624,7 +4669,11 @@
{
iLayoutInitializedForExitEffect = EFalse;
aEvent.iSetupDone = EFalse;
- failed = ETrue;
+ failed = ETrue;
+ }
+ if (iSecondaryFullScreenEffectData)
+ {
+ iSecondaryFullScreenEffectData->iSetupDone = aEvent.iSetupDone;
}
return failed;
}
@@ -4645,6 +4694,17 @@
if (aToLayout)
{
+ // if this was timeout appstart effect, we need to take screenshot at this point.
+ // It was not taken in the beginfullscreen
+
+ if (aEvent.iLongAppStartTimeout)
+ {
+ __ALFFXLOGSTRING1("CAlfBridge::HandleGfxEventL - taking screenshot for the timeout appstart effect. Handle: %d", aEvent.iHandle );
+ aToLayout->SetStoredRenderBufferModificationsEnabled(ETrue);
+ TBool neededStoredBuffers(EFalse); // dummy
+ StoreLayoutIfRequiredByEffectL(aToLayout, aEvent, neededStoredBuffers);
+ }
+
aToLayout->iOpacity.Set(1.0f);
__ALFFXLOGSTRING1("CAlfBridge::HandleGfxEventL - loading effect, handle %d", aEvent.iHandle );
if (aEvent.iAction == AknTransEffect::EApplicationExit)
@@ -4658,7 +4718,11 @@
// add visuals to visual cleanupstack
aToLayout->SetStoredRenderBufferModificationsEnabled(EFalse);
TInt index;
- if (aToLayout->StoredRenderBuffer() && HasActiveEffect(aToLayout, index) && index != KErrNotFound)
+ if (aToLayout->StoredRenderBuffer()
+ && HasActiveEffect(aToLayout, index)
+ && index != KErrNotFound
+ && aEvent.iTwoPhaseEffect != CFullScreenEffectState::ESecondPartActive // effects second phase
+ )
{
// a screenshot has been saved into the layout, and the layout was added to cleanupstack
// for cleaning. SetupEffectLayoutContainerL will add the same layout
@@ -4666,7 +4730,16 @@
__ALFFXLOGSTRING1("CAlfBridge::HandleGfxEventL - Removing the layout 0x%x with screenshot from iEffectCleanupStack", aToLayout);
iEffectCleanupStack.Remove(index);
}
- layoutEffectable = SetupEffectLayoutContainerL(aEvent.iHandle,aToLayout, EFalse, aEvent.iCanDestroyOrHideImmediately);
+ if (aEvent.iTwoPhaseEffect == CFullScreenEffectState::ESecondPartActive || aEvent.iSetupDone)
+ {
+ // two phase effect, setup has been made with the first part of the effect.
+ // Only changing the effect is required.
+ layoutEffectable = ETrue;
+ }
+ else
+ {
+ layoutEffectable = SetupEffectLayoutContainerL(aEvent.iHandle,aToLayout, ETrue, EFalse, aEvent.iCanDestroyOrHideImmediately);
+ }
aEvent.iSetupDone = layoutEffectable;
aToLayout->SetStoredRenderBufferModificationsEnabled(ETrue);
}
@@ -4680,12 +4753,16 @@
engine->AddEffectToGroup(activeEffectGroup);
}
__ALFFXLOGSTRING1("CAlfBridge::HandleGfxEventL - Active effect group: %d", activeEffectGroup);
- effectFlags = KHuiFxDelayRunUntilFirstFrameHasBeenDrawn;
- if (FxmlHasOpaqueHint(iHuiEnv->EffectsEngine(), *aEvent.iEffectName))
+ effectFlags = KHuiFxDelayRunUntilFirstFrameHasBeenDrawn;
+ if (FxmlHasOpaqueHint(iHuiEnv->EffectsEngine(), *aEvent.iEffectName) ||
+ aEvent.iTwoPhaseEffect == CFullScreenEffectState::ESecondPartActive)
{
- // Performance improvement, but this would be better to be a special hint param in the fxml
effectFlags |= KHuiFxOpaqueHint;
}
+ if (iSecondaryFullScreenEffectData)
+ {
+ iSecondaryFullScreenEffectData->iSetupDone = ETrue;
+ }
if (aEvent.iRect != TRect())
{
@@ -4721,7 +4798,8 @@
}
}
}
- iLastAction = aEvent.iAction; // TODO: useless?
+
+ iAlfScreens[0]->SetVisualTreeVisibilityChanged(ETrue);
return failed;
}
@@ -4736,7 +4814,7 @@
// Freeze only, if buffer was reserved succesfully
aLayout->SetFreezeState(ETrue);
TBool itemsDestroyed;
- AddEffectItemL(aHandle, aLayout, NULL, NULL, EFalse, itemsDestroyed, EFalse);
+ AddEffectItemL(aHandle, aLayout, NULL, NULL, EFalse, itemsDestroyed, ETrue, EFalse);
iFullScreenEffectData->iAppStartScreenshotItemHandle = aHandle;
}
}
@@ -4784,6 +4862,8 @@
}
CleanupStack::PopAndDestroy( fxData );
+ delete iSecondaryFullScreenEffectData;
+ iSecondaryFullScreenEffectData = NULL;
__ALFFXLOGSTRING("CAlfBridge::HandleGfxStopEvent - END");
}
@@ -4889,6 +4969,8 @@
}
delete iFullScreenEffectData;
+ delete iSecondaryFullScreenEffectData;
+ iSecondaryFullScreenEffectData = NULL;
iFullScreenEffectData = fxData;
iFullScreenEffectData->iAppStartScreenshotItemHandle = fxData->iHandle;
@@ -4904,6 +4986,14 @@
// Client expects completion to be signalled with this handle.
iFullScreenEffectData->iCompletionHandle = stream.ReadInt32L();
+ if (iSecondaryFullScreenEffectData)
+ {
+ // Two phase effect path has been chosen. First part is now ongoing, and second part will be
+ // triggered after that. Client has now notified, that its screen is ready. We may trigger the
+ // second effect as soon as the first part finishes.
+ __ALFFXLOGSTRING("CAlfBridge::HandleGfxEffectsL - Trigger second part. when 1st part done.");
+ iSecondaryFullScreenEffectData->iCompletionHandle = iFullScreenEffectData->iCompletionHandle;
+ }
stream.Release();
return ;
@@ -4914,42 +5004,88 @@
// End fullscreen signal received. We proceed only if there is really
// effect ongoing and "end fullscreen" hasn't already been processed.
- if ( !iFullScreenEffectData || iFullScreenEffectData->iEndFullScreen )
- {
- __ALFFXLOGSTRING("CAlfBridge::HandleGfxEffectsL - END: fx ready");
+ if ( !iFullScreenEffectData
+ || iFullScreenEffectData->State() == EFinalEffectActive
+ || iFullScreenEffectData->State() == EEndFullscreenReceived)
+ {
+ if (iFullScreenEffectData)
+ __ALFFXLOGSTRING1("CAlfBridge::HandleGfxEffectsL - END: fx ready, state %d ", iFullScreenEffectData->State());
+ stream.Release();
return;
}
- // Load the whole structure. If timeout was triggered then request effect name
- // is updated.
- CFullScreenEffectState* fxData = new (ELeave) CFullScreenEffectState;
- CleanupStack::PushL( fxData );
- fxData->ConstructL( action, stream );
- iFullScreenEffectData->iTimeoutTriggered = fxData->iTimeoutTriggered;
- if (fxData->iTimeoutTriggered)
- {
- delete iFullScreenEffectData->iEffectName;
- iFullScreenEffectData->iEffectName = NULL;
- iFullScreenEffectData->iEffectName = fxData->iEffectName->AllocL();
+ CFullScreenEffectState* fxData = new (ELeave) CFullScreenEffectState;
+ CleanupStack::PushL( fxData );
+ fxData->ConstructL( KErrUnknown, stream );
+
+ TBool timeout = fxData->iTimeout;
+ // could the application be ready?
+ CHuiControlGroup* applicationExists = FindControlGroupByFullScreenToEffect();
+ TBool longAppStartTimeout = fxData->iLongAppStartTimeout;
+
+ if (iFullScreenEffectData &&
+ !iSecondaryFullScreenEffectData && // second part has not been requested yet
+ longAppStartTimeout && // this is indeed timeout for app start effect
+ iFullScreenEffectData->iTwoPhaseEffect == CFullScreenEffectState::EOnlyOnePart && // second part has not been activated. note, that iSecondaryFullScreenEffectData would be NULL in this case
+ (iFullScreenEffectData->State() == EWaitEndFullScreen
+ || iFullScreenEffectData->State() == EWaitingWindowGroup))
+ {
+ // Load the whole structure. If timeout was triggered then request effect name to be
+ // updated.
+ UpdateSecondaryEffectL(*fxData);
+ iFullScreenEffectData->iLongAppStartTimeout = fxData->iLongAppStartTimeout;
+ iFullScreenEffectData->iTwoPhaseEffect = CFullScreenEffectState::EFirstPartActive;
+ iFullScreenEffectData->iOperation = MAlfGfxEffectPlugin::EEndFullscreen;
+ }
+
+ __ALFFXLOGSTRING4("HandleGfxEffectsL - iTwoPhaseEffect %d, Setup done: %d, Timeout: %d, long app start timeout: %d", iFullScreenEffectData->iTwoPhaseEffect,iFullScreenEffectData->iSetupDone, timeout,longAppStartTimeout);
+ if (!fxData->iLongAppStartTimeout) // endfullscreen originating from the application
+ {
+ if (iFullScreenEffectData->State() == EWaitingWindowGroup)
+ {
+ iFullScreenEffectData->SetState(EEndFullScreenReceivedWaitingWindowGroup);
}
- CleanupStack::PopAndDestroy( fxData );
- fxData = NULL;
+ else
+ {
+ iFullScreenEffectData->SetState(EEndFullscreenReceived);
+ }
+
+ if (iSecondaryFullScreenEffectData)
+ {
+ iSecondaryFullScreenEffectData->SetState(EEndFullscreenReceived);
+ }
+
+ }
+ CleanupStack::PopAndDestroy( fxData );
+ fxData = NULL;
- __ALFFXLOGSTRING("HandleGfxEffectsL - process end");
- iFullScreenEffectData->iEndFullScreen = ETrue;
-
-#ifdef USE_APPLICATION_ENDFULLSCREEN_TIMEOUT
- if (iFullScreenEffectData->iDrawingCompleteTimer)
- {
- iFullScreenEffectData->iDrawingCompleteTimer->Cancel();
- }
-#endif
- stream.Release();
+ __ALFFXLOGSTRING4("CAlfBridge::HandleGfxEffectsL - Regular timeout: %d, Slow start timeout: %d, Effect setup: %d, State: %d",
+ timeout,
+ longAppStartTimeout,
+ iFullScreenEffectData->iSetupDone,
+ iFullScreenEffectData->State());
+
+ stream.Release();// We should respect normal timeouts.
+ if (iFullScreenEffectData->iTwoPhaseEffect > CFullScreenEffectState::EOnlyOnePart
+ && iFullScreenEffectData->iSetupDone && timeout && longAppStartTimeout) // timeout = endfullscreen was requested or it was normal endfullscreen timeout, longAppStartTime =
+ {
+ // If this is two phased effect, it can be started only by application request of endfullscreen (!timeout)
+ // or screen drawn (triggered from
+ __ALFFXLOGSTRING("HandleGfxEffectsL - Two phase effect. Waiting second part to start. Skip this event.");
+ return;
+ }
+
+ // If client triggered EndFullScreen has been received, and still we haven't seen sign of the application, we know
+ // things have gone wrong and will not go right. Clean up the mess.
+ if (iFullScreenEffectData->State() == EEndFullscreenReceived && !applicationExists && !timeout)
+ {
+ HandleGfxStopEvent(ETrue);
+ return;
+ }
}
CFullScreenEffectState* fxData = iFullScreenEffectData;
fxData->iOperation = operation;
- fxData->iWaitingWindowGroup = EFalse;
__ALFFXLOGSTRING3("CAlfBridge::HandleGfxEffectsL - Operation: %d, handle: %d, type: %d", operation, fxData->iHandle, fxData->iType);
__ALFFXLOGSTRING2("CAlfBridge::HandleGfxEffectsL - towg: %d, fromwg: %d", fxData->iToWg, fxData->iFromWg);
@@ -4984,11 +5120,16 @@
if (toLayout)
{
failed = HandleGfxEventL(*fxData, toLayout, fromLayout);
+ // We found layout, and this was beginfullscreen event. Wait for endfullscreen to be triggered
+ if (fxData->iOperation == MAlfGfxEffectPlugin::EBeginFullscreen)
+ {
+ iFullScreenEffectData->SetState(EWaitEndFullScreen);
+ }
}
else
{
__ALFFXLOGSTRING("HandleGfxEffectsL - waiting window group");
- fxData->iWaitingWindowGroup = ETrue;
+ fxData->SetState(EWaitingWindowGroup);
}
}
@@ -5020,13 +5161,33 @@
__ALFFXLOGSTRING("CAlfBridge::HandleGfxEffectsL - END");
}
+TBool CAlfBridge::UpdateSecondaryEffectL(const CFullScreenEffectState& aState)
+ {
+
+ __ALFFXLOGSTRING1("CAlfBridge::UpdateSecondaryEffectL - appstart timeout triggered: %d", aState.iLongAppStartTimeout);
+ if (aState.iLongAppStartTimeout) // only application start effects can trigger this timeout
+ {
+ // clone the primary startup effect for later usage
+ delete iSecondaryFullScreenEffectData;
+ iSecondaryFullScreenEffectData = new (ELeave) CFullScreenEffectState;
+ iSecondaryFullScreenEffectData->ConstructL(*iFullScreenEffectData);
+ iSecondaryFullScreenEffectData->iLongAppStartTimeout = EFalse;
+
+ delete iFullScreenEffectData->iEffectName;
+ iFullScreenEffectData->iEffectName = NULL;
+ iFullScreenEffectData->iEffectName = aState.iEffectName->AllocL();
+ }
+ __ALFFXLOGSTRING("CAlfBridge::UpdateSecondaryEffectL <<" );
+ return EFalse;
+ }
+
TBool CAlfBridge::GfxTriggerEffectWhenFullScreenDrawn(CHuiControlGroup* aToGroup)
{
if (!aToGroup || (aToGroup && aToGroup->Count() == 0))
{
return EFalse;
}
- iTempRegion.Clear();
+ iTempRegion.Clear();
CAlfScreen* screen = iAlfScreens[0];
TRect fullscreen = TRect(TPoint(0,0), screen->Size());
@@ -5043,6 +5204,16 @@
TBool opaque = ETrue; // in app start case the layout is propably not opaque. Fake it.
IsFullScreenDrawnRecursive(toLayout, *aToGroup, control, fullscreenCovered, fullscreen, screen, dummy, opaque, iAlfScreens[0]->iDisplay->Orientation());
fullscreenCovered = IsRectCoveredByRegion(fullscreen, iTempRegion);
+ // alf content check is relavant only for alf apps
+ if (!fullscreenCovered && aToGroup->iAlfApp)
+ {
+ TInt clientGroupId = FindClientWindowGroupId(0, *aToGroup);
+ if (clientGroupId != KErrNotFound)
+ {
+ fullscreenCovered = HasActiveAlfContent(clientGroupId);
+ }
+ }
+
__ALFFXLOGSTRING1("CAlfBridge::GfxTriggerEffectWhenFullScreenDrawn - Covered: %d", fullscreenCovered);
if (fullscreenCovered)
{
@@ -5196,8 +5367,10 @@
CHuiControl* aEffectControl,
TBool aInsertTemporaryVisual,
TInt& aItemDestroyed,
+ TBool aIsFullScreenEffect,
TBool aIsExitEffect,
- TBool aCanDestroyOrHideImmediately)
+ TBool aCanDestroyOrHideImmediately
+ )
{
CHuiCanvasVisual* temporaryPresenterVisual = NULL;
TInt enableEffect = ETrue;
@@ -5247,7 +5420,8 @@
temporaryPresenterVisual,
ETrue,
aIsExitEffect,
- aCanDestroyOrHideImmediately);
+ aCanDestroyOrHideImmediately,
+ aIsFullScreenEffect);
iEffectCleanupStack.AppendL(item);
}
else
@@ -5257,7 +5431,8 @@
TEffectCleanupStruct item = TEffectCleanupStruct(aEffectHandle,
aSourceVisual, NULL, EFalse,
aIsExitEffect,
- aCanDestroyOrHideImmediately);
+ aCanDestroyOrHideImmediately,
+ aIsFullScreenEffect);
iEffectCleanupStack.AppendL(item);
}
}
@@ -5270,6 +5445,7 @@
CHuiLayout* aTargetLayout,
CHuiControl* aEffectControl,
TInt& aItemsDestroyed,
+ TBool aIsFullScreenEffect,
TBool aAddLayout,
TBool aIsExitEffect,
TBool aCanDestroyOrHideImmediately)
@@ -5277,7 +5453,7 @@
__ALFFXLOGSTRING2("CAlfBridge::AddToEffectLayoutContainerL 0x%x is having %d children", aSourceLayout, aSourceLayout->Count());
if (aAddLayout)
{
- AddEffectItemL(aEffectHandle, aSourceLayout, aTargetLayout, aEffectControl, EFalse, aItemsDestroyed, aIsExitEffect, aCanDestroyOrHideImmediately);
+ AddEffectItemL(aEffectHandle, aSourceLayout, aTargetLayout, aEffectControl, EFalse, aItemsDestroyed, aIsFullScreenEffect, aIsExitEffect, aCanDestroyOrHideImmediately);
}
for (TInt i = 0; i < aSourceLayout->Count(); i++)
@@ -5287,10 +5463,10 @@
if (sourceVisual.Count())
{
CHuiLayout& layout = static_cast<CHuiLayout&> (aSourceLayout->Visual(i));
- AddToEffectLayoutContainerL(aEffectHandle, &layout, NULL, aEffectControl, aItemsDestroyed, EFalse,aIsExitEffect, aCanDestroyOrHideImmediately );
+ AddToEffectLayoutContainerL(aEffectHandle, &layout, NULL, aEffectControl, aItemsDestroyed, aIsFullScreenEffect, EFalse, aIsExitEffect, aCanDestroyOrHideImmediately );
}
TInt oldItemsDestroyed = aItemsDestroyed;
- AddEffectItemL(aEffectHandle, &sourceVisual, aTargetLayout, aEffectControl, EFalse, aItemsDestroyed, aIsExitEffect, aCanDestroyOrHideImmediately);
+ AddEffectItemL(aEffectHandle, &sourceVisual, aTargetLayout, aEffectControl, EFalse, aItemsDestroyed, aIsFullScreenEffect, aIsExitEffect, aCanDestroyOrHideImmediately);
if (oldItemsDestroyed != aItemsDestroyed)
{
// Visual was destroyed. If so, then we must adjust index.
@@ -5300,7 +5476,7 @@
__ALFFXLOGSTRING2("CAlfBridge::AddToEffectLayoutContainerL 0x%x end of children", aSourceLayout, aSourceLayout->Count());
}
-TBool CAlfBridge::SetupEffectLayoutContainerL(TInt aHandle,CHuiLayout* aSourceLayout, TBool aIsExitEffect, TBool aCanDestroyOrHideImmediately)
+TBool CAlfBridge::SetupEffectLayoutContainerL(TInt aHandle,CHuiLayout* aSourceLayout, TBool aIsFullScreenEffect, TBool aIsExitEffect, TBool aCanDestroyOrHideImmediately)
{
__ALFFXLOGSTRING4("CAlfBridge::SetupEffectLayoutContainerL - aHandle: %d, aSourceLayout: 0x%x, aIsExitEffect: % d, CanDestroyOrHideImmediately: %d >>",
aHandle,
@@ -5321,17 +5497,17 @@
// CHuiCanvasVisual* temporaryPresenterLayout = CHuiCanvasVisual::AddNewL( effectControlGroup, &effectControlGroupLayout);
// create presenter visual and set bindings
TInt itemsDestroyed(0);
- AddToEffectLayoutContainerL(aHandle, aSourceLayout, NULL, &effectControlGroup, itemsDestroyed, EFalse, aIsExitEffect, aCanDestroyOrHideImmediately);
+ AddToEffectLayoutContainerL(aHandle, aSourceLayout, NULL, &effectControlGroup, itemsDestroyed, aIsFullScreenEffect, EFalse, aIsExitEffect, aCanDestroyOrHideImmediately);
if (aIsExitEffect)
{
- CHuiCanvasVisual* temporaryPresenterVisual = AddEffectItemL(aHandle, aSourceLayout, &effectControlGroupLayout, &effectControlGroup, ETrue, itemsDestroyed, aIsExitEffect, EFalse);
+ CHuiCanvasVisual* temporaryPresenterVisual = AddEffectItemL(aHandle, aSourceLayout, &effectControlGroupLayout, &effectControlGroup, ETrue, itemsDestroyed, aIsFullScreenEffect, aIsExitEffect, EFalse);
aSourceLayout->SetFlag(EHuiVisualFlagDrawOnlyAsExternalContent);
__ALFFXLOGSTRING3("CAlfBridge::SetupEffectLayoutContainerL - adding handle: %d, 0x%x (source layout)-> 0x%x (presenter layout) to iEffectCleanupStack", aHandle, aSourceLayout, temporaryPresenterVisual);
}
else
{
- AddEffectItemL(aHandle, aSourceLayout, NULL, &effectControlGroup, EFalse, itemsDestroyed, EFalse, EFalse);
+ AddEffectItemL(aHandle, aSourceLayout, NULL, &effectControlGroup, EFalse, itemsDestroyed, aIsFullScreenEffect, EFalse, EFalse);
__ALFFXLOGSTRING2("CAlfBridge::SetupEffectLayoutContainerL - adding handle: %d, 0x%x (source layout), NO presenter layout) to iEffectCleanupStack", aHandle, aSourceLayout);
}
iAlfScreens[0]->iVisualTreeVisibilityChanged = ETrue;
@@ -5465,11 +5641,11 @@
aCanvasVisual->iOpacity.Set(KAlfVisualDefaultOpacity);
// visual->SetFlag(EHuiVisualFlagShouldBeHidden);
}*/
- layoutEffectable = SetupEffectLayoutContainerL(aEvent.iHandle, aCanvasVisual, ETrue, EFalse);
+ layoutEffectable = SetupEffectLayoutContainerL(aEvent.iHandle, aCanvasVisual, EFalse, ETrue, EFalse);
}
else
{
- layoutEffectable = SetupEffectLayoutContainerL(aEvent.iHandle, aCanvasVisual, EFalse, EFalse);
+ layoutEffectable = SetupEffectLayoutContainerL(aEvent.iHandle, aCanvasVisual, EFalse, EFalse, EFalse);
}
if (layoutEffectable)
{
@@ -5497,8 +5673,6 @@
// only use the effect if the effect file was correctly parsed
if (err == KErrNone)
{
- iLastEffectHandle = aEvent.iHandle;
-
#ifdef HUI_DEBUG_TRACK_DRAWING
visual->SetTracking(ETrue);
#endif
@@ -5528,8 +5702,18 @@
sourceViz2->FreeRenderBuffer();
}
sourceViz->ClearFlag(EHuiVisualFlagDrawOnlyAsExternalContent);
- TBool hideVisual = sourceViz->Flags() & EHuiVisualFlagShouldBeHidden;
- TBool showVisual = sourceViz->Flags() & EHuiVisualFlagShouldBeShown;
+ TBool hideVisual = EFalse;
+ TBool showVisual = ETrue;
+ if(!aEffectItem.iIsFullScreenEffect)
+ {
+ hideVisual = (sourceViz->Flags() & EHuiVisualFlagShouldBeHidden) || aEffectItem.iHideWhenFinished;
+ showVisual = (sourceViz->Flags() & EHuiVisualFlagShouldBeShown) && !aEffectItem.iHideWhenFinished;
+ }
+ else
+ {
+ hideVisual = (sourceViz->Flags() & EHuiVisualFlagShouldBeHidden);
+ showVisual = (sourceViz->Flags() & EHuiVisualFlagShouldBeShown);
+ }
TBool destroyVisual = sourceViz->Flags() & EHuiVisualFlagShouldDestroy;
TBool shouldInactivate = sourceViz->Flags() & EHuiVisualFlagShouldBeInactive;
TBool shouldBeUnderOpaqueHint = sourceViz->Flags() & EHuiVisualFlagShouldBeUnderOpaqueHint;
@@ -5803,6 +5987,38 @@
// around will be cleared when HandleGfxStopEffectsL is called
// iFinishedCleanupStackEffects.Append(aHandle);
+
+ // check if the first part of application start effect finished
+ if (iFullScreenEffectData
+ && iFullScreenEffectData->iHandle == aHandle
+ && iFullScreenEffectData->iLongAppStartTimeout && iSecondaryFullScreenEffectData)
+ {
+ delete iFullScreenEffectData;
+ iFullScreenEffectData = iSecondaryFullScreenEffectData;
+ iSecondaryFullScreenEffectData = NULL;
+ iFullScreenEffectData->iTwoPhaseEffect = CFullScreenEffectState::ESecondPartActive;
+ if (iFullScreenEffectData->State() == EEndFullscreenReceived)
+ {
+ // Client notified of the EndFullScreen during the effect. Trigger the end part immediately.
+ __ALFFXLOGSTRING("CAlfBridge::AlfGfxEffectEndCallBack - End was received. Trigger second part.");
+ iFullScreenEffectData->SetState(ESecondPhaseSetupActive); // effect setup will be skipped in HandleGfxEvent
+ GfxTriggerEndFullScreen(iFullScreenEffectData);
+ iFullScreenEffectData->SetState(EFinalEffectActive);
+ // skip cleanup. It will be run, when this effect finishes
+ return;
+ }
+ else
+ {
+ iFullScreenEffectData->SetState(EWaitEndFullScreen);
+ }
+
+ iFullScreenEffectData->iEffectType = CFullScreenEffectState::EStartEffect;
+
+ CHuiControlGroup* toGroup = FindControlGroupByFullScreenToEffect();
+ GfxTriggerEffectWhenFullScreenDrawn(toGroup);
+ return;
+ }
+
if (!iEffectEndTimer->IsActive())
{
TRAP_IGNORE(iEffectEndTimer->AddFinishedHandleL(aHandle));
@@ -5849,6 +6065,9 @@
{
delete iFullScreenEffectData;
iFullScreenEffectData = NULL;
+
+ delete iSecondaryFullScreenEffectData;
+ iSecondaryFullScreenEffectData = NULL;
}
}
@@ -5892,7 +6111,7 @@
TFileName processName = iCommandDebug->WServClientFileName( clientWindowGroupId, CHuiStatic::WsSession() );
#endif
- if (indexedGroup.Control(0).Role() == EAlfWindowGroupContainer)
+ if (indexedGroup.Control(0).Role() == EHuiWindowGroupContainer)
{
if (aRoster.ControlGroup(i).ResourceId() == iAlfWindowGroupNodeId)
{
@@ -5911,7 +6130,7 @@
#endif
}
}
- else if (indexedGroup.Control(0).Role() == EAlfSessionContainer)
+ else if (indexedGroup.Control(0).Role() == EHuiSessionContainer)
{
#ifdef HUI_DEBUG_TRACK_DRAWING
__ALFLOGSTRING2(">> %d ALF GROUP, %d", i, clientWindowGroupId);
@@ -5919,7 +6138,7 @@
__ALFLOGSTRING1(">> %d ALF GROUP", i);
#endif
}
- else if (indexedGroup.Control(0).Role() == EAlfWindowFloatingSpriteContainer)
+ else if (indexedGroup.Control(0).Role() == EHuiWindowFloatingSpriteContainer)
{
#ifdef HUI_DEBUG_TRACK_DRAWING
__ALFLOGSTRING3(">> %d FLOATING SPRITE GROUP %S, %d", i, &processName, clientWindowGroupId);
@@ -5927,7 +6146,7 @@
__ALFLOGSTRING1(">> %d FLOATING SPRITE GROUP", i);
#endif
}
- else if (indexedGroup.Control(0).Role() == EAlfFullScreenEffectContainer)
+ else if (indexedGroup.Control(0).Role() == EHuiFullScreenEffectContainer)
{
#ifdef HUI_DEBUG_TRACK_DRAWING
__ALFLOGSTRING3(">> %d EFFECT GROUP %S, %d", i, &processName, clientWindowGroupId );
@@ -5935,7 +6154,7 @@
__ALFLOGSTRING1(">> %d EFFECT GROUP", i);
#endif
}
- else if (indexedGroup.Control(0).Role() == EAlfFpsIndicatorContainer)
+ else if (indexedGroup.Control(0).Role() == EHuiFpsIndicatorContainer)
{
#ifdef HUI_DEBUG_TRACK_DRAWING
__ALFLOGSTRING3(">> %d FPS GROUP %S, %d", i, &processName, clientWindowGroupId );
@@ -6174,6 +6393,13 @@
}
iSwRenderingEnabled = aEnable;
+
+ AMT_MAP_SET_VALUE(
+ iBoolMap,
+ AMT_MAP_SW_ENABLED_HANDLE,
+ iSwRenderingEnabled,
+ EAlfModuleTestTypeBridgeGoom );
+
for (TInt i=0; i<iAlfScreens.Count();i++)
{
PrepareSwRenderingTarget(iAlfScreens[i]);
@@ -6282,6 +6508,13 @@
void CAlfBridge::SetLowMemory(TBool aEnabled)
{
iLowMemoryMode = aEnabled;
+
+ AMT_MAP_SET_VALUE(
+ iBoolMap,
+ AMT_MAP_LOW_MEMORY_MODE_HANDLE,
+ iLowMemoryMode,
+ EAlfModuleTestTypeBridgeGoom );
+
DoUpdateMemoryLevel();
}
@@ -6291,6 +6524,13 @@
TInt CAlfBridge::ForceSwRendering(TBool aEnabled)
{
iForcedSwRendering = aEnabled;
+
+ AMT_MAP_SET_VALUE(
+ iBoolMap,
+ AMT_MAP_FORCE_SW_HANDLE,
+ iForcedSwRendering,
+ EAlfModuleTestTypeBridgeGoom );
+
DoUpdateMemoryLevel();
return KErrNone;
}
@@ -6539,7 +6779,7 @@
__ALFFXLOGSTRING1("CAlfBridge::IsFullScreenDrawn : Group owner 0x%x", controlgroup.SecureId());
- if (control.Role() == EAlfFpsIndicatorContainer)
+ if (control.Role() == EHuiFpsIndicatorContainer)
{
// FPS container doesn't contain canvas visuals
continue;
@@ -6562,7 +6802,7 @@
}
// Dont mess with alf control group visuals, alf session handling does it for us
- if (control.Role() == EAlfSessionContainer)
+ if (control.Role() == EHuiSessionContainer)
{
CHuiLayout* hostContainer = control.ContainerLayout( NULL );
TInt flags = hostContainer->Flags();
@@ -6721,8 +6961,8 @@
// Sprites and effects as we consider them always as transparent and also
// if controlgroup is transformed somehow
- if (aControl.Role() == EAlfFullScreenEffectContainer
- || aControl.Role() == EAlfWindowFloatingSpriteContainer ||
+ if (aControl.Role() == EHuiFullScreenEffectContainer
+ || aControl.Role() == EHuiWindowFloatingSpriteContainer ||
aControlGroup.IsTransformed())
{
visualIsOpaque = EFalse;
@@ -6764,7 +7004,7 @@
CHuiControlGroup& controlgroup = screen->iDisplay->Roster().ControlGroup(j);
CHuiControl& control = controlgroup.Control(0);
- if (control.Role() == EAlfFpsIndicatorContainer || control.Role() == EAlfSessionContainer)
+ if (control.Role() == EHuiFpsIndicatorContainer || control.Role() == EHuiSessionContainer)
{
// FPS container doesn't contain canvas visuals and alfsession containers cannot have surfaces
continue;
@@ -6876,4 +7116,30 @@
}
}
+TBool CAlfBridge::HasActiveAlfContent( TInt aClientWgId )
+ {
+ TBool hasAlfContent = EFalse;
+ if(iAppUi)
+ {
+ CAlfAppSrvSessionBase* activeAlfSession = iAppUi->ActiveSession();
+ CAlfScreen* screen = iAlfScreens[0];
+ for(TInt i = 0 ; i < screen->iDisplay->Roster().Count() - screen->FixedControlGroupCount() ; i++)
+ {
+ CHuiControlGroup& controlgroup = screen->iDisplay->Roster().ControlGroup(i);
+ CHuiControl& control = controlgroup.Control(0);
+ if (control.Role() == EHuiSessionContainer)
+ {
+ CAlfAppSrvSessionBase* alfSrvSession = iAppUi->SrvSessionForControlGroup(controlgroup);
+ if(alfSrvSession &&
+ (alfSrvSession->ClientWindowGroup() == aClientWgId))
+ {
+ hasAlfContent = ETrue;
+ break;
+ }
+ }
+ }
+ }
+ return hasAlfContent;
+ }
+
// end of file