diff -r 000000000000 -r 15bf7259bb7c uiacceltk/hitchcock/ServerCore/Inc/alfstreamerserver.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/uiacceltk/hitchcock/ServerCore/Inc/alfstreamerserver.h Tue Feb 02 07:56:43 2010 +0200 @@ -0,0 +1,149 @@ +/* +* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Server declaration, internal for Nokia +* +*/ + + + +#ifndef __ALF_STREAMER_SERVER_H__ +#define __ALF_STREAMER_SERVER_H__ + +#include "graphics/surface.h" +#include "themerepositorylistener.h" + +class CAlfStreamerServerSession; +class CAlfStreamerBridge; +class CAlfWindowManager; +class CAlfHierarchyModel; +class TSurfaceId; + +NONSHARABLE_CLASS(CAlfStreamerServer): public CServer2 + { +public: + static TInt LaunchServer(TThreadId& aThreadId, CAlfStreamerBridge* aBridge ); + static void NewLC(CAlfStreamerBridge* aBridge); + ~CAlfStreamerServer(); + void HandleClientExit(const CSession2* aClient); + CAlfWindowManager* WindowMgr() + { + return iWindowMgr; + } + CAlfStreamerBridge* Bridge() + { + return iBridge; + } + + CAlfHierarchyModel* WindowTree() + { + return iWindowHierarcy; + } + + /** composition control **/ + void AppendCompositionSessionL(CAlfStreamerServerSession* aSession, TBool aHost = EFalse ); + void RemoveCompositionSession(CAlfStreamerServerSession* aSession); + void HandleCompositionRequestL(CAlfStreamerServerSession* aSession, TInt aOp, const RMessage2& aMessage); + void QueueRequestForSessionL(CAlfStreamerServerSession* aSession, const TPtrC8& aPtr, TInt aOp); + void QueueRequestAllSessionsL(const TPtrC8& aPtr, TInt aOp, TBool aAlsoWserv = EFalse); + void HandleCompositionEventL(CAlfStreamerServerSession* aSession, TInt aOp, const RMessage2& aMessage); + + TInt CreatePermissionToken(const RMessage2& aMessage, TInt aTarget, CAlfStreamerServerSession* aSession); + void ValidateToken(CAlfStreamerServerSession* aSession, const RMessage2& aMessage); + + void FreeCompositionSessionExtents(CAlfStreamerServerSession* aSession); + +private: + void ConstructL(); + + CAlfStreamerServer( CAlfStreamerBridge* aBridge): + CServer2(CActive::EPriorityStandard), iBridge(aBridge){} + + CSession2* NewSessionL(const TVersion& aVersion,const RMessage2& aMessage) const; + + CAlfStreamerServerSession* WservSession(TInt aScreenNumber); + +private: + CAlfStreamerBridge* iBridge; // not owned + mutable TUint iSessions; + CAlfWindowManager* iWindowMgr; + CAlfHierarchyModel* iWindowHierarcy; + CThemeRepositoryListener* iThemesListener; + + RPointerArray iCompositionSessions; + RPointerArray iCompositionHostSessions; + RPointerArray iWindowServerSessions; + + class CCompositionToken : public CBase + { + public: + + /* + * CCompositionToken is used by CAlfCompositionSource and CAlfCompositionHost + * for maintaining layer sharing permissions. + */ + CCompositionToken( TInt aKey, TInt aSecretKey, TInt aFlags, TInt aTarget, TInt aScreenNumber, TBool aCombinedTarget = EFalse) : + iKey(aKey), + iSecretKey(aSecretKey), + iFlags(aFlags), + iTarget(aTarget), + iScreenNumber(aScreenNumber), + iCombinedTarget(aCombinedTarget){}; + + TInt iKey; + TInt iSecretKey; + TInt iFlags; + TInt iTarget; + TInt iScreenNumber; + TBool iCombinedTarget; + }; + + RArray iCompositionTokens; + CAsyncCallBack * iRendezvous; + }; + +NONSHARABLE_CLASS(CAlfStreamerServerSession): public CSession2 + { +public: + CAlfStreamerServerSession(); + ~CAlfStreamerServerSession(); + void ServiceL(const RMessage2& aMessage); + void HandleCompositionOpL(TInt aOp, const RMessage2& aMessage, CAlfStreamerServer* aServer); + RMessagePtr2& MessagePtr() + { + return iMessagePtr; + } + TBool CompletedFromQueue(const RMessage2& aMessage); + void QueueL(const TPtrC8& aPtr, TInt aCmd); + + void SetScreenNumber(TInt aScreennumber); + TInt ScreenNumber() const; + TSurfaceId& ExtentSurfaceId(); + +private: + RArray iLoadedPlugins; + RArray iCmds; + RPointerArray iQueue; + TBool iIsListeningCompositionEvents; + RMessagePtr2 iMessagePtr; + + // Number of the screen where composition client has its window. + // KErrNotFound if composition client does not have a window at all. + TInt iScreenNumber; + + // Surface id of the composition client. If composition client has set extent to some other screen than where its actual window is. + // This is used to identify layers created for this composition client + TSurfaceId iExtentSurfaceId; + }; + +#endif