diff -r 000000000000 -r 5d03bc08d59c windowing/windowserver/nonnga/SERVER/KEYBEMUL.CPP --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/windowing/windowserver/nonnga/SERVER/KEYBEMUL.CPP Tue Feb 02 01:47:50 2010 +0200 @@ -0,0 +1,69 @@ +// 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 "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: +// Emulte key presses on pointer events +// +// + +#include +#include +#include "server.h" +#include "EVENT.H" + +TInt WsKeyboardEmulator::iCurrentKeyDown; +TBool WsKeyboardEmulator::iKeyIsDown=EFalse; + +void WsKeyboardEmulator::RawKeyEvent(TRawEvent::TType aType) + { + if (aType==TRawEvent::EKeyUp) + iKeyIsDown=EFalse; + else + iKeyIsDown=ETrue; + TRawEvent rawEvent; + rawEvent.Set(aType,iCurrentKeyDown); + TWindowServerEvent::ProcessRawEvent(rawEvent); + } + +TBool WsKeyboardEmulator::PointerEvent(TPointerEvent::TType aPointerEventType,const TPoint &aPoint, TDblQue *aKeyList) + { + if (iKeyIsDown && (aPointerEventType==TPointerEvent::EButton1Up)) + RawKeyEvent(TRawEvent::EKeyUp); + else if (!aKeyList) + return(EFalse); + else + { + TPointerKeyList *pkl=NULL; + for(TDblQueIter iter(*aKeyList);(pkl=iter++)!=NULL;) + if (pkl->iRect.Contains(aPoint)) + break; + if (iKeyIsDown && aPointerEventType==TPointerEvent::EDrag && (!pkl || iCurrentKeyDown!=pkl->iScanCode)) + RawKeyEvent(TRawEvent::EKeyUp); + else if (pkl) + { + if (aPointerEventType==TPointerEvent::EButton1Down || + (aPointerEventType==TPointerEvent::ESwitchOn && pkl->iActivatedByPointerSwitchOn)) + { + if (iKeyIsDown) + RawKeyEvent(TRawEvent::EKeyUp); + iCurrentKeyDown=pkl->iScanCode; + RawKeyEvent(TRawEvent::EKeyDown); + if (aPointerEventType==TPointerEvent::ESwitchOn) + RawKeyEvent(TRawEvent::EKeyUp); + } + } + else + return(EFalse); + } + return(ETrue); + } +