--- a/uiacceltk/hitchcock/ServerCore/Src/alfstreamerserver.cpp Wed Mar 31 23:03:58 2010 +0300
+++ b/uiacceltk/hitchcock/ServerCore/Src/alfstreamerserver.cpp Wed Apr 14 16:53:50 2010 +0300
@@ -149,7 +149,6 @@
iWindowHierarcy = CAlfHierarchyModel::NewL(*this);
iWindowMgr = CAlfWindowManager::NewL(iWindowHierarcy);
- iBridge->SetStreamerServer( *this );
iThemesListener = CThemeRepositoryListener::NewL();
iThemesListener->IssueRequest();
iRendezvous = new (ELeave) CAsyncCallBack(EPriorityHigh*3);
@@ -199,6 +198,16 @@
{
WindowMgr()->HandleClientExit(aClient->ThreadId());
}
+
+ for (TInt i = iSignals.Count()-1; i >= 0 ; i--)
+ {
+ if (iSignals[i].iSession == aClient)
+ {
+ // Don't complete because client is already being deleted
+ iSignals.Remove(i);
+ }
+ }
+
if (!iSessions)
{
// CActiveScheduler::Stop(); // TODO: lets not die, if client dies.
@@ -692,6 +701,28 @@
__ALFLOGSTRING("CAlfStreamerServer::GetListOfWGsHavingInactiveSurfacesL <<")
}
+void CAlfStreamerServer::AddSignal(CAlfStreamerServerSession* aSession, const RMessage2& aMessage)
+ {
+ TAlfSignal signal = { aSession, aMessage, aMessage.Int0(), aMessage.Int1()};
+ if (iSignals.Append(signal))
+ {
+ aMessage.Complete(KErrNoMemory);
+ }
+ }
+
+void CAlfStreamerServer::CompleteSignal(TInt aSignal, TInt aType)
+ {
+ for (TInt i = iSignals.Count()-1; i >= 0 ; i--)
+ {
+ if (iSignals[i].iHandle == aSignal && (iSignals[i].iFlags & aType))
+ {
+ iSignals[i].iMessage.Complete(iSignals[i].iHandle);
+ iSignals.Remove(i);
+ //break;
+ }
+ }
+ }
+
// ---------------------------------------------------------------------------
// constructor
// ---------------------------------------------------------------------------
@@ -846,7 +877,7 @@
}
case EAlfGetNativeWindowHandles:
{
- TPckgC<TAlfNativeWindowData> data(server->Bridge()->iAlfWindowData);
+ TPckgC<volatile TAlfNativeWindowData> data(server->Bridge()->iAlfWindowData);
aMessage.WriteL(0, data);
break;
}
@@ -907,7 +938,7 @@
}
case EAlfGetListOfWGsHavingInactiveSurfaces:
{
- server->GetListOfWGsHavingInactiveSurfacesL(aMessage, EFalse);
+ server->GetListOfWGsHavingInactiveSurfacesL(aMessage, aMessage.Int1());
break;
}
@@ -930,8 +961,24 @@
}
break;
}
-
-
+ case EAlfGetNumberOfActiveEffects:
+ {
+ if (server->Bridge()) // though always there
+ {
+ aMessage.Complete(server->Bridge()->iActiveEffectCount);
+ }
+ break;
+ }
+ case EAlfRequestSignal:
+ {
+ server->AddSignal(this, aMessage);
+ return;
+ }
+ case EAlfCompleteSignal:
+ {
+ server->CompleteSignal(aMessage.Int0(), aMessage.Int1());
+ break;
+ }
default:
{
aMessage.Complete(KErrNotSupported);