uifw/AvKon/src/aknPopup.cpp
branchRCL_3
changeset 19 aecbbf00d063
parent 9 0aa5fbdfbc30
child 20 d48ab3b357f1
--- 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 <skinlayout.cdl.h>
 #include <aknglobalpopupprioritycontroller.h>
 #include <touchfeedback.h>
-#include <akntranseffect.h>
 
 #ifdef RD_UI_TRANSITION_EFFECTS_POPUPS
 #include <gfxtranseffect/gfxtranseffect.h>
@@ -38,6 +37,7 @@
 #endif
 
 #include <AknTasHook.h>
+
 #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<CAknAppUi*>( 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.