diff -r d721605b30d0 -r 89165693e770 idlehomescreen/xmluirendering/uiengine/src/xncontroladapterimpl.cpp --- a/idlehomescreen/xmluirendering/uiengine/src/xncontroladapterimpl.cpp Mon Jun 21 15:27:11 2010 +0300 +++ b/idlehomescreen/xmluirendering/uiengine/src/xncontroladapterimpl.cpp Thu Jul 15 18:25:29 2010 +0300 @@ -28,6 +28,7 @@ #include #include #include +#include #ifdef RD_TACTILE_FEEDBACK #include #endif // RD_TACTILE_FEEDBACK @@ -62,6 +63,7 @@ #include "xneditmode.h" _LIT8(KScrollableBoxNodeName, "scrollablebox"); +_LIT8( KView, "view" ); // Constants const TInt KSkinGfxInnerRectShrink = 5; @@ -72,7 +74,8 @@ const TInt KLongTapTimeShortDelay( 600000 ); // 0.6s for SK const TInt KLongTapTimeLongDelay( 1500000 ); // 1.5s -const TInt KDragThreshold = 20; // pixels +const TInt KDragThreshold = 100; // pixels +const TInt KMaxTapMove = 100; //100x100 pixels const TReal KEps( 3e-16 ); // proximite EPS value for double FP numbers @@ -3589,6 +3592,7 @@ } delete iGestureFw; + delete iSuppressor; } // ----------------------------------------------------------------------------- @@ -3883,7 +3887,7 @@ // TBool CXnControlAdapterImpl::HandlePointerEventL( const TPointerEvent& aPointerEvent ) - { + { const TPointerEvent& event( aPointerEvent ); CXnNode* node( &iNode.Node() ); @@ -3912,6 +3916,12 @@ return ETrue; } } + else if ( iSuppressor && + iSuppressor->SuppressPointerEvent( aPointerEvent ) ) + { + // if view does not handle swipe we have to pass event to children + return ( iGestureDestination == node ); + } CAknLongTapDetector* detector( iAdapter->LongTapDetector() ); @@ -3987,8 +3997,7 @@ { if ( node->IsStateSet( XnPropertyNames::style::common::KFocus ) ) { - if ( IsDragThresholdExceeded( event.iPosition ) || - !node->MarginRect().Contains( event.iPosition ) ) + if ( IsDragThresholdExceeded( event.iPosition ) ) { // Remove focus node->UnsetStateL( @@ -4003,9 +4012,8 @@ if ( menuBar ) { node->SetStateL( XnPropertyNames::style::common::KActive ); - } - else if ( ( node->MarginRect().Contains( event.iPosition ) && - node->IsStateSet( XnPropertyNames::style::common::KFocus ) ) ) + } + else if ( node->IsStateSet( XnPropertyNames::style::common::KFocus ) ) { #ifdef RD_TACTILE_FEEDBACK MTouchFeedback* feedback( MTouchFeedback::Instance() ); @@ -5305,6 +5313,13 @@ iGestureFw = CAknTouchGestureFw::NewL( *this, aAdapter ); iGestureFw->SetGestureInterestL( EAknTouchGestureFwGroupFlick ); } + + if ( aNode.Type()->Type() == KView ) + { + iSuppressor = CAknPointerEventSuppressor::NewL(); + iSuppressor->SetMaxTapMove( TSize( KMaxTapMove, KMaxTapMove) ); + iSuppressor->SetMaxTapDuration( KLongTapTimeLongDelay ); + } } // -----------------------------------------------------------------------------