--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/uifw/AknGlobalUI/AknCapServer/src/aknphonekeyforwarder.cpp Tue Feb 02 01:00:49 2010 +0200
@@ -0,0 +1,76 @@
+/*
+* Copyright (c) 2006-2007 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:
+*
+*/
+
+#include <e32property.h>
+#include <e32std.h> // needed because activeidle2domainpskeys.h doesn't include this
+#include "AknCapServerEntry.h"
+#include <activeidle2domainpskeys.h> // yet another nasty dep
+
+#define KPhoneAppUid TUid::Uid(0x100058B3)
+
+TBool AknPhoneKeyForwarder::ForwardKeyToPhoneApp(TAny* aKeyEvent)
+ {
+ RProperty::Set(
+ KPSUidAiInformation,
+ KActiveIdleState,
+ EPSAiNumberEntry );
+
+ RWsSession& ws = CCoeEnv::Static()->WsSession();
+ TApaTaskList list(ws);
+ TApaTask phone = list.FindApp(KPhoneAppUid);
+ if (phone.Exists())
+ {
+ TKeyEvent& key = *(TKeyEvent*)aKeyEvent;
+
+ // make sure that phone will receive focus before sending key to it
+ ws.SetWindowGroupOrdinalPosition(phone.WgId(), 0);
+
+ // send key event
+ phone.SendKey(key);
+
+ // and check if the up event has been delivered to us meanwhile
+ if (STATIC_CAST(CAknCapAppServerAppUi*,CEikonEnv::Static()->AppUi())->iUpReceived)
+ {
+ TWsEvent event;
+ event.SetType(EEventKeyUp);
+ *event.Key()=key;
+ event.SetTimeNow();
+ ws.SendEventToWindowGroup(phone.WgId(), event);
+ }
+ }
+
+ return EFalse; // don't retry
+ }
+
+TBool AknPhoneKeyForwarder::ForwardUpEventToPhoneApp(TAny* aKeyEvent)
+ {
+ RWsSession& ws = CCoeEnv::Static()->WsSession();
+ TApaTaskList list(ws);
+ TApaTask phone = list.FindApp(KPhoneAppUid);
+ if (phone.Exists())
+ {
+ TWsEvent event;
+ event.SetType(EEventKeyUp);
+ *event.Key()=*(TKeyEvent*)aKeyEvent;
+ event.SetTimeNow();
+ ws.SendEventToWindowGroup(phone.WgId(), event);
+ }
+
+ return EFalse; // no need to re-run
+ }
+
+// End of file