--- /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<CWsWindowGroup>& 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<TInt>* aList);
+ inline CWsWindowGroup* BeforeInChain();
+ static void GetWindowGroupListAndChainL(TInt aScreen,TBool aAllPriorities,TInt aPriority
+ ,RArray<RWsSession::TWindowGroupChainInfo>& list,TInt& aCountLeft);
+ TBool CheckCapability(TInt& aOrdinalPriority);
+ void DeleteQueue(TDblQue<CWsWindowGroup>* 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<TWsMessage> *iMessageArray;
+ static TInt iIdentifierCount;
+ DWsScreenDevice *iScreenDevice;
+ static RPointerArray< TDblQue<CWsWindowGroup> > iChains;
+ TDblQue<CWsWindowGroup>* 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