appfw/viewserver/inc/VWSERVER.H
changeset 0 2e3d3ce01487
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appfw/viewserver/inc/VWSERVER.H	Tue Feb 02 10:12:00 2010 +0200
@@ -0,0 +1,160 @@
+// Copyright (c) 1999-2009 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:
+//
+
+
+#ifndef __VWSERVER_H__
+#define __VWSERVER_H__
+
+#include <e32base.h>
+#include <w32std.h>
+
+#include "VWSAPPST.H"
+#include "VWSDEF.H"
+#include "VWSPRIV.H"
+#include "VWSDEBUG.H"
+#include <e32property.h>
+#include <startupdomaindefs.h>
+#include <ssm/ssmsubstates.hrh>
+#include <ssm/ssmstateawaresession.h>
+//
+// Forward declarations.
+//
+
+class CVwsLog;
+class CVwsServer;
+class CVwsSession;
+class CVwsEventQueue;
+class CVwsWServSessionHandler;
+class CVwsWServEventHandler;
+class CVwsWServRedrawer;
+class MVwsViewAdditionObserver;
+class MVwsDeactivationObserver;
+class MVwsActivationObserver;
+class MVwsSessionObserver;
+class CVwsServerEvent;
+class CVwsClientMessage;
+
+
+/**
+ * The CVwsServer class implements the view server.
+ */ 
+class CVwsServer : public CPolicyServer
+	{
+public:
+	IMPORT_C static CVwsServer* NewL(MVwsAppStarter& aAppStarter);
+public:
+	IMPORT_C ~CVwsServer();
+public: //from CServer2
+	virtual CSession2* NewSessionL(const TVersion& aVersion,const RMessage2& aMessage) const;
+public:
+	TName ClientName() const;
+	void SetSystemDefaultViewL(TInt aMode,const TVwsViewId& aViewId);
+	void GetSystemDefaultView(TVwsViewId& aViewId);
+	void ActivateViewL(const TVwsViewId& aViewId,CVwsClientMessage* aClientMessage,const RMessage2& aMessage,const CVwsSession& aSession,TVwsCompleteRequest aCompleteRequest);
+	void ActivateViewL(const TVwsViewId& aViewId,CVwsClientMessage* aClientMessage,const RMessage2& aMessage,const TThreadId& aClientThreadId,TVwsCompleteRequest aCompleteRequest);
+	CVwsSession* SessionByUid(const TUid& aAppUid);
+	CVwsSession* SessionByThreadId(const TThreadId& aThreadId);
+	CVwsSession* SessionByThreadIdAndAppUid(const TThreadId& aThreadId,const TUid& aAppUid);
+	CVwsSession* ActiveViewSession();
+	TVwsViewId ActiveView();
+	void SetActiveView(const TThreadId& aThreadId,const TVwsViewId& aViewId);
+	void ClearActiveView();
+	void SetViewAdditionObserver(MVwsViewAdditionObserver* aViewAdditionObserver);
+	void HandleScreenDeviceChangedL();
+	TInt StartApp(const TUid& aAppUid,TThreadId& aThreadId);
+	TInt CheckViewExists(const TThreadId& aThreadId,const TVwsViewId& aViewId);
+	TBool IsViewActive(const TVwsViewId& aViewId);
+	void RequestDeactivateActiveViewL(const RMessage2& aMessage,const CVwsSession& aSession,TVwsCompleteRequest aCompleteRequest);
+	void RequestAppStartL(const RMessage2& aMessage,const TUid& aAppToStart);
+	void HandleDeactivation(const TVwsViewId& aDeactivatedViewId, const TVwsViewId& aActivatedViewId);
+	void HandleActivation(const TVwsViewId& aActivatedViewId, const TVwsViewId& ViewIdToBeDeactivated);
+	void MakeInterceptingWindowVisible();
+	void MakeInterceptingWindowInvisible();
+	void MakeInterceptingWindowVisibleAndUpdateScreen();
+	TInt ScreenMode();
+	void HandleSessionViewAddition(const TVwsViewId& aViewId, const TThreadId& aNewViewClientThreadId);
+	TBool IsSystemDefaultView(const TVwsViewId& aViewId);
+	void HandleSessionRemoval(const TThreadId& aThreadId);
+	void SetClientRequestTimeOut(const TTimeIntervalMicroSeconds32& aDuration);
+	void SetServerEventTimeOut(const TTimeIntervalMicroSeconds32& aDuration);
+	void HandleLastServerEventOnQueue();
+	void HandleForegroundTaskChange();
+	void EnableServerEventTimeOut(TBool aEnable);
+	inline TBool IsServerEventTimeOutEnabled() const;
+	void PanicClient(TInt aPanic) const;
+	void GetPriorityForActiveObjectL(TInt& aPriority);
+	void EnableServerBlankScreen(TBool aEnable);
+	void SetCrossCheckUid(const RMessage2& aMessage);
+	TUid CrossCheckUid() const;
+	void SendCrossCheckToLauncherL(RWsSession& aWsSession, TInt aFgAppWgId, const TVwsViewId& aActiveView);
+	void KickStartEventQ();
+	void SetWindowBackgroundColor(const RMessage2& aMessage);
+	void GetCurrentActiveViewId(TVwsViewId& aActiveViewId);
+	TBool IsAppInForeground();
+	TBool InitializationFinished() const;
+	TInt IsPriorityBoostBeforePanicEnabled() const;
+	void  HandleInitializationFinished();
+	void  BoostPriority(CVwsSession* aClient);
+private:
+	CVwsServer(TInt aPriority,MVwsAppStarter& aAppStarter);
+	void ConstructL();
+	void CrossCheckForegroundTask();
+	TCustomResult CustomSecurityCheckL(const RMessage2& aMsg, TInt& aAction, TSecurityInfo& aMissing);
+private:
+	MVwsAppStarter& iAppStarter;
+	CVwsWServSessionHandler* iWServSessionHandler;
+	CArrayFixFlat<TVwsViewId> iSystemDefaultViewIdArray;
+	CVwsEventQueue* iEventQueue;
+	MVwsViewAdditionObserver* iViewAdditionObserver;
+	TTimeIntervalMicroSeconds32 iClientRequestTimeOut;
+	TTimeIntervalMicroSeconds32 iServerEventTimeOut;
+	TBool iForegroundChangeWhileEventsOutstanding;
+	TInt iIsServerEventTimeOutDisabled;
+#ifdef __DO_LOGGING__
+	TInt iNoActivationRequests;
+#endif
+	TInt iPrioritySet;
+	TBool iEnableServerBlankScreen;
+	TUid iCrossCheckUid;
+	TInt iEnableBoostAppPriorityBeforePanic;
+	TBool iInitializationFinished;
+	};
+
+NONSHARABLE_CLASS (CVwsStartupAware) : public CActive
+	{
+public:
+	CVwsStartupAware(CVwsServer& aServer);
+	~CVwsStartupAware();
+	TInt Start();
+		
+private:
+	void DoCancel();
+	void RunL();
+
+private:
+	CVwsServer& iServer;
+	RSsmStateAwareSession iStateAwareSession;
+	};
+
+//
+// Inlines
+//
+
+inline TBool CVwsServer::IsServerEventTimeOutEnabled() const
+	{ 
+	return (iIsServerEventTimeOutDisabled ? EFalse : ETrue);
+	}
+
+#endif