--- a/uifw/EikStd/dlgsrc/EIKDIALG.CPP Tue Aug 31 15:28:30 2010 +0300
+++ b/uifw/EikStd/dlgsrc/EIKDIALG.CPP Wed Sep 01 12:16:19 2010 +0100
@@ -41,6 +41,7 @@
#include <eikdpage.h>
#include <eikmop.h>
#include <aknenv.h>
+#include <touchfeedback.h>
//<SKIN>
#include "eikdialogext.h"
#include <AknsListBoxBackgroundControlContext.h>
@@ -69,8 +70,11 @@
#endif
#include <AknQueryDialog.h>
#include <aknQueryControl.h>
+#include <aknitemactionmenuregister.h>
+#include <layoutmetadata.cdl.h>
#include "akncbacontentobserver.h"
+#include "akntrace.h"
TBool IsBlankScreenDisplayed();
@@ -82,10 +86,10 @@
//
TBool CbaEmbeddedInDialog( const TInt& aFlags )
{
- return AknLayoutUtils::PenEnabled() &&
- !( aFlags & EEikDialogFlagFillAppClientRect ) &&
+ return !( aFlags & EEikDialogFlagFillAppClientRect ) &&
!( aFlags & EEikDialogFlagFillScreen ) &&
- !( aFlags & EEikDialogFlagVirtualInput );
+ !( aFlags & EEikDialogFlagVirtualInput ) &&
+ !( aFlags & EEikDialogFlagNoEmbeddedSoftkeys );
}
@@ -120,6 +124,7 @@
//
TBool IsFocusedWindowGroup( CEikDialog* aThis )
{
+ _AKNTRACE_FUNC_ENTER;
RWindowTreeNode* node = aThis->DrawableWindow();
// this code finds out if this control belongs to window group
// that is in focus, there are some rare cases when the latest opened
@@ -152,9 +157,13 @@
if ( focusedWindowGroupId == wgId )
{
+ _AKNTRACE( "return ETrue;");
+ _AKNTRACE_FUNC_EXIT;
return ETrue;
}
}
+ _AKNTRACE( "return EFalse;");
+ _AKNTRACE_FUNC_EXIT;
return EFalse;
}
@@ -209,6 +218,7 @@
EXPORT_C CEikDialog::CEikDialog()
{
+ _AKNTRACE_FUNC_ENTER;
// __DECLARE_NAME(_S("CEikDialog"));
// No border in Avkon
iBorder=TGulBorder(TGulBorder::ENone);
@@ -221,12 +231,16 @@
GfxTransEffect::Register(this,KGfxPopupDefaultControlUid);
#endif
AKNTASHOOK_ADD( this, "CEikDialog" );
+ _AKNTRACE_FUNC_EXIT;
}
EXPORT_C CEikDialog::~CEikDialog()
{
+ _AKNTRACE_FUNC_ENTER;
AKNTASHOOK_REMOVE();
+ AknItemActionMenuRegister::RemoveConstructingMenuBarOwner( this );
+
EnableContentObserver( EFalse );
if ( GfxTransEffect::IsRegistered( this ) )
@@ -253,10 +267,12 @@
delete iExtension ;
iExtension = NULL;
StopWaitingAsRequired();
+ _AKNTRACE_FUNC_EXIT;
}
void CEikDialog::DynamicConstructL()
{
+ _AKNTRACE_FUNC_ENTER;
PreLayoutDynInitL();
if ( iPageSelector && iPageSelector->IsForm() && Extension() )
@@ -266,8 +282,42 @@
EnableContentObserver( ETrue );
+ // Extension member variable iDeleteEmbeddedCba is used to track whether
+ // dialog's implementation of CCoeControl::SizeChanged gets called. If it
+ // isn't then embedded softkeys won't work.
+ CEikDialogExtension* extension = Extension();
+ TBool checkCba = extension && iButtonGroupContainer
+ && CbaEmbeddedInDialog( iDialogFlags );
+
+ if ( checkCba )
+ {
+ extension->iDeleteEmbeddedCba = ETrue;
+ }
+
Layout();
+
+ // At this point CBA's rect should be correctly set. If it isn't, then
+ // assume that dialog didn't properly call CEikDialog::SizeChanged thus
+ // embedded softkeys won't work.
+ // In that case softkeys are deleted and re-created as a window-owning
+ // component in "legacy" way.
+ if (checkCba && extension->iButtonGroupResourceId != 0 &&
+ (extension->iDeleteEmbeddedCba || Size().iWidth <= 0))
+ {
+ delete iButtonGroupContainer;
+ iButtonGroupContainer = NULL;
+ iButtonGroupContainer = CEikButtonGroupContainer::NewL(
+ CEikButtonGroupContainer::ECba,
+ CEikButtonGroupContainer::EHorizontal,
+ iButtonCommandObserver,
+ extension->iButtonGroupResourceId,
+ 0 );
+
+ iDialogFlags |= EEikDialogFlagNoEmbeddedSoftkeys;
+ }
+
PostLayoutDynInitL();
+ _AKNTRACE_FUNC_EXIT;
}
/**
@@ -279,6 +329,7 @@
*/
EXPORT_C void CEikDialog::PrepareLC(TInt aResourceId)
{
+ _AKNTRACE_FUNC_ENTER;
CleanupStack::PushL(this);
BaseConstructL();
StaticConstructL(aResourceId);
@@ -287,6 +338,7 @@
{
AknGlobalPopupPriorityController::AddPopupToControlStackL(*this,ECoeStackPriorityDialog,ECoeStackFlagRefusesAllKeys);
}
+ _AKNTRACE_FUNC_EXIT;
}
/**
@@ -310,12 +362,15 @@
*/
EXPORT_C TInt CEikDialog::ExecuteLD(TInt aResourceId)
{
+ _AKNTRACE_FUNC_ENTER;
PrepareLC(aResourceId);
+ _AKNTRACE_FUNC_EXIT;
return(RunLD());
}
void CEikDialog::BaseConstructL()
{
+ _AKNTRACE_FUNC_ENTER;
CreateWindowL();
Window().SetBackgroundColor(iEikonEnv->ControlColor(EColorDialogBackground,*this));
EnableDragEvents();
@@ -328,10 +383,14 @@
{
iExtension = CEikDialogExtension::NewL( *this ) ;
}
+ _AKNTRACE_FUNC_EXIT;
}
void CEikDialog::StaticConstructL(TInt aResourceId)
{
+ _AKNTRACE_FUNC_ENTER;
+ AknItemActionMenuRegister::SetConstructingMenuBarOwnerL( this );
+
TResourceReader reader;
iCoeEnv->CreateResourceReaderLC(reader,aResourceId);
ConstructFromResourceL(reader);
@@ -351,6 +410,7 @@
}
}
}
+ _AKNTRACE_FUNC_EXIT;
}
/**
@@ -379,6 +439,7 @@
// code common to both ConstructSleepingDialogL & ConstructSleepingAlertDialogL
//
{
+ _AKNTRACE_FUNC_ENTER;
iDialogFlags|=EEikDialogFlagSleeping;
BaseConstructL();
StaticConstructL(aResourceId);
@@ -388,10 +449,12 @@
// non visible CBA's do not recieve keys
iButtonGroupContainer->MakeVisible(EFalse);
}
+ _AKNTRACE_FUNC_EXIT;
}
TInt CEikDialog::WaitAsRequired()
{
+ _AKNTRACE_FUNC_ENTER;
TInt exitConfirmed=0;
#if defined (__DEBUG__)
RDebug::ProfileEnd(PROFILE_POINT_EIKON_DIALOG_LOAD);
@@ -408,7 +471,7 @@
iExitConfirmed=(&exitConfirmed);
iWait.Start();
}
-
+ _AKNTRACE_FUNC_EXIT;
return(exitConfirmed);
}
@@ -423,6 +486,7 @@
*/
EXPORT_C TInt CEikDialog::RouseSleepingDialog()
{ // none of following ...L calls to Leave
+ _AKNTRACE_FUNC_ENTER;
if (IsVisible())
ExitSleepingDialog(); // eg for rousing an already roused Alert dialog
@@ -541,7 +605,7 @@
cba->DrawNow();
}
}
-
+ _AKNTRACE_FUNC_EXIT;
return(WaitAsRequired());
}
@@ -550,6 +614,7 @@
*/
EXPORT_C void CEikDialog::ExitSleepingDialog()
{
+ _AKNTRACE_FUNC_ENTER;
FadeBehindPopup(EFalse);
EnableContentObserver( EFalse );
@@ -615,6 +680,7 @@
}
#endif
CancelMediatorCommand(this);
+ _AKNTRACE_FUNC_EXIT;
}
/**
@@ -638,6 +704,7 @@
*/
EXPORT_C void CEikDialog::ConstructFromResourceL(TResourceReader& aReader)
{
+ _AKNTRACE_FUNC_ENTER;
iDialogFlags |=aReader.ReadInt32();
#ifdef RD_SCALABLE_UI_V2
@@ -667,6 +734,7 @@
ASSERT(aReader.ReadInt16()==0);
SetBorderStyle(); // Moved to the end of construction to allow access to individual lines.
+ _AKNTRACE_FUNC_EXIT;
}
void CEikDialog::SetBorderStyle()
@@ -686,13 +754,16 @@
void CEikDialog::CreatePageSelectorL()
{
+ _AKNTRACE_FUNC_ENTER;
iPageSelector=CEikDialogPageSelector::NewL(*this,this);
iPageSelector->SetObserver(this);
RegisterDialgWithPageSelector(); // Added JIn
+ _AKNTRACE_FUNC_EXIT;
}
void CEikDialog::CreatePageSelectorL(TInt aResourceId)
{
+ _AKNTRACE_FUNC_ENTER;
if (aResourceId)
{
TResourceReader reader;
@@ -704,6 +775,7 @@
iPageSelector->SetAllPagesDensePacked(ETrue);
RegisterDialgWithPageSelector(); // Added JIn
}
+ _AKNTRACE_FUNC_EXIT;
}
void CEikDialog::CreateButtonGroupContainerL(TInt aResourceId)
@@ -714,7 +786,7 @@
// don't activate them in case of sleeping dialog
// yet so extra drawings are suppressed until dialog is really
// roused to screen
-
+ _AKNTRACE_FUNC_ENTER;
TUint flags = ( iDialogFlags & EEikDialogFlagSleeping ) ?
( CEikButtonGroupContainer::EAddToStack |
CEikButtonGroupContainer::EDelayActivation ) :
@@ -736,9 +808,15 @@
iButtonCommandObserver, aResourceId, *this, flags );
EnableContentObserver( ETrue );
+
+ if ( Extension() )
+ {
+ Extension()->iButtonGroupResourceId = aResourceId;
+ }
AknGlobalPopupPriorityController::AddSubPopupL(*this, *iButtonGroupContainer->ButtonGroup()->AsControl());
AknGlobalPopupPriorityController::AddPopupToControlStackL(*iButtonGroupContainer->ButtonGroup()->AsControl(), ECoeStackPriorityCba, ECoeStackFlagRefusesFocus);
+ _AKNTRACE_FUNC_EXIT;
}
void CEikDialog::CreateTitleBarL()
@@ -770,38 +848,41 @@
*/
EXPORT_C void CEikDialog::SetSizeAndPosition(const TSize& aSize)
{
+ _AKNTRACE_FUNC_ENTER;
if (iDialogFlags&EEikDialogFlagFillAppClientRect)
{
+ TRect destRect = iEikonEnv->EikAppUi()->ClientRect();
// if this is a view app then ask client rect from the currently active view
TVwsViewId uid;
if ( iAvkonAppUi->GetActiveViewId( uid ) == KErrNone )
{
if ( uid.iAppUid != uid.iViewUid )
{
- CAknView* view = iAvkonViewAppUi->View(uid.iViewUid);
- if (view)
+ CAknView* view = iAvkonViewAppUi->View( uid.iViewUid );
+ if ( view )
{
- SetRect(view->ClientRect());
- }
- else
- {
- SetRect(iEikonEnv->EikAppUi()->ClientRect());
+ destRect = view->ClientRect();
}
}
- else
+ }
+
+ if ( !Layout_Meta_Data::IsLandscapeOrientation() && iButtonGroupContainer != NULL )
+ {
+ TRect controlPane;
+ AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EControlPane, controlPane );
+
+ if ( destRect.iBr.iY > controlPane.iTl.iY )
{
- SetRect(iEikonEnv->EikAppUi()->ClientRect());
+ destRect.iBr.iY = controlPane.iTl.iY;
}
- }
- else
- {
- SetRect( iEikonEnv->EikAppUi()->ClientRect() );
- }
- }
+ }
+ SetRect( destRect );
+ }
else
{
SetRect( TRect( AknPopupUtils::Position( aSize, this ), aSize ) );
}
+ _AKNTRACE_FUNC_EXIT;
}
/**
@@ -821,6 +902,7 @@
*/
EXPORT_C TSize CEikDialog::MinimumSize()
{
+ _AKNTRACE_FUNC_ENTER;
if (iDialogFlags&EEikDialogFlagFillScreen)
{
TAknWindowLineLayout windowLineLayoutScreen = AknLayoutScalable_Avkon::Screen().LayoutLine();
@@ -861,7 +943,7 @@
}
TSize pageSelectorSize(iPageSelector->MinimumSize());
-
+ _AKNTRACE_FUNC_EXIT;
return pageSelectorSize;
}
@@ -872,6 +954,7 @@
*/
EXPORT_C TSize CEikDialog::PreferredSize(const TSize& aMaxSize) const
{
+ _AKNTRACE_FUNC_ENTER;
if (iDialogFlags&EEikDialogFlagFillScreen)
return iEikonEnv->ScreenDevice()->SizeInPixels();
else if (iDialogFlags&EEikDialogFlagFillAppClientRect)
@@ -886,20 +969,24 @@
CAknView* view = iAvkonViewAppUi->View(uid.iViewUid);
if (view)
{
+ _AKNTRACE_FUNC_EXIT;
return view->ClientRect().Size();
}
else
{
+ _AKNTRACE_FUNC_EXIT;
return iEikonEnv->EikAppUi()->ClientRect().Size();
}
}
else
{
+ _AKNTRACE_FUNC_EXIT;
return iEikonEnv->EikAppUi()->ClientRect().Size();
}
}
else
{
+ _AKNTRACE_FUNC_EXIT;
return iEikonEnv->EikAppUi()->ClientRect().Size();
}
}
@@ -950,6 +1037,7 @@
}
}
+ _AKNTRACE_FUNC_EXIT;
return preferredSize;
}
@@ -961,6 +1049,7 @@
*/
EXPORT_C void CEikDialog::SizeChanged()
{
+ _AKNTRACE_FUNC_ENTER;
__ASSERT_DEBUG( iButtonGroupContainer->Location() == CEikButtonGroupContainer::EExternal,
Panic( EEikDialogPanicIllegalOption ) );
@@ -1017,7 +1106,12 @@
cba->SetRect( TRect(0, 0, 0, 0 ) );
}
}
- }
+
+ if ( Extension() )
+ {
+ Extension()->iDeleteEmbeddedCba = EFalse;
+ }
+ }
if (iTitleBar)
{
TRect nullRect(0,0,0,0);
@@ -1047,6 +1141,7 @@
// <SKIN>
iExtension->iBgContext->SetParentPos( PositionRelativeToScreen() ) ;
iExtension->iBgContext->SetRect( Rect() ) ;
+ _AKNTRACE_FUNC_EXIT;
}
/**
@@ -1099,12 +1194,14 @@
*/
EXPORT_C void CEikDialog::MakeLineVisible(TInt aControlId,TBool aVisible)
{
+ _AKNTRACE_FUNC_ENTER;
CEikCaptionedControl* line=Line(aControlId);
CCoeControl* control=line->iControl;
if (control->IsVisible()==aVisible)
return;
control->MakeVisible(aVisible);
line->CheckDimmedDisplayState();
+ _AKNTRACE_FUNC_EXIT;
}
/**
@@ -1113,6 +1210,7 @@
*/
EXPORT_C void CEikDialog::MakeWholeLineVisible(TInt aControlId,TBool aVisible)
{
+ _AKNTRACE_FUNC_ENTER;
CEikCaptionedControl* line=Line(aControlId);
if (line->IsVisible()==aVisible)
return;
@@ -1123,6 +1221,7 @@
line->iTrailer->MakeVisible(aVisible);
control->MakeVisible(aVisible);
line->MakeVisible(aVisible);
+ _AKNTRACE_FUNC_EXIT;
}
/**
@@ -1137,6 +1236,7 @@
*/
EXPORT_C void CEikDialog::Layout()
{
+ _AKNTRACE_FUNC_ENTER;
TAknWindowLineLayout windowLineLayoutScreen = AknLayoutScalable_Avkon::Screen().LayoutLine();
TRect rectZero = TRect(0,0,0,0);
TAknLayoutRect layoutRect;
@@ -1145,7 +1245,10 @@
TSize maxSize = rectScreen.Size();
+ _AKNTRACE( "size = %d x %d", iSize.iWidth, iSize.iHeight );
SetSizeAndPosition(PreferredSize( maxSize ));
+ _AKNTRACE( "size = %d x %d", iSize.iWidth, iSize.iHeight );
+ _AKNTRACE_FUNC_EXIT;
}
/**
@@ -1261,7 +1364,7 @@
if (line)
{
line->SetCaptionL(aText);
- line->DrawNow();
+ line->DrawDeferred();
}
}
@@ -1379,6 +1482,8 @@
*/
EXPORT_C void CEikDialog::SetEditableL( TBool aEditable )
{
+ _AKNTRACE_FUNC_ENTER;
+ _AKNTRACE( "CEikDialog::SetEditableL() aEditable: [%d]", aEditable );
if ( !iExtension->iFlags[CEikDialogExtension::EEditableStateInitialised] ||
iIsEditable != aEditable )
{
@@ -1388,6 +1493,7 @@
iPageSelector->SetEditableL( aEditable );
DrawNow();
}
+ _AKNTRACE_FUNC_EXIT;
}
/**
@@ -1397,6 +1503,7 @@
*/
EXPORT_C TBool CEikDialog::IsEditable() const
{
+ _AKNTRACE( "CEikDialog::IsEditable(): [%d]", iIsEditable );;
return ( iIsEditable ) ;
}
@@ -1452,6 +1559,7 @@
*/
EXPORT_C TInt CEikDialog::RunLD()
{
+ _AKNTRACE_FUNC_ENTER;
// Moved BringForwards in the beginning to enable 1-frame animations.
iEikonEnv->BringForwards(ETrue); // before call to EnableBackup()
AknGlobalPopupPriorityController::ShowPopup(*this, ETrue);
@@ -1547,6 +1655,24 @@
GfxTransEffect::NotifyExternalState(EInternalHandleSequence, (const TDesC8*)this);
#endif
GfxTransEffect::Begin(this, KGfxControlAppearAction);
+ MTouchFeedback* feedback = NULL;
+ if( AknLayoutUtils::PenEnabled() )
+ {
+ feedback = static_cast<MTouchFeedback*>( ExtensionInterface( KExIfTactileFeedbackUid ) );
+ }
+ if( feedback )
+ {
+ if( CAknTransitionUtils::TransitionsEnabled( AknTransEffect::EComponentTransitionsOff ) )
+ {
+ feedback->InstantFeedback( this, ETouchFeedbackIncreasingPopUp,
+ ETouchFeedbackVibra, TPointerEvent() );
+ }
+ else
+ {
+ feedback->InstantFeedback( this, ETouchFeedbackPopUp,
+ ETouchFeedbackVibra, TPointerEvent() );
+ }
+ }
GfxTransEffect::NotifyExternalState(ECaptureComponentsBegin, (const TDesC8*)this);
TRect demarcation;
@@ -1573,13 +1699,14 @@
// Claim pointer grab and send the pointer up event to the
// control that otherwise would be receiving the drag events.
Window().ClaimPointerGrab(ETrue);
-
+ _AKNTRACE_FUNC_EXIT;
return(WaitAsRequired());
}
EXPORT_C void CEikDialog::Draw(const TRect& /*aRect*/) const
{
+ _AKNTRACE_FUNC_ENTER;
TRect rect=Rect();
CWindowGc& gc=SystemGc(); //No reason to demote the gc, CWindowGc is more usable.
@@ -1667,6 +1794,7 @@
KAknsIIDQsnFrPopup,KAknsIIDQsnFrPopupCenter);
}
}
+ _AKNTRACE_FUNC_EXIT;
}
EXPORT_C void CEikDialog::HandlePointerEventL(const TPointerEvent& aPointerEvent)
@@ -1681,6 +1809,7 @@
TKeyResponse CEikDialog::TryAnimateButtonAndExitL(TInt aKeycode)
{
+ _AKNTRACE_FUNC_ENTER;
TInt buttonId=EEikBidCancel;
switch (aKeycode)
{
@@ -1704,17 +1833,26 @@
if (button)
{
- if (button->IsDimmed() || !button->IsVisible())
- return EKeyWasNotConsumed;
- buttonGroupContainer.AnimateCommand(buttonId);
+ TBool animateCommand = ( !button->IsDimmed() && button->IsVisible() );
+
+ if ( !animateCommand && buttonId != EEikBidCancel )
+ {
+ _AKNTRACE_FUNC_EXIT;
+ return EKeyWasNotConsumed;
+ }
+ else if ( animateCommand )
+ {
+ buttonGroupContainer.AnimateCommand( buttonId );
+ }
}
if (button || buttonId==EEikBidCancel || buttonId==EEikBidOk)
{
TryExitL(buttonId);
+ _AKNTRACE_FUNC_EXIT;
return EKeyWasConsumed;
}
-
+ _AKNTRACE_FUNC_EXIT;
return EKeyWasNotConsumed;
}
@@ -1735,7 +1873,7 @@
*/
EXPORT_C TKeyResponse CEikDialog::OfferKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aType)
{
-
+ _AKNTRACE_FUNC_ENTER;
// Hide the tool tip (if there is one!)
if ( ( iPageSelector->NumPages() == 1 ) && ( CurrentLine() ) && ( CurrentLine()->ToolTipText( ) ) )
@@ -1750,7 +1888,10 @@
if (!(iDialogFlags&EEikDialogFlagDontEatUpDownEvents) && aKeyEvent.iScanCode != EStdKeyYes)
{
if (aType!=EEventKey)
- return(EKeyWasConsumed);
+ {
+ _AKNTRACE_FUNC_EXIT;
+ return(EKeyWasConsumed);
+ }
}
TInt code=aKeyEvent.iCode;
@@ -1763,7 +1904,10 @@
{
response = iButtonGroupContainer->OfferKeyEventL(aKeyEvent,aType);
if(response==EKeyWasConsumed)
- return EKeyWasConsumed;
+ {
+ _AKNTRACE_FUNC_EXIT;
+ return EKeyWasConsumed;
+ }
}
//
@@ -1786,7 +1930,10 @@
iPageSelector->OfferKeyEventL(aKeyEvent, aType);
// Add to remove repeated keypress return event of OK key
if (aKeyEvent.iRepeats&&EKeyOK==code)
- return EKeyWasConsumed;
+ {
+ _AKNTRACE_FUNC_EXIT;
+ return EKeyWasConsumed;
+ }
if ((!(modifiers&EModifierCtrl) || modifiers&EModifierPureKeycode) &&
!(iDialogFlags&EEikDialogFlagModeless))
TryAnimateButtonAndExitL(code);
@@ -1808,10 +1955,12 @@
break;
KeyToFocus:
if(iPageSelector->OfferHotKeysKeyEventL(aKeyEvent,aType)==EKeyWasConsumed)
- return EKeyWasConsumed;
-
+ {
+ _AKNTRACE_FUNC_EXIT;
+ return EKeyWasConsumed;
+ }
}
-
+ _AKNTRACE_FUNC_EXIT;
return (aKeyEvent.iScanCode == EStdKeyYes ? EKeyWasNotConsumed:EKeyWasConsumed);
}
@@ -1820,6 +1969,7 @@
*/
EXPORT_C void CEikDialog::FocusChanged(TDrawNow aDrawNow)
{
+ _AKNTRACE_FUNC_ENTER;
CEikBorderedControl::FocusChanged( aDrawNow );
TInt controlID = IdOfFocusControl();
@@ -1827,6 +1977,7 @@
{
Line(controlID)->SetFocus(IsFocused(), aDrawNow);
}
+ _AKNTRACE_FUNC_EXIT;
}
/**
@@ -1840,102 +1991,177 @@
*/
EXPORT_C void CEikDialog::TryExitL(TInt aButtonId)
{
- if ( iDialogFlags & EEikDialogFlagNoUserExit )
+ _AKNTRACE("CEikDialog::TryExitL iDialogFlags = %d, buttonId = %d", iDialogFlags, aButtonId);
+ if (iDialogFlags & EEikDialogFlagNoUserExit)
{
- return;
+ return;
}
// use delayed exit if pointer event handling is in progress
- if ( Extension()->iPublicFlags.IsSet( CEikDialogExtension::EDelayedExit ) )
+ if (Extension()->iPublicFlags.IsSet(CEikDialogExtension::EDelayedExit))
{
Extension()->iButtonId = aButtonId;
Extension()->StartDelayedExit();
+
+ _AKNTRACE("CEikDialog::TryExitL return with delayedExit");
return;
}
-
- TBool effectTriggered = EFalse;
+
TBool effectButton = aButtonId == EEikBidCancel
|| aButtonId == EAknSoftkeyExit
|| aButtonId == EAknSoftkeyBack
|| aButtonId == EAknSoftkeyNo;
#ifdef RD_UI_TRANSITION_EFFECTS_POPUPS
effectButton = effectButton
- || aButtonId == EAknSoftkeyClose
- || aButtonId == EAknSoftkeyDone;
+ || aButtonId == EAknSoftkeyClose
+ || aButtonId == EAknSoftkeyDone
+ || aButtonId == EAknSoftkeyOk;
#endif
- CAknAppUi* aknAppUi = static_cast<CAknAppUi*>( iEikonEnv->EikAppUi() );
- if ( GfxTransEffect::IsRegistered( this ) && IsVisible() && effectButton
+
+ TBool effectTriggered = EFalse;
+ CAknAppUi* aknAppUi = static_cast<CAknAppUi*>(iEikonEnv->EikAppUi());
+
+ MTouchFeedback* feedback = NULL;
+ if(AknLayoutUtils::PenEnabled())
+ {
+ feedback = static_cast<MTouchFeedback*>(ExtensionInterface(KExIfTactileFeedbackUid));
+ }
+
+ if (!(iDialogFlags & EEikDialogFlagDelayEffects)
+ && IsFocusedWindowGroup( this )
+ && GfxTransEffect::IsRegistered(this) && IsVisible() && effectButton
#ifdef RD_UI_TRANSITION_EFFECTS_POPUPS
- && !(iDialogFlags&EEikDialogFlagSleeping)
+ && !(iDialogFlags & EEikDialogFlagSleeping)
#endif
- && ( !aknAppUi->IsFullScreenApp() || aknAppUi->IsForeground() )
+ && (!aknAppUi->IsFullScreenApp() || aknAppUi->IsForeground())
&& !IsBlankScreenDisplayed()
- )
+ )
{
CAknTransitionUtils::SetAllParents(this);
GfxTransEffect::Begin(this, KGfxControlDisappearAction);
+
+ if(feedback)
+ {
+ if(CAknTransitionUtils::TransitionsEnabled(AknTransEffect::EComponentTransitionsOff))
+ {
+ feedback->InstantFeedback(this, ETouchFeedbackDecreasingPopUp,
+ ETouchFeedbackVibra, TPointerEvent());
+ }
+ else
+ {
+ feedback->InstantFeedback(this, ETouchFeedbackPopUp,
+ ETouchFeedbackVibra, TPointerEvent());
+ }
+ }
+
GfxTransEffect::NotifyExternalState(ECaptureComponentsBegin, (const TDesC8*)this);
-
TRect demarcation;
- CAknTransitionUtils::GetDemarcation(CAknTransitionUtils::EPopup,
- demarcation);
+ CAknTransitionUtils::GetDemarcation(CAknTransitionUtils::EPopup, demarcation);
GfxTransEffect::SetDemarcation(this, demarcation);
effectTriggered = ETrue;
}
- if (aButtonId!=EEikBidCancel)
+ if (aButtonId != EEikBidCancel)
+ {
PrepareForFocusTransitionL();
- else if (!(iDialogFlags&EEikDialogFlagNotifyEsc))
- goto finished;
- if (!OkToExitL(aButtonId))
- {
- if ( effectTriggered )
+ }
+ else if (!(iDialogFlags & EEikDialogFlagNotifyEsc))
+ {
+ goto finished;
+ }
+
+ if (!OkToExitL(aButtonId))
+ {
+ if (effectTriggered)
{
- GfxTransEffect::NotifyExternalState( ECaptureComponentsAbort,
- ( const TDesC8* ) this );
- GfxTransEffect::Abort( this );
- }
- return;
+ GfxTransEffect::NotifyExternalState(ECaptureComponentsAbort, (const TDesC8*)this);
+ GfxTransEffect::Abort(this);
}
-
- if (aButtonId!=EEikBidCancel)
- GetAutoValues();
+
+ // Draw again in cast any content change in OkToExitL
+ DrawDeferred();
+
+ _AKNTRACE("CEikDialog::TryExitL return with OkToExitL false");
+ return;
+ }
+
+ if (aButtonId != EEikBidCancel)
+ {
+ GetAutoValues();
+ }
+
finished:
+
if (iExitConfirmed)
- *iExitConfirmed=((MappedCommandId( aButtonId ) ==EEikBidCancel)? 0: aButtonId);
+ {
+ *iExitConfirmed = MappedCommandId(aButtonId) == EEikBidCancel ? 0 : aButtonId;
+ }
// Remove content observer in order to prevent unnecessary layout
// calculations in dialog shutdown.
- EnableContentObserver( EFalse );
-
- if (iDialogFlags&EEikDialogFlagSleeping)
- ExitSleepingDialog();
- else
- {
+ EnableContentObserver(EFalse);
+
+ if (iDialogFlags & EEikDialogFlagSleeping)
+ {
+ ExitSleepingDialog();
+ }
+ else
+ {
// Remove content observer in order to prevent unnecessary layout
// calculations in dialog shutdown.
- EnableContentObserver( EFalse );
-
- if ( effectTriggered )
- {
- MakeVisible(EFalse);
- CAknTransitionUtils::MakeVisibleSubComponents( this,
- CAknTransitionUtils::EForceInvisible );
-
- GfxTransEffect::NotifyExternalState(ECaptureComponentsEnd, (const TDesC8*)this);
- GfxTransEffect::End(this);
- }
- else
- {
- MakeVisible(EFalse);
- CAknTransitionUtils::MakeVisibleSubComponents( this,
- CAknTransitionUtils::EForceInvisible );
- GfxTransEffect::NotifyExternalState( ECaptureComponentsAbort,
- ( const TDesC8* ) this );
- GfxTransEffect::Abort(this);
- }
- delete(this);
- }
+ EnableContentObserver(EFalse);
+
+ // The dialog is asked to postpone the effect after OkToExitL.
+ if ((iDialogFlags & EEikDialogFlagDelayEffects) && !effectTriggered)
+ {
+ if (GfxTransEffect::IsRegistered(this) && IsVisible() && effectButton
+ && (!aknAppUi->IsFullScreenApp() || aknAppUi->IsForeground())
+ && !IsBlankScreenDisplayed()
+ )
+ {
+ TRect demarcation;
+ CAknTransitionUtils::SetAllParents(this);
+ GfxTransEffect::Begin(this, KGfxControlDisappearAction);
+
+ if(feedback)
+ {
+ if(CAknTransitionUtils::TransitionsEnabled(AknTransEffect::EComponentTransitionsOff))
+ {
+ feedback->InstantFeedback(this, ETouchFeedbackDecreasingPopUp,
+ ETouchFeedbackVibra, TPointerEvent());
+ }
+ else
+ {
+ feedback->InstantFeedback(this, ETouchFeedbackPopUp,
+ ETouchFeedbackVibra , TPointerEvent());
+ }
+ }
+
+ GfxTransEffect::NotifyExternalState(ECaptureComponentsBegin, (const TDesC8*)this);
+ CAknTransitionUtils::GetDemarcation(CAknTransitionUtils::EPopup, demarcation);
+ GfxTransEffect::SetDemarcation(this, demarcation);
+ effectTriggered = ETrue;
+ }
+ }
+
+ if (effectTriggered)
+ {
+ MakeVisible(EFalse);
+ CAknTransitionUtils::MakeVisibleSubComponents(this, CAknTransitionUtils::EForceInvisible);
+ GfxTransEffect::NotifyExternalState(ECaptureComponentsEnd, (const TDesC8*)this);
+ GfxTransEffect::End(this);
+ }
+ else
+ {
+ // Why we need abort the effect here ??
+ MakeVisible(EFalse);
+ CAknTransitionUtils::MakeVisibleSubComponents(this, CAknTransitionUtils::EForceInvisible);
+ GfxTransEffect::NotifyExternalState(ECaptureComponentsAbort, (const TDesC8*)this);
+ GfxTransEffect::Abort(this);
+ }
+ delete(this);
+ }
+ _AKNTRACE_FUNC_EXIT;
}
/**
@@ -2063,6 +2289,7 @@
*/
EXPORT_C void CEikDialog::SetInitialCurrentLine()
{
+ _AKNTRACE_FUNC_ENTER;
if ( !iExtension->iInitialMade )
{
TRAP_IGNORE(iPageSelector->ActivateFirstPageL());
@@ -2071,6 +2298,7 @@
{
iPageSelector->SetInitialFocus();
}
+ _AKNTRACE_FUNC_EXIT;
}
/**
@@ -2199,7 +2427,7 @@
*/
EXPORT_C void CEikDialog::HandleResourceChange(TInt aType)
{
-
+ _AKNTRACE_FUNC_ENTER;
if(aType==KEikDynamicLayoutVariantSwitch)
{
if (IsVisible())
@@ -2207,7 +2435,14 @@
else if (iExtension)
iExtension->iFlags.Set(CEikDialogExtension::ELayoutChangeWhileInvisible);
- CCoeControl::HandleResourceChange(aType);
+ TBool isForm = ( iPageSelector && iPageSelector->IsForm() );
+
+ if ( !isForm )
+ {
+ CCoeControl::HandleResourceChange( aType );
+ }
+
+ _AKNTRACE_FUNC_EXIT;
return;
}
else
@@ -2215,32 +2450,39 @@
CCoeControl::HandleResourceChange(aType);
}
- if( !CAknEnv::Static()->TransparencyEnabled() && aType==KEikColorResourceChange)
- {
- Window().SetBackgroundColor(iEikonEnv->ControlColor(EColorDialogBackground,*this));
- }
+ _AKNTRACE_FUNC_EXIT;
}
void CEikDialog::DoResourceChangeLayout()
{
// Layout must be forced through - bypass optimisations
// Must work through all pages
-
+ _AKNTRACE_FUNC_ENTER;
Layout();
- SizeChanged();
+
+ TBool isForm = ( iPageSelector && iPageSelector->IsForm() );
- TInt lastPage = ( iPageSelector->PageContainer()->NumPages() - 1 );
- TInt pageIndex = 0;
- CEikDialogPage* page;
-
- while ( pageIndex++ <= lastPage )
+ if ( !isForm )
{
- page = iPageSelector->PageContainer()->Page( pageIndex );
- page->HandleResourceChange( KEikDynamicLayoutVariantSwitch );
+ SizeChanged();
+ }
+
+ if( iPageSelector )
+ {
+ TInt lastPage = ( iPageSelector->PageContainer()->NumPages() - 1 );
+ TInt pageIndex = 0;
+ CEikDialogPage* page( NULL );
+
+ while ( pageIndex++ <= lastPage )
+ {
+ page = iPageSelector->PageContainer()->Page( pageIndex );
+ page->HandleResourceChange( KEikDynamicLayoutVariantSwitch );
+ }
}
if (iExtension)
iExtension->iFlags.Clear(CEikDialogExtension::ELayoutChangeWhileInvisible);
+ _AKNTRACE_FUNC_EXIT;
}
/**
@@ -2284,6 +2526,8 @@
EXPORT_C void CEikDialog::MakeVisible(TBool aVisible)
{
+ _AKNTRACE_FUNC_ENTER;
+ _AKNTRACE( "CEikDialog::MakeVisible(): [%d]", aVisible );
if (iExtension && iExtension->iFlags[CEikDialogExtension::ELayoutChangeWhileInvisible])
DoResourceChangeLayout();
@@ -2301,7 +2545,7 @@
}
CEikBorderedControl::MakeVisible(aVisible);
-
+ _AKNTRACE_FUNC_EXIT;
}
void CEikDialog::FadeBehindPopup(TBool aFade)
@@ -2428,9 +2672,14 @@
{
control = dlgPage->LineOnPageOrNull(i++);
if (control)
- aControls.Append(control);
+ {
+ if ( KErrNone != aControls.Append(control) )
+ {
+ return;
+ }
+ }
}
- while (control != NULL);
+ while (control != NULL);
}
EXPORT_C TInt CEikDialog::DialogFlags()
@@ -2504,6 +2753,7 @@
EXPORT_C void CEikDialog::UpdatePageL(TBool aRedraw)
{
+ _AKNTRACE_FUNC_ENTER;
if (Rect().Height())
{
if (iPageSelector)
@@ -2517,11 +2767,13 @@
DrawDeferred();
}
}
+ _AKNTRACE_FUNC_EXIT;
}
EXPORT_C TInt CEikDialog::GetNumberOfLinesOnPage(TInt aPageIndex) const
{
+ _AKNTRACE_FUNC_ENTER;
if (iPageSelector)
{
CEikDialogPageContainer* pageContainer = iPageSelector->PageContainer();
@@ -2529,20 +2781,33 @@
{
CEikDialogPage* page = pageContainer->Page(aPageIndex);
if (page)
- return page->NumberOfLines();
+ {
+ _AKNTRACE( "CEikDialog::GetNumberOfLinesOnPage(): [%d]", page->NumberOfLines() );
+ _AKNTRACE_FUNC_EXIT;
+ return page->NumberOfLines();
+ }
}
}
+ _AKNTRACE( "CEikDialog::GetNumberOfLinesOnPage(): 0");
+ _AKNTRACE_FUNC_EXIT;
return 0;
}
EXPORT_C TInt CEikDialog::GetNumberOfPages() const
{
+ _AKNTRACE_FUNC_ENTER;
if (iPageSelector)
{
CEikDialogPageContainer* pageContainer = iPageSelector->PageContainer();
if (pageContainer)
- return pageContainer->NumPages();
+ {
+ _AKNTRACE( "CEikDialog::GetNumberOfPages(): [%d]", pageContainer->NumPages() );
+ _AKNTRACE_FUNC_EXIT;
+ return pageContainer->NumPages();
+ }
}
+ _AKNTRACE( "CEikDialog::GetNumberOfPages(): return 0;" );
+ _AKNTRACE_FUNC_EXIT;
return 0;
}
@@ -3049,7 +3314,8 @@
// softkeys
if ( iExtension && CbaEmbeddedInDialog( iDialogFlags ) )
{
- TSize dialogSize( Rect().Size() );
+ TRect oldDialogRect( Rect() );
+ TSize dialogSize( oldDialogRect.Size() );
CEikCba* cba = static_cast<CEikCba*>(
iButtonGroupContainer->ButtonGroup() );
TBool cbaVisible( cba->IsVisible() && !cba->IsEmpty() );
@@ -3074,8 +3340,14 @@
dialogSize.iHeight -= cbaRect.Rect().Height();
}
- SetRect( TRect(
- AknPopupUtils::Position( dialogSize, this ), dialogSize ) );
+ TRect newDialogRect( AknPopupUtils::Position( dialogSize, cbaVisible ),
+ dialogSize );
+ SetRect( newDialogRect );
+
+ if ( oldDialogRect != newDialogRect )
+ {
+ DrawDeferred();
+ }
}
}
@@ -3123,6 +3395,7 @@
const TInt KWgPriorityOfBlankScreen = 10000; // copied from akncapserverentry.cpp
TBool IsBlankScreenDisplayed()
{
+ _AKNTRACE_FUNC_ENTER;
TBool isBlankScreenDisplayed(EFalse);
RWsSession& wsSession = CEikonEnv::Static()->WsSession();
@@ -3132,7 +3405,7 @@
if (KErrNone == wsSession.WindowGroupList(wgIds) && wgIds->Count() > 0)
{
TInt priority = wsSession.GetWindowGroupOrdinalPriority(wgIds->At(0));
- RDebug::Printf("IsBlankScreenDisplayed():priority:%d",priority);
+ _AKNTRACE( "IsBlankScreenDisplayed():priority: [%d]", priority );
if (priority == KWgPriorityOfBlankScreen)
{
isBlankScreenDisplayed = ETrue;
@@ -3140,7 +3413,8 @@
}
}
delete wgIds;
- RDebug::Printf("IsBlankScreenDisplayed():isBlankScreenDisplayed:%d",isBlankScreenDisplayed);
+ _AKNTRACE( "IsBlankScreenDisplayed():isBlankScreenDisplayed: [%d]", isBlankScreenDisplayed );
+ _AKNTRACE_FUNC_EXIT;
return isBlankScreenDisplayed;
}