diff -r 000000000000 -r 5d03bc08d59c windowing/windowserver/nga/SERVER/windowgroup.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/windowing/windowserver/nga/SERVER/windowgroup.h Tue Feb 02 01:47:50 2010 +0200 @@ -0,0 +1,229 @@ +// Copyright (c) 2006-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: +// CWsWindow and associated classes definitions +// +// + +#ifndef __WINDOWGROUP_H__ +#define __WINDOWGROUP_H__ + +#include "server.h" +#include "tcursor.h" + +class CWsWindowGroup : public CWsWindowBase, public MWsWindowGroup + { +private: + enum {EMaxIdentifierCount=10000}; // Could go as high as the highest signed int, but this would be impractical to test + enum TGroupWindowFlags { + EGroupFlagDisableKeyClick=0x01, + EGroupFlagReceivesFocus= 0x02, + EGroupFlagAutoForeground= 0x04, + EGroupFlagHandlesDeviceChange= 0x08, + EGroupFlagScreenDeviceDeleted= 0x10, + EGroupFlagMsgQueueActive= 0x20, + EGroupFlagMsgQueueNew= 0x40, + EGroupFlagMessageSignalled= 0x80, + }; +public: + static CWsWindowGroup* NewL(CWsClient* aOwner, CScreen* aScreen, + const TWsClCmdCreateWindowGroup& aCmd); + ~CWsWindowGroup(); +private: + CWsWindowGroup(CWsClient* aOwner,CScreen* aScreen); + void ConstructL(const TWsClCmdCreateWindowGroup &aCmd); +public: // virtual functions from CWsObject + void CommandL(TInt aOpcode, const TAny *aCmdData); +public: // virtual functions from CWsWindowBase + TPoint Origin() const; + TRect AbsRect() const; + TSize Size() const; + void SendState(MWsWindowTreeObserver& aWindowTreeObserver) const; + void SendStateWindowGroupChain(MWsWindowTreeObserver& aWindowTreeObserver) const; + +public: // virtual functions from MWsWindowGroup + TInt Identifier() const; + TPtrC Name() const; + TBool IsFocusable() const; + TInt OrdinalPriority() const; + const MWsClient * Client() const; + +public: + CWsTopClientWindow *Child() const; + inline CWsWindowGroup *PrevSibling() const; + inline CWsWindowGroup *NextSibling() const; + CWsRootWindow *Parent() const; + virtual void AreaCovered(TRegion &aRegion); + void UpdateOrdinalPriority(TBool aDoAdjust); + void LostFocus(); + void ReceivedFocus(); + inline RWsTextCursor *TextCursor(); + inline TBool ReceivesFocus() const; + static TInt NumWindowGroups(TBool aAllPriorities, TInt aPriority); + static TInt SendWindowGroupListAndChainL(TBool aAllPriorities, TInt aPriority, TInt aCount); + static TBool SendEventToAllGroups(TBool aAllPriorities,TBool aOnePerClient,const TWsClCmdSendEventToWindowGroup& aData); + static void SendMessageToAllGroupsL(CWsClient& aSender,TBool aAllPriorities,const TWsClCmdSendMessageToWindowGroup& aData); + static void GetFocusWindowGroupL(); + static void ReleasePendedMessagesToAllGroups(CWsClient * aClient); + virtual void SetOrdinalPosition(TInt pos); + TBool SetOrdinalPosition(TInt pos,CWsWindowGroup *aClosingWindow); + void SetOrdinalPriority(TInt aPos, TInt aPriority); + void QueueMessageL(TUid aUid, TInt aDataLength, CWsClient& aSender); + void AddPriorityKeyL(TUint aKeycode, TUint aModifierMask, TUint aModifiers); + void RemovePriorityKey(TUint aKeycode, TUint aModifierMask, TUint aModifiers); + void RemoveAllPriorityKeys(); + TBool CheckForPriorityKey(const TKeyData &aKey, TInt aScanCode); + inline CWsPointerCursor *GroupPointerCursor() const; + static CWsWindowGroup *WindowGroupFromIdentifier(TInt aIdentifier); + static CWsWindowGroup *WindowGroupFromIdentifierL(TInt aIdentifier); + static CWsWindowGroup *FindWindowGroupL(CWsClient* aClient,TInt aIdentifier,TInt aOffset,const TPtrC *aMatch,const TThreadId *aThreadId); + inline HBufC *GroupName(); + inline void SetNextDefaultOwningWindow(CWsWindowGroup *aNext); + inline CWsWindowGroup **NextDefaultOwningWindowPtr(); + void SetScreenDeviceValidState(const DWsScreenDevice *aDevice); + void SetScreenChangeEventStateL(TBool aEnabled); + TBool ScreenDeviceValid() const; + TBool CanReceiveFocus() const; + static void SetScreenDeviceValidStates(const DWsScreenDevice *aDevice); + static void SetScreenDeviceValidStates(CScreen* aScreen); + static void NewOrientation(TInt aMode,CFbsBitGc::TGraphicsOrientation aRotation, CWsRootWindow* aRootWindow); + inline DWsScreenDevice *Device(); + void FetchMessageL(); + static inline void SetFocusGainPreprocessing(TBool aDo); + TBool IsChained(TInt& aParentId); + inline TInt NumWindowGroupsOnMyScreen(TInt aPriority); + static TInt NumWindowGroupsOnScreen(const CWsWindowGroup* aGroupWin,TBool aAllPriorities,TInt aPriority); + inline void SetScreenDeviceDeleted(); + inline TBool ScreenDeviceDeleted() const; + static TInt SendWindowGroupListL(TInt aScreenNumber, TBool aAllPriorities, TInt aPriority, TInt aCount); + static void GetFocusWindowGroupL(TInt aScreenNumber); + void SetScreenDevice(DWsScreenDevice *aDevice); + static void SetEventQueueTestState(TBool aEventQueState); + TBool HasVisibleTranslucentChild(); + void ReleasePendedMessage(); +private: + void SwitchToOwningWindow(CWsWindowGroup *aClosingWindow); + void MoveChainedWindows(TDblQueIter& aIter,TBool aForward,TInt aPos,CWsWindowGroup* aClosingWindow); + TBool DoSetOrdinalPosition1(TInt aPos,CWsWindowGroup *aClosingWindow); + void DoSetOrdinalPosition2(TInt aPos,CWsWindowGroup *aClosingWindow); + TBool SignalMessageReady(); + static void AdvanceIdentifierCount(); + void StatusDump(TDes &aBuf); + void PurgeCapturedKeys(); + inline void UpdateKeyClickState(); + void ResetFocus(CWsWindowGroup *aClosingWindow); + static TInt GetWindowGroupListL(TInt aScreenNo,TBool aAllPriorities,TInt aPriority,TInt aCount,CArrayFixFlat* aList); + inline CWsWindowGroup* BeforeInChain(); + static void GetWindowGroupListAndChainL(TInt aScreen,TBool aAllPriorities,TInt aPriority + ,RArray& list,TInt& aCountLeft); + TBool CheckCapability(TInt& aOrdinalPriority); + void DeleteQueue(TDblQue* aQueue); + TInt NumClientWindowGroups(); + void DisconnectFloatingSprites(); +private: + RWsTextCursor iTextCursor; + TInt iFlags; + TInt iOrdinalPriorityBase; + TInt iOrdinalPriorityAdjust; + TPriorityKey *iPriorityKeys; + TInt iOwningWindowGroup; + HBufC *iGroupName; + TInt iIdentifier; + CWsWindowGroup *iNextDefaultOwningWindow; + CArrayVarSeg *iMessageArray; + static TInt iIdentifierCount; + DWsScreenDevice *iScreenDevice; + static RPointerArray< TDblQue > iChains; + TDblQue* iQueue; + TDblQueLink iChainLink; + TUint32 iChildSID; + static TBool iFocusGainPreProcess; //'REMOVEFADINGONFOCUSGAIN' flag in INI file + // used for eventqueue testing +#if defined(_DEBUG) + static TInt iSkipCount; +#endif + static TBool iEventQueueTest; + friend class TWsPointer; + }; + +inline CWsTopClientWindow *CWsWindowGroup::Child() const + { + return (CWsTopClientWindow *)iChild; + } + +inline CWsWindowGroup *CWsWindowGroup::NextSibling() const + { + return (CWsWindowGroup *)iSibling; + } + +inline CWsWindowGroup *CWsWindowGroup::PrevSibling() const + { + return (CWsWindowGroup *)GetPrevSibling(); + } + +inline CWsRootWindow *CWsWindowGroup::Parent() const + { + return (CWsRootWindow *)iParent; + } + +inline TBool CWsWindowGroup::ReceivesFocus() const + { + return(iFlags&EGroupFlagReceivesFocus); + } + +inline RWsTextCursor *CWsWindowGroup::TextCursor() + { + return &iTextCursor; + } + +inline HBufC *CWsWindowGroup::GroupName() + { + return iGroupName; + } + +inline void CWsWindowGroup::SetNextDefaultOwningWindow(CWsWindowGroup *aNext) + { + iNextDefaultOwningWindow=aNext; + } + +inline CWsWindowGroup **CWsWindowGroup::NextDefaultOwningWindowPtr() + { + return &iNextDefaultOwningWindow; + } + +/** +@return A pointer to the DWsScreenDevice used by this window-group, or + NULL when there is no DWsScreenDevice used by the window-group. +*/ +inline DWsScreenDevice *CWsWindowGroup::Device() + { + return iScreenDevice; + } + +inline void CWsWindowGroup::SetFocusGainPreprocessing(TBool aDo) + { + iFocusGainPreProcess=aDo; + } + +inline void CWsWindowGroup::SetScreenDeviceDeleted() + { + iFlags|=EGroupFlagScreenDeviceDeleted; + iScreenDevice = NULL; // PDEF100409 + } + +inline TBool CWsWindowGroup::ScreenDeviceDeleted() const + { + return (iFlags&EGroupFlagScreenDeviceDeleted); + } + +#endif