--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/common/src/mulkeyboardutility.cpp Thu Dec 17 08:56:02 2009 +0200
@@ -0,0 +1,139 @@
+/*
+* Copyright (c) 2007-2008 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: Utility class for keyboard handling
+ *
+*/
+
+
+// includes
+#include <w32std.h>
+#include <eikdef.h>
+#include <eikenv.h>
+#include <AknUtils.h>
+
+#include "mulkeyboardutility.h"
+
+const TUid KUidKeyBoardUtility = {0x02D811B8} ;
+
+CQwertySubscriber::CQwertySubscriber(TCallBack aCallBack, RProperty& aProperty)
+ : CActive(EPriorityNormal), iCallBack(aCallBack), iProperty(aProperty)
+{
+ CActiveScheduler::Add(this);
+}
+
+ CQwertySubscriber::~CQwertySubscriber()
+{
+ Cancel();
+}
+
+ void CQwertySubscriber::SubscribeL()
+{
+ if (!IsActive())
+ {
+ iProperty.Subscribe(iStatus);
+ SetActive();
+ }
+}
+
+void CQwertySubscriber::StopSubscribe()
+{
+ Cancel();
+}
+
+void CQwertySubscriber::RunL()
+{
+ if (iStatus.Int() == KErrNone)
+ {
+ iCallBack.CallBack();
+ SubscribeL();
+ }
+}
+
+void CQwertySubscriber::DoCancel()
+{
+ iProperty.Cancel();
+}
+
+CKeyBoardUtility* CKeyBoardUtility:: NewL()
+{
+ CKeyBoardUtility* self = static_cast<CKeyBoardUtility*>( CCoeEnv::Static( KUidKeyBoardUtility ) ) ;
+ if(!self)
+ {
+ self = new( ELeave ) CKeyBoardUtility() ;
+ }
+ return self ;
+}
+
+
+CKeyBoardUtility::CKeyBoardUtility():CCoeStatic(KUidKeyBoardUtility, CCoeStatic::EThread /*or EApp*/ )
+{
+ bQwerty = EFalse;
+ User::LeaveIfError(iQwertyModeStatusProperty.Attach(KCRUidAvkon, KAknQwertyInputModeActive));
+ iQwertyModeStatusSubscriber = new (ELeave) CQwertySubscriber(TCallBack(QwertyModeChangeNotification, this), iQwertyModeStatusProperty);
+ iQwertyModeStatusSubscriber->SubscribeL();
+}
+
+CKeyBoardUtility::~CKeyBoardUtility()
+{
+
+ // Qwerty Notify clean-up
+ if (iQwertyModeStatusSubscriber)
+ {
+ iQwertyModeStatusSubscriber->StopSubscribe();
+ }
+ iQwertyModeStatusProperty.Close();
+ delete iQwertyModeStatusSubscriber;
+}
+
+TInt CKeyBoardUtility::QwertyModeChangeNotification(TAny* aObj)
+{
+ if (aObj != NULL)
+ {
+ static_cast<CKeyBoardUtility*>(aObj)->HandleQwertyModeChangeNotification();
+ return KErrNone;
+ }
+ else
+ {
+ return KErrArgument;
+ }
+}
+
+void CKeyBoardUtility::HandleQwertyModeChangeNotification()
+{
+ TInt value = 0;
+ iQwertyModeStatusProperty.Get(value);
+ if(value > 0)
+ {
+ bQwerty = ETrue;
+ }
+ else
+ {
+ bQwerty = EFalse;
+ }
+}
+
+bool CKeyBoardUtility::IsQwerty()
+{
+ TInt value = 0;
+ iQwertyModeStatusProperty.Get(value);
+ if(value > 0)
+ {
+ bQwerty = true;
+ }
+ else
+ {
+ bQwerty = false;
+ }
+ return bQwerty;
+}