--- a/uifw/AvKon/src/AknSctDialog.cpp Wed Sep 01 12:16:19 2010 +0100
+++ b/uifw/AvKon/src/AknSctDialog.cpp Tue Sep 14 21:48:24 2010 +0300
@@ -56,6 +56,7 @@
#include "aknsctfocushandler.h"
#include <eikdialogext.h>
+#include <aknglobalpopupprioritycontroller.h>
//
// class CAknCharMapDialog
@@ -91,8 +92,6 @@
private:
CAknCharMapDialogExtension(CAknCharMapDialog* aCaller);
void ConstructL();
- static TInt QwertyModeChangeNotification(TAny* aObj);
- void HandleQwertyModeChangeNotification();
public: // New method
void SetCharacterCaseIfRequiredL();
@@ -106,31 +105,7 @@
TInt iShowAnotherTableCharCase;
TAknCharMapPictoMode iPictoMode;
TAknCharMapEmotionMode iEmotionMode;
-
-private:
- NONSHARABLE_CLASS(CSubscriber) : public CActive
- {
- public:
- CSubscriber(TCallBack aCallBack, RProperty& aProperty);
- ~CSubscriber();
-
- public: // New functions
- void SubscribeL();
- void StopSubscribe();
-
- private: // from CActive
- void RunL();
- void DoCancel();
-
- private:
- TCallBack iCallBack;
- RProperty& iProperty;
- };
-
-private:
- CSubscriber* iQwertyModeStatusSubscriber;
- RProperty iQwertyModeStatusProperty;
- TInt iOldCharCase;
+ TBool iFirstOrientation;
};
// -----------------------------------------------------------------------------
@@ -153,13 +128,6 @@
//
CAknCharMapDialogExtension::~CAknCharMapDialogExtension()
{
- // Stop subscribe in PubSub
- if (iQwertyModeStatusSubscriber)
- {
- iQwertyModeStatusSubscriber->StopSubscribe();
- }
- iQwertyModeStatusProperty.Close();
- delete iQwertyModeStatusSubscriber;
}
// -----------------------------------------------------------------------------
@@ -185,150 +153,45 @@
//
void CAknCharMapDialogExtension::ConstructL()
{
- // Start also listening qwerty mode status.
- User::LeaveIfError(iQwertyModeStatusProperty.Attach(KCRUidAvkon,
- KAknQwertyInputModeActive));
-
- iQwertyModeStatusSubscriber = new (ELeave) CSubscriber(
- TCallBack(QwertyModeChangeNotification, this), iQwertyModeStatusProperty);
-
- iQwertyModeStatusSubscriber->SubscribeL();
-
- iOldCharCase=-1; // no default character case at beginning
+ iFirstOrientation = Layout_Meta_Data::IsLandscapeOrientation();
}
-TInt CAknCharMapDialogExtension::QwertyModeChangeNotification(TAny* aObj)
- {
- if (aObj != NULL)
- {
- static_cast<CAknCharMapDialogExtension*>(aObj)->HandleQwertyModeChangeNotification();
- return KErrNone;
- }
- else
- {
- return KErrArgument;
- }
- }
-
+// -----------------------------------------------------------------------------
+// CAknCharMapDialogExtension::SetCharacterCaseIfRequiredL
+//
+// change the character case, when orientation changed if any.
+// -----------------------------------------------------------------------------
+//
void CAknCharMapDialogExtension::SetCharacterCaseIfRequiredL()
{
- TInt value = 0;
- iQwertyModeStatusProperty.Get(value);
- iQwertyMode = value;
-
+ TBool landscape = Layout_Meta_Data::IsLandscapeOrientation();
+ TInt charCase = EAknSCTLowerCase;
CAknCharMap* charmapControl =
- STATIC_CAST(CAknCharMap*, iCaller->Control(EAknSCTQueryContentId));
+ STATIC_CAST( CAknCharMap*, iCaller->Control( EAknSCTQueryContentId ) );
- if ( (iQwertyMode) == (charmapControl->CharacterCase() == EAknSCTQwerty) )
- {
- // No change for Qwerty mode
- return;
- }
-
- if (iQwertyMode)
+ // Set character case logic changed from Timebox 92 PS2, if Orientation is Landscape
+ // the case will be QWERTY, otherwise it will be LOWER. However, it is possible for
+ // Landscape launches LOWER case, or Poratrait does QWERTY at the first time launched,
+ // in this case, we need to store the first SCT launched case.
+ if ( landscape )
{
iFlags |= ECharMapDialogItemLockNumericKeys;
-
- iOldCharCase=charmapControl->CharacterCase();
- charmapControl->SetCharacterCaseL(EAknSCTQwerty);
+ charCase = EAknSCTQwerty;
}
else
{
- iFlags &= (~ECharMapDialogItemLockNumericKeys);
- if (iOldCharCase!=-1)
- {
- charmapControl->SetCharacterCaseL(iOldCharCase);
- }
- else
- {
- charmapControl->SetCharacterCaseL(EAknSCTLowerCase);
- iOldCharCase = EAknSCTLowerCase;
- }
- }
- //charmapControl->DrawNow();
- }
-
-void CAknCharMapDialogExtension::HandleQwertyModeChangeNotification()
- {
- TInt value = 0;
- iQwertyModeStatusProperty.Get(value);
- iQwertyMode = value;
-
- CAknCharMap* charmapControl =
- STATIC_CAST(CAknCharMap*, iCaller->Control(EAknSCTQueryContentId));
-
- if ( (iQwertyMode) == (charmapControl->CharacterCase() == EAknSCTQwerty) )
- {
- // No change for Qwerty mode
- return;
+ iFlags &= ( ~ECharMapDialogItemLockNumericKeys );
+ charCase = EAknSCTLowerCase;
}
- if (iQwertyMode)
- {
- iFlags |= ECharMapDialogItemLockNumericKeys;
-
- iOldCharCase=charmapControl->CharacterCase();
- TRAP_IGNORE( charmapControl->SetCharacterCaseL(EAknSCTQwerty) );
- }
- else
- {
- iFlags &= ~ECharMapDialogItemLockNumericKeys;
- if (iOldCharCase!=-1)
- {
- TRAP_IGNORE( charmapControl->SetCharacterCaseL(iOldCharCase) );
- }
- else
- {
- TRAP_IGNORE( charmapControl->SetCharacterCaseL(EAknSCTLowerCase) );
- iOldCharCase = EAknSCTLowerCase;
- }
- }
-
- // Reset focus.
- charmapControl->TakeFocus();
-
- // Draw new characters.
- charmapControl->DrawNow();
- }
+ if ( landscape == iFirstOrientation )
+ {
+ // Note, it should be equal to first char case once it return
+ // to the first orientation
+ charCase = iCaller->CharacterCase();
+ }
+ charmapControl->SetCharacterCaseL( charCase );
-// CAknCharMapDialogExtension::CSubscriber
-CAknCharMapDialogExtension::CSubscriber::CSubscriber(TCallBack aCallBack, RProperty& aProperty)
- : CActive(EPriorityNormal), iCallBack(aCallBack), iProperty(aProperty)
- {
- CActiveScheduler::Add(this);
- }
-
-CAknCharMapDialogExtension::CSubscriber::~CSubscriber()
- {
- Cancel();
- }
-
-void CAknCharMapDialogExtension::CSubscriber::SubscribeL()
- {
- if (!IsActive())
- {
- iProperty.Subscribe(iStatus);
- SetActive();
- }
- }
-
-void CAknCharMapDialogExtension::CSubscriber::StopSubscribe()
- {
- Cancel();
- }
-
-void CAknCharMapDialogExtension::CSubscriber::RunL()
- {
- if (iStatus.Int() == KErrNone)
- {
- iCallBack.CallBack();
- SubscribeL();
- }
- }
-
-void CAknCharMapDialogExtension::CSubscriber::DoCancel()
- {
- iProperty.Cancel();
}
// CAknCharMapDialog
@@ -497,7 +360,6 @@
charmapControl->SetCaseTableL(caseTable);
caseTable.Close();
- //
charmapControl->SetBuffer(*iSpecialChars);
charmapControl->SetCharacterCaseL(iCharCase);
@@ -537,7 +399,12 @@
DrawableWindow()->SetOrdinalPosition(0,ECoeWinPriorityAlwaysAtFront); //
ButtonGroupContainer().ButtonGroup()->AsControl()->DrawableWindow()->SetOrdinalPosition(0,ECoeWinPriorityAlwaysAtFront);
- CEikDialog::Extension()->SetPriority(CActive::EPriorityStandard);
+ // Boost its priority in GlobalPopupPriorityController queue, because its window priority is higher than zero,
+ // otherwise, GlobalPopupPriorityController will dim it wrongly.
+ // This code only effects for aknnfysrv.exe, since input server doesn't have GlobalPopupPriorityController instance.
+ AknGlobalPopupPriorityController::SetPopupPriorityL(*this, 1);
+
+ CEikDialog::Extension()->SetPriority(CActive::EPriorityStandard);
}
EXPORT_C void CAknCharMapDialog::SetSizeAndPosition( const TSize& aSize )
@@ -1126,5 +993,8 @@
}
}
-
+TInt CAknCharMapDialog::CharacterCase()
+ {
+ return iCharCase & KCharMapCaseMask;
+ }
// End of File