--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/kernel/eka/ewsrv/ky_capt.cpp Mon Oct 19 15:55:17 2009 +0100
@@ -0,0 +1,164 @@
+// Copyright (c) 1996-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of the License "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:
+// e32\ewsrv\ky_capt.cpp
+// Provides the operations of setting and cancelling capture-keys
+//
+//
+
+#include <e32svr.h>
+#include <k32keys.h>
+
+const TInt KCaptureKeyArrayGranularity=5;
+
+EXPORT_C CCaptureKeys::CCaptureKeys()
+ : iCKarray(KCaptureKeyArrayGranularity, _FOFF(TCaptureKey,iHandle))
+ {
+ }
+
+EXPORT_C void CCaptureKeys::Construct()
+//
+//
+//
+ {
+ }
+
+EXPORT_C CCaptureKeys::~CCaptureKeys()
+//
+// Destructor
+//
+ {
+ iCKarray.Close();
+ }
+
+void CCaptureKeys::CheckCaptureKey(const TCaptureKey& aCaptureKey)
+ {
+
+ if ((aCaptureKey.iModifiers.iValue&~aCaptureKey.iModifiers.iMask)!=0)
+ User::Leave(KErrArgument);
+ }
+
+EXPORT_C void CCaptureKeys::AddCaptureKeyL(const TCaptureKey& aCaptureKey)
+//
+// Adds the specified capture-key to the list
+//
+ {
+
+ AddCaptureKeyL(aCaptureKey,0);
+ }
+
+EXPORT_C void CCaptureKeys::AddCaptureKeyL(const TCaptureKey& aCaptureKey, TUint8 aPriority)
+//
+// Adds the specified capture-key to the beginning of the list
+//
+ {
+
+ TCaptureKey captureKey(aCaptureKey);
+ captureKey.iKeyCodePattern.iFiller = aPriority;// Priority is stored in spare data member 'iFiller'
+ CheckCaptureKey(captureKey);
+ User::LeaveIfError(iCKarray.Insert(captureKey,0));
+ }
+
+EXPORT_C void CCaptureKeys::SetCaptureKey(TUint32 aHandle, const TCaptureKey& aCaptureKey)
+//
+// Finds the first capture-key from the list that matches the handle and sets
+// it to the new value.
+//
+ {
+
+ SetCaptureKey(aHandle,aCaptureKey,0);
+ }
+
+EXPORT_C void CCaptureKeys::SetCaptureKey(TUint32 aHandle, const TCaptureKey& aCaptureKey, TUint8 aPriority)
+//
+// Finds the first capture-key from the list that matches the handle and sets
+// it to the new value.
+//
+ {
+
+ TCaptureKey captureKey(aCaptureKey);
+ captureKey.iKeyCodePattern.iFiller = aPriority;// Priority is stored in spare data member 'iFiller'
+ CheckCaptureKey(captureKey);
+ TCaptureKey ck;
+ ck.iHandle=aHandle;
+ TInt r=iCKarray.Find(ck);
+ if (r>=0)
+ iCKarray[r]=captureKey;
+ }
+
+void CCaptureKeys::removeCaptureKey(TUint aIndex)
+//
+// Removes the capture-key at the given aIndex from the list
+//
+ {
+
+ iCKarray.Remove(aIndex);
+ }
+
+EXPORT_C void CCaptureKeys::CancelCaptureKey(TUint32 aHandle)
+//
+// Removes the first capture-key from the list that matches the handle;
+//
+ {
+
+ TCaptureKey ck;
+ ck.iHandle=aHandle;
+ TInt r=iCKarray.Find(ck);
+ if (r>=0)
+ iCKarray.Remove(r);
+ }
+
+EXPORT_C void CCaptureKeys::CancelAllCaptureKeys(TUint32 aApp)
+//
+// Removes all capture-keys from the list that match the given application handle
+//
+ {
+
+ TInt i=iCKarray.Count();
+ while(--i>=0)
+ {
+ if (iCKarray[i].iApp==aApp)
+ iCKarray.Remove(i);
+ }
+ }
+
+EXPORT_C void CCaptureKeys::ProcessCaptureKeys(TKeyData& aKeyData) const
+//
+// Sets aKeyData.iIsCaptureKey to true if the given aKeyCode match a capture-key in the list
+// and sets aKeyData.iApp to the handle of the last application that set it;
+// otherwise sets aKeyData.iIsCaptureKey to false and aKeyData.iApp to 0.
+//
+ {
+
+ TCharExtended ch=aKeyData.iKeyCode;
+ aKeyData.iIsCaptureKey=EFalse;
+ aKeyData.iApp = 0x0;
+ TInt c=iCKarray.Count();
+ TInt i;
+ TInt priority=KMinTInt;
+ for (i=0; i<c; i++)
+ {
+ const TCaptureKey& ck=iCKarray[i];
+ if ( ch.MatchesPattern(ck.iKeyCodePattern) && MatchesMaskedValue(aKeyData.iModifiers, ck.iModifiers) )
+ {
+ if(ck.iKeyCodePattern.iFiller>priority)
+ {
+ priority=ck.iKeyCodePattern.iFiller;
+ aKeyData.iApp=ck.iApp;
+ aKeyData.iHandle=ck.iHandle;
+ aKeyData.iIsCaptureKey=ETrue;
+ }
+ }
+ }
+ }
+