textinput/peninputarc/inc/pensrvcliinc/peninputserver.h
changeset 0 eb1f2e154e89
child 6 6ceef9a83b1a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/textinput/peninputarc/inc/pensrvcliinc/peninputserver.h	Tue Feb 02 01:02:04 2010 +0200
@@ -0,0 +1,1151 @@
+/*
+* Copyright (c) 2005-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:  Defination for peninput server
+*
+*/
+
+
+#ifndef C_CPENINPUTSERVER_H
+#define C_CPENINPUTSERVER_H
+
+//  INCLUDES
+#include <e32base.h>
+#include <w32std.h>
+#include <e32msgqueue.h>
+#include <peninputlayoutplugininterface.h>
+#include <peninputlayouteng.h>
+#include "peninputmsgqueue.h"
+#include <e32property.h>
+#include <centralrepository.h>
+
+#include "peninputcmdparamext.h"
+
+// the maximum count of TUpdateArea that area pool can hold
+const TInt KMaxRectNumInBuf = 100;
+class CCoeControl;
+class CPeninputAnimObj;
+class CPeninputUiLayoutOwner;
+class CPenUiWndCtrl;
+class CInternalBkCtrl;
+class CKeyRotator;
+class CPenInputCrpServiceClient;
+// panic code
+enum TPeninputServerPanic
+    {
+    EBadRequest = -2000,
+    EBadDescriptor,
+    EMainSchedulerError,
+    ESvrCreateServer,
+    ESvrStartServer,
+    ECreateTrapCleanup,
+    ENotImplementedYet,
+    ESessionTimeout,
+    ENullSession
+    };
+
+//#define __LOG_WNDGROU__
+
+// ==================== GLOBAL FUNCTIONS ====================
+
+/** 
+ * Function to panic the server
+ *
+ * @since S60 ?S60_version
+ * @param aPanic The panic id
+ */
+GLREF_C void PanicServer(TPeninputServerPanic aPanic );
+
+
+// CONSTANTS
+
+// FORWARD DECLARATIONS
+class CPeninputServerSession;
+class RMessage;
+class CEventQueue;
+class CPtiEngine;
+class CAknLayoutChangeWatcher;
+// DESCRIPTION
+/**
+ * Class MRawEventHandler
+ * Raw event handler interface
+ *
+ * @since S60 v4.0
+ */
+
+class MRawEventHandler
+    {
+public:
+    /**
+     * Handle event. Handle raw event from pen input animation
+     *
+     * @since S60 v4.0
+     * @param aEvent The event to be processed
+     */                
+    virtual void HandleRawEventL(const TRawEvent& aEvent) = 0 ;
+    };
+    
+    
+// DESCRIPTION
+/**
+ * The server class; an active object.
+ *
+ * Contains an instance of RServer; a handle to the kernel server representation which is used 
+ * to receive messages. 
+ *
+ * @since S60 v4.0
+ */
+
+NONSHARABLE_CLASS(CPeninputServer) : public CServer2, MRawEventHandler
+{
+public:
+    // reasons for server panic
+    // Constructors and destructor
+    /** 
+     * Epoc constructor. Leaves the created object on cleanup stack.
+     *
+     * @since S60 v4.0
+     */
+    static CPeninputServer* NewL();    
+    
+    /**
+     * Destructor
+     *
+     * @since S60 v4.0
+     */
+    virtual ~CPeninputServer();
+ 
+    /**
+     * Increase number of sessions
+     *
+     * @since S60 v4.0
+     */
+    void IncreaseSessionCount();
+
+    /**
+     * Decrease number of sessions
+     *
+     * @since S60 v4.0
+     * @param aSession The session to be closed.
+     */
+    void DecreaseSessionCount(CPeninputServerSession* aSession);
+
+    /**
+     * Handle client command
+     *
+     * @since S60 v4.0
+     * @param aMessage The client messasge
+     * @return Operation result code
+     */
+    TInt HandleCommandL(const RMessage2& aMessage);
+    
+    /**
+     * Handle client message
+     *
+     * @since S60 v4.0
+     * @param aMessage The client messasge
+     * @return KErrNone if operation successfully. Otherwise any operation 
+     *                  specified error
+     */
+    TInt HandleMessageL(const RMessage2& aMessage);
+    
+    /**
+     * Signal server obserer
+     *
+     * @since S60 v4.0
+     * @param aEventId The event id
+     * @param aEventData The event data
+     */
+    void SignalObserverL(TInt aEventId , const TDesC& aEventData);
+
+    /**
+     * Create ui layout
+     *
+     * @since S60 v4.0
+     * @param aLayoutId The layout id
+     * @return ETrue if creation successfully. Otherwise EFalse
+     */
+    TBool SetLayoutId(TInt aLayoutId);
+
+    /**
+     * Handling client sieze change event
+     *
+     * @since S60 v4.0
+     */
+    void SizeChanged();
+    
+    /**
+     * Change display mode
+     *
+     * @since S60 v4.0
+     * @param aMode The new display mode
+     * @param aMaskMode The new display mode for mask device
+     */    
+    void ChangeDisplayModeL(TDisplayMode aMode,TDisplayMode aMaskMode);
+    
+    /**
+     * Timer call back for CPeriod
+     *
+     * @since S60 v4.0
+     * @param aPtr The data passed to callback function
+     * @return The processed result. Always ETrue, not used here.
+     */  
+    static TInt FlushTimerCallBack(TAny *aPtr);    
+
+    /**
+     * Flush the window session. This causes all bufferd command sent to pen 
+     * input animation.
+     *
+     * @since S60 v4.0     
+     */      
+     void FlushWsSession();
+     
+    /**
+     * low priority construction.
+     *
+     * @since S60 v4.0     
+     */           
+    void DoIdleConstructL();
+    
+    /**
+     * Handle application resource change
+     *
+     * @since S60 v4.0     
+     * @param aType The event type
+     */               
+    void HandleResourceChange(TInt aType);
+    
+    /**
+     * Handle property change
+     *
+     * @since S60 v4.0     
+     * @param aData The event data
+     */                   
+    static TInt PropertyChangeCallBack(TAny* aData);
+    
+    /**
+     * Hide layout temporary
+     *
+     * @since S60 v4.0     
+     * @param aData The event data
+     */                       
+    void HideLayoutTemporaryL();    
+    void PrepareExit();
+    
+    /**
+     * Set new disabled layouts of current session
+     *
+     * @since S60 v4.0     
+     * @return KErrNone if everything ok.
+     */         
+    TInt SetDisabledLayouts( TInt aDisabledLayouts );
+    
+    /**
+     * Get new disabled layouts of current TProcessId
+     *
+     * @since S60 v4.0     
+     * @return KErrNone if everything ok.
+     */  
+    TInt GetProcessLayouts( const TProcessId& aProcessId, TInt& aLayouts );
+  
+    /**
+     * Set new disabled layouts of current TProcessId
+     *
+     * @since S60 v4.0     
+     * @return KErrNone if everything ok.
+     */  
+    TInt SetProcessLayouts( const TProcessId& aProcessId, TInt aLayouts);
+    
+    /**
+     * Delete new disabled layouts of current TProcessId
+     *
+     * @since S60 v4.0     
+     * @return KErrNone if everything ok.
+     */  
+    void DelProcessLayouts( const TProcessId& aProcessId );
+    //from base class CServer2
+
+    /** 
+     * From CServer2
+     * Create sesssion
+     *
+     * @since S60 v4.0
+     * @param aVersion server version
+     * @param aMessage Client message
+     * @return a CSharableSession instance
+     */
+    CSession2* NewSessionL(const TVersion& aVersion, const RMessage2& aMessage) const;
+    
+public: // From MRawEventHandler
+    /**
+     * From MRawEventHandler
+     * handle raw event
+     *
+     * @since S60 v4.0
+     * @param aEvent The event to be processed.
+     */    
+    void HandleRawEventL(const TRawEvent& aEvent);
+
+public: // handle layoutowner event
+    /** 
+     * Update the UI area
+     * @since S60 v4.0
+     * @param aRect The rect to be updated
+     * @param aFullUpdate Full update flag
+     * @param aImmedFlag Flags indicates immediately update
+     */
+    void UpdateArea(const TRect& aRect,TBool aFullUpdate, TBool aImmedFlag );
+
+    /**
+     * Set layout position
+     *
+     * @since S60 v4.0
+     * @param aNewPos The layout position
+     */
+    TPoint SetPosition(const TPoint& aNewPos);
+
+    /**
+     * Get bitmap context
+     *
+     * @since S60 v4.0
+     * @return The bitmap context
+     */
+    CBitmapContext* BitmapContext();
+
+    /**
+     * Get bitmap device
+     *
+     * @since S60 v4.0
+     * @return The bitmap device
+     */
+    CFbsBitmapDevice* BitmapDevice();
+
+    /**
+     * Get mask bitmap device
+     *
+     * @since S60 v4.0
+     * @return The mask bitmap device
+     */
+    CFbsBitmapDevice* MaskBmpDevice();
+
+    /**
+     * Show or hide sprite
+     *
+     * @since S60 v4.0
+     * @param aHideFlag ETrue if hide sprite, otherwise show.
+     */
+    void Hide(TBool aHideFlag=ETrue);
+
+    /**
+     * Signal owner that there is an event
+     *
+     * @since S60 v4.0     
+     * @param aEventType The event type
+     * @param aEventData The event data
+     */        
+    void SignalOwner(TInt aEventType, const TDesC& aEventData);
+
+    /**
+     * Handle layout size change event
+     *
+     * @since S60 v4.0
+     * @param aBut The character buffer
+     * @param aCtrlId The control which sends the data
+     */
+    TInt LayoutSizeChanged(const TSize& aSize, TBool aNeedUpdate = ETrue);
+    
+    /**
+     * Get layout position and it's rect.
+     * The position is relative to it's parent window or screen.
+     * The size includes all invisible layout area.
+     *
+     * @since S60 v4.0     
+     * @return layout position.
+     */       
+    TRect LayoutRect();    
+    
+    void ExecutePendingAnimCmd();
+  
+    void HandleWsEventL(const TWsEvent &aEvent, CCoeControl *aDestination);    
+    
+    TBool AnimOpNeedWaiting(TInt aSignalCode);
+
+    TInt HandleAppInfoChange(CPeninputServerSession* aSession,
+                            const TDesC& aAppInfo, TPeninputAppInfo aType) const;
+protected:  // New functions
+
+    /**
+     * Default constructor.
+     *
+     * @since S60 v4.0
+     * @param aPriority priority of the server
+     */
+    CPeninputServer( TInt aPriority );
+
+
+    //from base class CServer2
+    /**
+     * From CServer.
+     *Handles possible leaves in 
+     *
+     * @since S60 v4.0
+     * @param aError leave code of ServiceL()
+     * @return error code after error handling
+     */
+    TInt RunError( TInt aError );
+
+private:    // New functions
+                   
+    /**
+     * Second phase constructror.
+     *
+     * @since S60 v4.0
+     */
+    void ConstructL( );
+
+    /**
+     * Constructs the sprite anim ie. PENINPUT UI which is a window server plugin
+     *
+     * @since S60 v4.0
+     */
+    void ConstructSpriteL();
+    
+
+    /**
+     * Constructs the sprite anim ie. PENINPUT UI which is a window server plugin
+     *
+     * @since S60 v4.0
+     */
+    void ConstructAnimL();    
+
+    /**
+     * Creates bimaps for the sprite.
+     *
+     * @since S60 v4.0
+     * @param aBitmapSize size of the bitmap
+     * @param aDisplayMode display mode of the bitmap
+     * @return The initialized bitmap object (cleared to white)
+     */
+    CFbsBitmap* CreateBitmapL( const TSize& aBitmapSize, TDisplayMode aDisplayMode ) const;
+
+    /**
+     * Make peninput window visible
+     *
+     * @since S60 v4.0
+     */
+    void ActivateSprite();
+
+    /**
+     * Make peninput window visible
+     *
+     * @since S60 v5.0
+     * @param aScrMode The required screen mode
+     */
+    void ActivateSprite(TInt aScrMode);
+
+    /**
+     * Show pen UI in global notes editor.
+     *
+     * @since S60 v5.0
+     */
+    void ActivateSpriteInGlobalNotesL();
+    /**
+     * Make peninput window invisible
+     *
+     * @since S60 v4.0
+     * @param aImmediateHideFlag ETrue if UI is asked to be hidden immediately. Otherwise
+     * hidding is wait until UI observer handles the notification
+     */
+    void DeactivateSprite(TBool aImmediateHideFlag = EFalse, TBool aRotation = EFalse);
+
+    /**
+     * Deactivate pen ui, but not close the UI.
+     *
+     * @since S60 v4.0
+     * @param aWaitFlag Flag indicates whether operation should be waited until
+     * observer processed.
+     * @return ETrue if operation sucessfully.     
+     */    
+    TBool DeactivatePenUiLayout(TBool aWaitFlag);    
+
+    /**
+     * Deactivate pen ui, but not close the UI.
+     *
+     * @since S60 v4.0
+     * @param aWaitFlag Flag indicates whether operation should be waited until
+     * observer processed.
+     * @return ETrue if operation sucessfully.     
+     */    
+    TBool DeactivateDimPenUiLayout(TBool aWaitFlag); 
+
+    /**
+     * Activate pen ui, but not redraw/open the UI.
+     *
+     * @since S60 v4.0
+     * @param aWaitFlag Flag indicates whether operation should be waited until
+     * observer processed.
+     * @return ETrue if operation sucessfully.
+     */    
+    TBool ActivatePenUiLayout(TBool aWaitFlag, TBool aSkipDraw = EFalse);    
+    
+    /**
+     * Create UI layout.
+     *
+     * @since S60 v4.0
+     * @param aMessage The msg data from client
+     * @return KErrNone if layout is created. Otherwise KErrNoLayout.
+     */    
+    TInt CreateLayoutL(const RMessage2& aMessage );
+
+    /**
+     * Clear the sprite
+     *
+     * @since S60 v4.0
+     */        
+    void ClearSpriteGc();
+    
+    /**
+     * Draw sprite. It will draw the UI layout
+     *
+     * @since S60 v4.0
+     */        
+    void DrawSprite();
+    /**
+     * Get the session represents the foreground application
+     *
+     * @since S60 v4.0
+     * @return The session represents foregound application
+     */
+    //CPeninputServerSession* ForegroundSession();
+    
+    /**
+     * Get IME plugin implementation id list.
+     *
+     * @since S60 v4.0
+     * @param aMessage The msg data from client
+     * @return None.
+     */    
+    void GetImePluginIdListL(const RMessage2& aMessage);
+    
+    /**
+     * Get touch input support language lists.
+     *
+     * @since S60 v4.0
+     * @param aMessage The msg data from client
+     * @return None.
+     */    
+    void GetPenSupportLanguagesL(const RMessage2& aMessage);
+    
+    /**
+     * Set the fore ground ui handler which handles the UI notification.
+     * 
+     * @since S60 v4.0
+     */
+    void SetForeGroundUiHandlerL();
+    
+    /**
+     * Get support input mode
+     * 
+     * @since S60 v4.0
+     */
+    TInt GetSupportModeL();
+
+#ifdef RD_TACTILE_FEEDBACK    
+    /**
+     * Add feedback area.
+     * 
+     * @since S60 v4.0
+     * @param aAreaData The area data
+     */    
+    void AddFeedbackArea(const TTactileFeedbackArea& aAreaData);
+    
+    /**
+     * Remove feedback area.
+     * 
+     * @since S60 v4.0
+     * @param aAreaData The area data     
+     */        
+    void RemoveFeedbackArea(const TTactileFeedbackArea& aAreaData);
+    
+    /**
+     * Change feedback area.
+     * 
+     * @since S60 v4.0
+     * @param aAreaData The area data     
+     */        
+    void ChangeFeedbackArea(const TTactileFeedbackArea& aAreaData);
+
+    /**
+     * Change feedback type.
+     * 
+     * @since S60 v4.0
+     * @param aAreaData The area data     
+     */        
+    void ChangeFeedbackType(const TTactileFeedbackArea& aAreaData);    
+    
+    /**
+     * Find the feedback area.
+     * 
+     * @since S60 v4.0
+     * @param aArea The area data
+     */                    
+    TInt FindFeedbackArea(const TTactileFeedbackArea& aArea);
+    
+    /**
+     * converter event data to feedback area data.
+     * 
+     * @since S60 v4.0
+     * @param aAreaData The area data     
+     */                
+    inline TTactileFeedbackArea FeedbackData(const TDesC& aAreaData)
+        {
+        return *(reinterpret_cast<const TTactileFeedbackArea*>(aAreaData.Ptr()));
+        }
+#endif // RD_TACTILE_FEEDBACK
+
+    //bug fix for missing simulated key up event when UI is closed.
+    void RecoverSimulatedKeyEventState(); 
+    
+    void RecoverButtonEventState();       
+
+    /**
+     * Add a new TUpdateArea to area pool, and make sure if area pool is full,
+     * it's sent to sprite for updating
+     * 
+     * @since S60 v4.0
+     * @param aArea The area data
+     * @return None
+     */
+    void AddFlushArea(const TUpdateArea& aArea);    
+
+    /**
+     * Make sure if area pool is full, it's sent to sprite for updating
+     * 
+     * @since S60 v4.0
+     * @return None     
+     */
+    void EnsureUpdateBuffer();
+
+    void DimPenUiWnd(TBool aFlag);
+    
+    void CleanAll();
+    
+    void PackFlushArea();
+
+    /**
+     * Request to enable or disable window group change event
+     * 
+     * @since S60 v5.0
+     * @param aMonitorFlag ETrue indicates to request events. Default value is ETrue
+     */    
+    void MonitorWsGroupEvent(TBool aMonitorFlag = ETrue);
+
+    /**
+     * Tests whether two sessions from same process.
+     * 
+     * @since S60 v5.0
+     * @param aSession1 The session to be tested
+     * @param aSession2 The session to be tested
+     * @return ETrue if they are from same process, otherwise, EFalse.
+     */                
+    inline TBool IsSameProcess(CPeninputServerSession* aSession1,
+                                        CPeninputServerSession* aSession2) const;
+    
+    /**
+     * Tests whether a given session is foreground session.
+     * 
+     * @since S60 v5.0
+     * @param aSession The session to be tested
+     * @return ETrue if it's foreground session, otherwise, EFalse.
+     */        
+    inline TBool IsForegroundSession(CPeninputServerSession* aSession) const;
+    
+    /**
+     * Set up the size of drawing device
+     * 
+     * @since S60 v5.0
+     * @param aSize The new size
+     */            
+    void ResizeDrawingDevice(const TSize& aSize);
+    
+    void DimPenUiForMenu(TInt aPriority);
+    void BackgroudDefaultOri( TInt aOri );
+    void DimPenInternalUi(TBool aFlag,TInt aPriority);
+    void DimPenUi();
+    void CheckSessionValidL(CPeninputServerSession* aSession1,
+                            CPeninputServerSession* aSession2) const;
+    
+public:    
+    TInt DisabledByDSA(); 
+    TInt DisabledByDSAFromAnim();   
+    TInt DisabledByOrientation();
+    
+private:    // Data
+
+    /** 
+    /** 
+     * Number of connected client sessions. 
+     */
+    TInt iSessionCount;
+
+
+    /** 
+     * Sprite member of iSprite containing bitmap and mask 
+     */
+    TSpriteMember iSpriteMember;
+    
+    /** 
+     * Id of the client thread that activated PENINPUT last 
+     */
+    TInt iForegroundAppId;    
+
+    /** 
+     * Semaphore that make the key event handling to be critical section
+     */
+    RSemaphore iKeyEventSemaphore;
+    /**
+     * the sprite active flag
+     */
+    TBool iActive ; 
+    
+    /**
+     * Display mode. Defualt value = EColor16MU
+     */
+    TDisplayMode iDispMode;
+    
+    /**
+     * Display mode for mask device. By default it's the same as display mode
+     */
+    TDisplayMode iDispModeForMask;    
+    
+    /**
+     * current layout id
+     */
+    TUid iLayoutId;   
+
+    /** 
+     * Current sprite size
+     */
+    TSize iSpriteSize;    
+    
+    /** 
+     * Current position of the sprite 
+     */
+    TPoint iSpritePosition;
+    /**
+     * event queue for key response. Pen input server needs send the 
+     * key event response immediately.
+     */    
+    RMsgQueue<TBool> iKeyMsgResponseQueue;
+    
+    /**
+     * The rect to be updated.
+     */
+    TUpdateArea iFlushArea[KMaxRectNumInBuf];
+
+    /**
+     * Flag tells whether full rect updating needed.
+     */ 
+    TBool iFullUpdate;    
+
+    /**
+     * Window server animation client id.
+     */    
+    CPeninputServerSession* iForegroundSession;
+
+    /**
+     * Layout engine
+     * Own
+     */
+    CFepLayoutEngine* iLayoutEng;
+
+    /**
+     * Current ui layout
+     */
+    MPenUiLayoutBase* iUiLayout;
+    
+    /** 
+     * Bitmap device for sprite 
+     * Own
+     **/
+    CFbsBitmapDevice *iBitmapDevice;
+    /** 
+     * Bitmap device for spite mask 
+     * Own
+     */
+    CFbsBitmapDevice *iMaskBitmapDevice;
+
+    /** 
+     * Graphics context for sprite 
+     * Own
+     */
+    CFbsBitGc *iSpriteGc; 
+    
+    /** 
+     * Window GC. Used for window based control to draw content.
+     * Own
+     */    
+    CWindowGc* iWindowGc;
+    
+    /** 
+     * Server application GC. It's used to keep the original window GC.
+     * Not Own
+     */    
+    CWindowGc* iAppGc; 
+    
+    /** 
+     * event queue for pointer event
+     */    
+    CEventQueue* iEventBufferQueue;
+        
+    /**
+     * Timer to flush the window session command
+     */
+    CPeriodic* iFlushTimer;   
+    
+    /**
+     * Ptiengine
+     */
+    CPtiEngine* iPtiEngine;
+    
+    /**
+     * Previous ui layout  -- Not used now
+     */
+    //MPenUiLayoutBase* iPrevUiLayout;
+
+    CPeninputUiLayoutOwner* iLayoutOwner;	    
+    /**
+     * Previous layout id
+     */
+    TUid iPrevLayoutId;   
+    
+    /**
+     * Flag indicating whether layout is active when Hide is called. It's used
+     * to restore the state.
+     */
+    TBool iPrevActive;    
+    /**
+     * Watcher to monitor the screen dynamically changing.
+     */    
+    CAknLayoutChangeWatcher* iHardwareLayoutChangeWatcher;       
+    
+    /**
+     * Watcher to monitor the screen layout changing which is caused by touch pane
+     */        
+    CAknLayoutChangeWatcher* iSoftwareLayoutChangeWatcher; 
+    
+    /**
+     * Foreground UI handler which will handle pen ui activattion/deactivation event.
+     */            
+    CPeninputServerSession* iForegroundUiHandler;
+    
+    /**
+     * Ui handler list. See iForegroundUiHandler.
+     */            
+    RArray<CPeninputServerSession*> iUiHandlerArray;
+    
+    /**
+     * Pen input animation object which managers different animation command
+     */                
+    CPeninputAnimObj* iAnimObj;												
+    
+    /**
+     * Pen UI ready flag.
+     */
+    TInt iUILayoutReady;     
+     
+    /**
+     * Flag tells whether tactile feedback is supported.
+     */     
+    TBool iSupportFeedback;
+    
+#ifdef RD_TACTILE_FEEDBACK     
+    /**
+     * Array of feedback area 
+     */          
+    RArray<TTactileFeedbackArea> iFeedbackAreaArray;       
+#endif // RD_TACTILE_FEEDBACK    
+    /**
+     * Record the last key event simulated by pen UI
+     */          
+    TRawEvent iLastSimulatedKeyEvent;
+    
+    /**
+     * The CCoeControl where the pen UI is bitblted.
+     */              
+    CPenUiWndCtrl* iPenUiCtrl;
+    
+    /**
+     * The CCoeControl which acts as the parent of all child controls in the pen UI. 
+     */              
+    CInternalBkCtrl* iInternalBackgroundCtrl; 
+    
+    /**
+     * Flag tells whether pen UI is shown in sprite or CCoeControl 
+     */              
+    TBool iUseWindowCtrl;
+    
+    /**
+     * Flag tells whether current pen UI is opaque. 
+     */              
+    TBool iOpaqueUi;
+
+    // TUpdateArea count in area pool
+    TInt iCurRectNumInBuf;
+
+    RArray<TProcessId> iClientProcess;
+    RArray<TInt> iClientLayouts; 
+    TBool iDimmed;
+    /**
+     * Flag tells whether currently app is globle notes app
+     */          
+    TBool iInGlobalNotesApp; 
+    
+    /**
+     * Flag tells whether currently global notes is shown. This is used in Finger UI case, where finger UI is asked 
+     * to dimmed instead of closed when global notes shown.
+     */     
+    TBool iInGlobalEditorState;
+    
+    /**
+     * Record previous active window group which is not global notes. 
+     */             
+    TInt iPreNonGloebalNotesWndGrpId;
+    
+    /**
+     * current global notes app id. 
+     */              
+    TInt iCurGlobalNotesId;
+    
+    /**
+     * Flag tells whether cleanning needed durint destruction to avoid unnecessary clear
+     */         
+    TBool iNoNeedClean; 
+    /**
+     * Focused window group id in current screen
+     */             
+    TInt iCurScreenFocusedWndGrpId; 
+    
+    /**
+     * Flag indicating the layout is being destroyed/
+     */
+    TBool  iDestroyingLayout;
+
+    /**
+     * Current screen mode
+     */
+    TInt iCurScrMode;    
+    
+    TInt iBackgroudDefaultOri;
+    
+    TBool iInGlobalNotesState;
+    
+    TBool iResourceChange;
+    
+    TRawEvent iLastRawEvent;
+            
+#ifdef __WINS__
+    TBool iCloseServer;
+#endif
+
+#ifdef __LOG_WNDGROU__ 
+    RFile iLogFile;
+#endif  
+    CPenInputCrpServiceClient* iCrpService;
+    //TBool iUiLayoutChange;
+    CRepository* iSensorRepository;
+    
+    TInt iInputLanguage;
+    };
+
+/**
+ * Class CEventQueue
+ * Event message queue. It's an active object.
+ *
+ * @since S60 v4.0
+ */
+
+class CEventQueue : public CActive
+    {
+public:
+    /** 
+     * factory constructor. 
+     *
+     * @since S60 v4.0
+     * @param aHandler The event handler.
+     * @param aName The event queue global name
+     * @return The created messge queue object
+     */   
+    static CEventQueue* NewL(MRawEventHandler* aHandler,const TDesC& aName);
+    /** 
+     * desstructor. 
+     *
+     * @since S60 v4.0
+     */       
+    ~CEventQueue();
+    
+    /** 
+     * Request event.
+     *
+     * @since S60 v4.0
+     */      
+    void GetEvent();
+    
+protected:
+    /** 
+     * 2nd phase constructor.
+     *
+     * @since S60 v4.0
+     * @aName The message queue name
+     */      
+     void ConstructL(const TDesC& aName);
+    /** 
+     * Default construcotr.
+     *
+     * @since S60 v4.0
+     * @aHandler The event handler
+     */         
+    CEventQueue(MRawEventHandler* aHandler);
+    
+    //From CActive        
+    /**
+     * From CActive
+     * Called when there is event in the queue
+     *
+     * @since S60 v4.0
+     */
+    void RunL();
+
+    /**
+     * From CActive
+     * will be called if RunL leaves
+     *
+     * @since S60 v4.0
+     * @param aError The error number
+     */
+    TInt RunError(TInt aError);
+
+    /**
+     * From CActive
+     * will be called when Cancel is issued
+     *
+     * @since S60 v4.0
+     */
+    void DoCancel();
+
+private:
+    /**
+     * Message buffer queue
+     */    
+    RMsgQueue<TRawEventBuffer> iMsgBufQueue;    
+    
+    /**
+     * Event handler
+     */       
+    MRawEventHandler* iHandler;
+    };
+
+
+/**
+ * CAknLayoutChangeWatcher
+ * Watcher to monitor the screen dynamical changing.
+ *
+ * @since S60 v4.0
+ */    
+class CAknLayoutChangeWatcher : public CActive
+    {
+public:
+    /** 
+     * factory constructor. 
+     *
+     * @since S60 v4.0
+     * @param aHandler The event handler.
+     * @param aKey The property key
+     * @return The created watcher
+     */   
+    static CAknLayoutChangeWatcher* NewL(CPeninputServer* aHandler, TUint aKey);
+    
+    /** 
+     * desstructor. 
+     *
+     * @since S60 v4.0
+     */       
+    ~CAknLayoutChangeWatcher();
+    
+    /** 
+     * Start monitoring.
+     *
+     * @since S60 v4.0
+     */      
+    void StartWatching();
+    
+protected:
+    /** 
+     * Default construcotr.
+     *
+     * @since S60 v4.0
+     * @aHandler The event handler
+     */         
+    CAknLayoutChangeWatcher(CPeninputServer* aHandler,TUint aKey);
+    
+    //From CActive        
+    /**
+     * From CActive
+     * Called when there is event in the queue
+     *
+     * @since S60 v4.0
+     */
+    void RunL();
+
+    /**
+     * From CActive
+     * will be called if RunL leaves
+     *
+     * @since S60 v4.0
+     * @param aError The error number
+     */
+    TInt RunError(TInt aError);
+
+    /**
+     * From CActive
+     * will be called when Cancel is issued
+     *
+     * @since S60 v4.0
+     */
+    void DoCancel();
+
+private:
+    /**
+     * Event handler. Pen input server shall handle the chaning event.
+     */       
+    CPeninputServer* iHandler;
+    
+    /**
+     * The property to be monitored.
+     */           
+    RProperty iProperty;
+
+    /**
+     * The Ui layout state.
+     */           
+    TInt iLayoutState;
+
+    /**
+     * The orientation state.
+     */           
+    TInt iOrientationState;
+    };
+    
+#endif //C_CPENINPUTSERVER_H
+
+// End of File