diff -r fcdfafb36fe7 -r aecbbf00d063 uifw/AvKon/src/aknPopup.cpp --- a/uifw/AvKon/src/aknPopup.cpp Thu Aug 19 10:11:06 2010 +0300 +++ b/uifw/AvKon/src/aknPopup.cpp Tue Aug 31 15:28:30 2010 +0300 @@ -30,7 +30,6 @@ #include #include #include -#include #ifdef RD_UI_TRANSITION_EFFECTS_POPUPS #include @@ -38,6 +37,7 @@ #endif #include + #include "aknPopup.h" #include "akntrace.h" #include "aknitemactionmenuregister.h" @@ -239,7 +239,7 @@ // last member ste before the actiave scheduler is started. // Reset action menu register - AknItemActionMenuRegister::RemoveConstructingMenuBarOwner( this ); + AknItemActionMenuRegister::SetConstructingMenuBarOwnerL( NULL ); _AKNTRACE_FUNC_EXIT; } @@ -303,7 +303,8 @@ iListBox->SetBorder(TGulBorder::ENone); // Create extension class - iPopupListExtension = new (ELeave) CAknPopupListExtension(); + if (!iPopupListExtension) + iPopupListExtension = new (ELeave) CAknPopupListExtension(); CAknAppUi* appUi = static_cast( iEikonEnv->EikAppUi() ); if ( appUi && appUi->IsSingleClickCompatible() ) @@ -383,25 +384,6 @@ { _AKNTRACE_FUNC_ENTER; __ASSERT_DEBUG(iListBox,Panic(EAknPanicListboxUndefined)); - if ( AknLayoutUtils::PenEnabled() ) - { - MTouchFeedback* feedback = MTouchFeedback::Instance(); - if ( feedback ) - { - TTouchLogicalFeedback fbLogicalType = ETouchFeedbackPopUp; - if ( CAknTransitionUtils::TransitionsEnabled( - AknTransEffect::EComponentTransitionsOff ) ) - { - fbLogicalType = ETouchFeedbackIncreasingPopUp; - } - feedback->InstantFeedback( - this, - fbLogicalType, - ETouchFeedbackVibra, - TPointerEvent() ); - } - } - iPopoutCba->SetBoundingRect(TRect(iAvkonAppUi->ApplicationRect().Size())); // Disable item specific menu just before the popup is about to be shown. @@ -419,7 +401,6 @@ STATIC_CAST(CAknFilteredTextListBoxModel*, ListBox()->Model())->Filter()->SetSearchField( NULL ); FindBox()->Editor().SetFocus( EFalse ); - __ASSERT_DEBUG( iPopupListExtension, Panic( EAknPanicNullPointer ) ); delete iPopupListExtension->iSearchControl; iPopupListExtension->iSearchControl = NULL; } @@ -669,7 +650,6 @@ { _AKNTRACE_FUNC_ENTER; _AKNTRACE("ProcessCommandL: aCommandId=%d", aCommandId); - __ASSERT_DEBUG( iPopupListExtension, Panic( EAknPanicNullPointer ) ); // Respond to softkey events switch (aCommandId) { @@ -729,7 +709,6 @@ EXPORT_C void CAknPopupList::HandleListBoxEventL(CEikListBox* aListBox, TListBoxEvent aEventType) { _AKNTRACE_FUNC_ENTER; - __ASSERT_DEBUG( iPopupListExtension, Panic( EAknPanicNullPointer ) ); // Respond to events from listbox if (aListBox == iListBox) { @@ -819,7 +798,6 @@ EXPORT_C void CAknPopupList::AttemptExitL(TBool aAccept) { _AKNTRACE_FUNC_ENTER; - __ASSERT_DEBUG( iPopupListExtension, Panic( EAknPanicNullPointer ) ); //EFTG-7HWDP6. if( FindBox() && !( FindBox()->Editor().AknEdwinFlags() & EAknEditorFlagTouchInputModeOpened ) @@ -844,24 +822,6 @@ } else if( !(iPopupListExtension->iFlags & EPopupFepStartEvent) ) { - if ( AknLayoutUtils::PenEnabled() ) - { - MTouchFeedback* feedback = MTouchFeedback::Instance(); - if ( feedback ) - { - TTouchLogicalFeedback fbLogicalType = ETouchFeedbackPopUp; - if ( CAknTransitionUtils::TransitionsEnabled( - AknTransEffect::EComponentTransitionsOff ) ) - { - fbLogicalType = ETouchFeedbackDecreasingPopUp; - } - feedback->InstantFeedback( - this, - fbLogicalType, - ETouchFeedbackVibra, - TPointerEvent() ); - } - } #ifdef RD_UI_TRANSITION_EFFECTS_POPUPS // no transition if accepted if( IsVisible() && GfxTransEffect::IsRegistered(this) && !aAccept ) @@ -951,7 +911,6 @@ TInt softkeyHeight( KSoftkeyHeightUndefined ); - __ASSERT_DEBUG( iPopupListExtension, Panic( EAknPanicNullPointer ) ); if (!iPopupListExtension->iBgContext) { TRAP_IGNORE( iPopupListExtension->iBgContext = CAknsFrameBackgroundControlContext::NewL( @@ -1118,8 +1077,7 @@ } if (aId.iUid == MAknsControlContext::ETypeId) { - __ASSERT_DEBUG( iPopupListExtension, Panic( EAknPanicNullPointer ) ); - if (iPopupListExtension->iBgContext) + if (iPopupListExtension && iPopupListExtension->iBgContext) { return MAknsControlContext::SupplyMopObject(aId, iPopupListExtension->iBgContext); } @@ -1173,7 +1131,6 @@ if ( AknLayoutUtils::PenEnabled() ) { - __ASSERT_DEBUG( iPopupListExtension, Panic( EAknPanicNullPointer ) ); iPopupListExtension->iFlags |= EPopupHandlingPointerEvent; TInt index; @@ -1205,6 +1162,10 @@ { AttemptExitL( ETrue ); } + else + { + AttemptExitL( EFalse ); + } } //EFTG-7HWDP6. @@ -1218,11 +1179,24 @@ break; case TPointerEvent::EButton1Down: _AKNTRACE("CAknPopupList::HandlePointerEventL: TPointerEvent::EButton1Down"); - if ( FindBox() - && ( FindBox()->Editor().Rect().Contains( aPointerEvent.iPosition ) ) - && !( iPopupListExtension->iFlags & EPopupLayoutSwitchEvent ) ) + // as in comments close popup if pointer goes outside of the popup list + if ( !Rect().Contains( aPointerEvent.iPosition ) ) { - iPopupListExtension->iFlags |= EPopupFepStartEvent; + MTouchFeedback* feedback = MTouchFeedback::Instance(); + if ( feedback ) + { + feedback->InstantFeedback( ETouchFeedbackPopUp ); + } + AttemptExitL( EFalse ); + } + else + { + if( FindBox() + && ( FindBox()->Editor().Rect().Contains( aPointerEvent.iPosition ) ) + && !( iPopupListExtension->iFlags & EPopupLayoutSwitchEvent ) ) + { + iPopupListExtension->iFlags |= EPopupFepStartEvent; + } } break; case TPointerEvent::EDrag: @@ -1246,7 +1220,8 @@ EXPORT_C TBool CAknPopupList::EnableFind(TBool /*aEnable*/) { - __ASSERT_DEBUG( iPopupListExtension, Panic( EAknPanicNullPointer ) ); + if (!iPopupListExtension) + return EFalse; // no extension class, failed if (!iPopupListExtension->iSearchControl) { CAknSearchField::TSearchFieldStyle flags = CAknSearchField::EPopupWindow; @@ -1278,7 +1253,8 @@ EXPORT_C TBool CAknPopupList::EnableAdaptiveFind(TBool /*aEnable*/) { - __ASSERT_DEBUG( iPopupListExtension, Panic( EAknPanicNullPointer ) ); + if (!iPopupListExtension) + return EFalse; // no extension class, failed if (!iPopupListExtension->iSearchControl) { CAknSearchField::TSearchFieldStyle flags = CAknSearchField::EPopupAdaptiveSearchWindow; @@ -1311,8 +1287,9 @@ EXPORT_C CAknSearchField* CAknPopupList::FindBox() const { - __ASSERT_DEBUG( iPopupListExtension, Panic( EAknPanicNullPointer ) ); - return iPopupListExtension->iSearchControl; + if (iPopupListExtension) + return iPopupListExtension->iSearchControl; + return NULL; } void CAknPopupList::RemoveFindFiltering() @@ -1333,7 +1310,7 @@ _AKNTRACE_FUNC_ENTER; if( aType == KEikDynamicLayoutVariantSwitch ) { - __ASSERT_DEBUG( iPopupListExtension, Panic( EAknPanicNullPointer ) ); + //EFTG-7HWDP6. //Tapping Edit'area can arouse the CAknPopupList::HandleResourceChange() //when portrait is initial model, and 'Full screen QWERTY keyboard' is default input method.