diff -r 2717213c588a -r 171fae344dd4 windowing/windowserver/tman/HOTKEY2.CPP --- a/windowing/windowserver/tman/HOTKEY2.CPP Tue Jun 22 15:21:29 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,424 +0,0 @@ -// Copyright (c) 1995-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: -// Test capture key -// -// - -#include -#include -#include "W32STD.H" -#include "../tlib/testbase.h" -#include "TMAN.H" - -enum THotKeyRetValues - { - EHotKeyOkay, - EHotKeyRetry, - EHotKeyFail, - }; - -struct SHotKeyParams - { - THotKey hotKey; - TUint keyCode; - TUint mod_mask; - TUint modifiers; - }; - -struct SHotKeyTestParams - { - TText *txt; // Text message telling user what to do - }; - -LOCAL_D SHotKeyParams HotKeys[]={ - {EHotKeyEnableLogging,'e',EModifierFunc|EModifierCtrl|EModifierShift,0}, - {EHotKeyDisableLogging,'d',EModifierFunc|EModifierCtrl|EModifierShift,EModifierFunc}, - {EHotKeyOfDeath,'q',0}, - {EHotKeyOfDeath,'w',0}, - }; - -LOCAL_D SHotKeyTestParams HotKeyTests[]={ - {(TText *)_S("Use \"e\" to enable logging")}, - {(TText *)_S("Use \"d\" to disable logging")}, - {(TText *)_S("Use \"q\" to kill the foreground app")}, - {(TText *)_S("Use \"w\" to kill the foreground app")}, - {(TText *)_S("Use \"K\" to kill the foreground app")}, - }; - -LOCAL_D TBool HotKeyTestIsDeathTest[]={EFalse, EFalse, ETrue, ETrue, ETrue}; - -struct SErrorHotKey - { - THotKey hotKey; - TUint keyCode; - TUint mod_mask; - TUint modifiers; - }; - -LOCAL_D SErrorHotKey errorKeys[]={ - {EHotKeyEnableLogging,'a',EModifierFunc|EModifierShift,EModifierFunc|EModifierCtrl}, - {EHotKeyDisableLogging,'1',0,EModifierFunc}, - {EHotKeyEnableLogging,3,EModifierCtrl,EModifierCtrl|EModifierShift}, - {EHotKeyDisableLogging,'a',EModifierFunc|EModifierShift,EModifierFunc|EModifierCtrl}, - {(THotKey)100,'1',0,EModifierFunc}, - {(THotKey)200, 3,EModifierCtrl,EModifierCtrl|EModifierShift}, - }; - -const TInt numHotKeys=sizeof(HotKeys)/sizeof(HotKeys[0]); -const TInt numHotKeyTests=sizeof(HotKeyTests)/sizeof(HotKeyTests[0]); -const TInt numErrorKeys=sizeof(errorKeys)/sizeof(errorKeys[0]); - -class SHKWindow; -class THotKeyTest; -class SHKConnection; - -class SHKDeath : public CActive - { -public: - SHKDeath(TInt aPriority); - void SetConnection(SHKConnection *aConn); - virtual void DoCancel(); - virtual void RunL(); - void Request(); -private: - SHKConnection *iConn; - }; - -class SHKWindowGroup : public CTWindowGroup - { -public: - SHKWindowGroup(CTClient *aClient); - void KeyL(const TKeyEvent &aKey,const TTime &aTime); - }; - -class SHKConnection : public CTClient - { -public: - SHKConnection(THotKeyTest *aTest, TInt aMode); - ~SHKConnection(); - void ConstructL(); - void KeyL(const TKeyEvent &aKey); - void SubStateChangedL(); - void CompleteL(); -protected: - TInt iMode; - SHKDeath iDeath; - THotKeyTest *iTest; - CTWin *iWin; - static TInt iMainWinId; - }; - -class SHKWindow : public CTWin - { -public: - SHKWindow(THotKeyTest *aTest); - void SetUpL(TPoint pos,TSize size,CTWinBase *parent, CWindowGc &aGc); - void Draw(); -protected: - THotKeyTest *iTest; - TRgb iBack; - }; - -class SHKWindow2 : public CTWin - { -public: - SHKWindow2(); - void SetUpL(TPoint pos,TSize size,CTWinBase *parent, CWindowGc &aGc); - void Draw(); - }; - -class THotKeyTest : public CTestBase - { -public: - THotKeyTest(); - ~THotKeyTest(); - TestState DoTestL(); - void ConstructL(); - void EndCaptureKeyTest(); - TInt SubState() const; - void IncSubStateL(); - void BadParamsL(); -private: - SHKConnection *iConn1; - TSize iWinSize; - TInt iState; - TInt iSubState; - TBool iIsInActiveScheduler; - }; - -TInt SHKConnection::iMainWinId; - -TInt SubThread(TAny *); - -GLDEF_C CTestBase *CreateHotKeyTest() - { - return(new(ELeave) THotKeyTest()); - } - -THotKeyTest::THotKeyTest() : CTestBase(_L("Hot Key")) - {} - -THotKeyTest::~THotKeyTest() - { - User::SetJustInTime(ETrue); - for(TInt index=0;indexiWs.ClearHotKeys(HotKeys[index].hotKey); - Client()->iWs.RestoreDefaultHotKey(HotKeys[index].hotKey); - } - delete iConn1; - if (iIsInActiveScheduler) - CActiveScheduler::Stop(); - } - -void THotKeyTest::EndCaptureKeyTest() - { - Request(); - } - -void THotKeyTest::ConstructL() - { - iConn1=new(ELeave) SHKConnection(this, EFalse); - iConn1->ConstructL(); - for(TInt index=0;indexiWs.SetHotKey(HotKeys[index].hotKey, HotKeys[index].keyCode,HotKeys[index].mod_mask,HotKeys[index].modifiers)); - User::SetJustInTime(EFalse); - } - -// -// SHKDeath // -// - -SHKDeath::SHKDeath(TInt aPriority) : CActive(aPriority) - { - CActiveScheduler::Add(this); - } - -void SHKDeath::SetConnection(SHKConnection *aConn) - { - iConn=aConn; - } - -void SHKDeath::DoCancel() - { - } - -void SHKDeath::RunL() - { - iConn->CompleteL(); - } - -void SHKDeath::Request() - { - SetActive(); - } - -// - -SHKWindowGroup::SHKWindowGroup(CTClient *aClient) : CTWindowGroup(aClient) - {} - -void SHKWindowGroup::KeyL(const TKeyEvent &aKey,const TTime &) - { - ((SHKConnection *)iClient)->KeyL(aKey); - } - -// -// SHKConnection - -SHKConnection::SHKConnection(THotKeyTest *aTest, TInt aMode) : iMode(aMode), iDeath(100), iTest(aTest) - { - iDeath.SetConnection(this); - } - -SHKConnection::~SHKConnection() - { - iGroup->GroupWin()->EnableReceiptOfFocus(EFalse); - CTWin::Delete(iWin); - } - -void SHKConnection::KeyL(const TKeyEvent &aKey) - { - if (iTest) - { - if (aKey.iCode==EKeyEnter && !HotKeyTestIsDeathTest[iTest->SubState()]) - iTest->IncSubStateL(); - else if (aKey.iCode==EKeyEscape) - iTest->AbortL(); - } - } - -void SHKConnection::CompleteL() - { - iTest->IncSubStateL(); - } - -void SHKConnection::SubStateChangedL() - { - if (HotKeyTestIsDeathTest[iTest->SubState()]) - { - RThread thread; - iMainWinId=iGroup->GroupWin()->Identifier(); - TInt subState=iTest->SubState(); - User::After(100000); - User::LeaveIfError(thread.Create(_L("SubThread"),SubThread,KDefaultStackSize,0x2000,0x2000,&subState,EOwnerThread)); - thread.Logon(iDeath.iStatus); - iDeath.Request(); - thread.Resume(); - thread.Close(); - } - iWin->Invalidate(); - iWs.Flush(); - } - -void SHKConnection::ConstructL() - { - CTClient::ConstructL(); - iGroup=new(ELeave) SHKWindowGroup(this); - iGroup->ConstructL(); - TSize screenSize=iGroup->Size(); - iGroup->GroupWin()->AutoForeground(EFalse); // Don't allow clicking to cause foreground, might mess up test - TInt winWidth; - TInt winHeight; - if (iMode==0) - { - winWidth=screenSize.iWidth/2; - winHeight=screenSize.iHeight-10; - SHKWindow *win=new(ELeave) SHKWindow(iTest); - win->SetUpL(TPoint(5,5),TSize(winWidth,winHeight),iGroup,*iGc); - iWin=win; - } - else - { - winWidth=150; - winHeight=50; - iGroup->GroupWin()->SetOwningWindowGroup(iMainWinId); - SHKWindow2 *win=new(ELeave) SHKWindow2(); - win->SetUpL(TPoint((screenSize.iWidth-winWidth)/2,(screenSize.iHeight-winHeight)/2),TSize(winWidth,winHeight),iGroup,*iGc); - iWin=win; - } - iWs.Flush(); - } - -// -// SHKWindow, class // -// - -SHKWindow::SHKWindow(THotKeyTest *aTest) : CTWin(), iTest(aTest) - { - iBack=TRgb::Gray256(230); - } - -void SHKWindow::SetUpL(TPoint pos,TSize size,CTWinBase *parent, CWindowGc &aGc) - { - ConstructExtLD(*parent,pos,size); - iWin.SetBackgroundColor(iBack); - Activate(); - AssignGC(aGc); - } - -void SHKWindow::Draw() - { - iGc->Clear(); - iGc->DrawText(TPtrC(HotKeyTests[iTest->SubState()].txt), TPoint(10,20)); - iGc->DrawText(TPtrC(_L("Press when tested okay")), TPoint(10,35)); - iGc->DrawText(TPtrC(_L("or escape to abort tests")), TPoint(10,50)); - } - -// -// SHKWindow2, class // -// - -SHKWindow2::SHKWindow2() : CTWin() - { - } - -void SHKWindow2::SetUpL(TPoint pos,TSize size,CTWinBase *parent, CWindowGc &aGc) - { - ConstructExtLD(*parent,pos,size); - iWin.SetBackgroundColor(TRgb(0,0,0)); - Activate(); - AssignGC(aGc); - } - -void SHKWindow2::Draw() - { - iGc->SetBrushColor(TRgb::Gray4(1)); - iGc->Clear(); - iGc->SetPenColor(TRgb::Gray4(3)); - iGc->DrawText(TPtrC(_L("Kill me!!!")), TPoint(10,15)); - } - -// - -TInt THotKeyTest::SubState() const - { - return(iSubState); - } - -void THotKeyTest::IncSubStateL() - { - if (iSubState==(numHotKeyTests-1)) - EndCaptureKeyTest(); - else - { - iSubState++; - iConn1->SubStateChangedL(); - } - } - -void THotKeyTest::BadParamsL() - { - TInt resCount=Client()->iWs.ResourceCount(); - for(TInt index=0;indexiWs.SetHotKey(errorKeys[index].hotKey, errorKeys[index].keyCode,errorKeys[index].mod_mask,errorKeys[index].modifiers)==KErrArgument); - TestL(Client()->iWs.ResourceCount()==resCount); - } - -TestState THotKeyTest::DoTestL() - { - switch(iState) - { - case 0: - LogSubTest(_L("Errors"),1); - BadParamsL(); - LogSubTest(_L("CaptureKey"),2); - iState++; - return(EContinue); - default: - return(EFinished); - } - } - -//======================================================// -// Sub thread to do tests and get shot by window server // -//======================================================// - -void SubThreadMain() - { - CActiveScheduler *TheActiveScheduler=new(ELeave) CActiveScheduler; - CActiveScheduler::Install(TheActiveScheduler); - SHKConnection *conn=new(ELeave) SHKConnection(NULL, ETrue); - conn->ConstructL(); - CActiveScheduler::Start(); - delete TheActiveScheduler; - } - -TInt SubThread(TAny *) - { - CTrapCleanup* CleanUpStack=CTrapCleanup::New(); - TRAPD(err,SubThreadMain()); - delete CleanUpStack; - return(err); - }