From: Joogab Yun Date: Mon, 7 Sep 2020 05:58:00 +0000 (+0900) Subject: Revert "[Tizen] Revert "Changes after touch consumed behaviour change"" X-Git-Tag: submit/tizen/20200908.102446~9 X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=commitdiff_plain;h=af1671c4205934038b6d13a7b355091bb840b689 Revert "[Tizen] Revert "Changes after touch consumed behaviour change"" This reverts commit a05ee3025d74d4531e1b608a4b836dcb0b308784. --- diff --git a/dali-toolkit/internal/controls/buttons/button-impl.cpp b/dali-toolkit/internal/controls/buttons/button-impl.cpp index a16117a..3bebcde 100644 --- a/dali-toolkit/internal/controls/buttons/button-impl.cpp +++ b/dali-toolkit/internal/controls/buttons/button-impl.cpp @@ -630,11 +630,7 @@ bool Button::OnAccessibilityActivated() bool Button::OnTouch( Actor actor, const TouchEvent& touch ) { - - // Only events are processed when the button is not disabled - auto result( false ); - - if( !IsDisabled() ) + if( !IsDisabled() && (actor == touch.GetHitActor(0)) ) { if ( 1 == touch.GetPointCount() ) { @@ -675,9 +671,8 @@ bool Button::OnTouch( Actor actor, const TouchEvent& touch ) // Sets the button state to the default mButtonPressedState = UNPRESSED; } - result = true; } - return result; + return false; } bool Button::OnKeyboardEnter() diff --git a/dali-toolkit/internal/controls/popup/popup-impl.cpp b/dali-toolkit/internal/controls/popup/popup-impl.cpp index 4502cbe..0d7b93c 100644 --- a/dali-toolkit/internal/controls/popup/popup-impl.cpp +++ b/dali-toolkit/internal/controls/popup/popup-impl.cpp @@ -330,14 +330,14 @@ void Popup::OnInitialize() mPopupLayout.SetFitHeight( 0 ); // Set row to fit. mPopupLayout.SetFitHeight( 1 ); // Set row to fit. - mPopupLayout.TouchSignal().Connect( this, &Popup::OnDialogTouched ); - mPopupContainer.Add( mPopupLayout ); // Any content after this point which is added to Self() will be re-parented to mContent. mAlterAddedChild = true; SetAsKeyboardFocusGroup( true ); + + SetupTouch(); } Popup::~Popup() @@ -593,9 +593,6 @@ void Popup::SetPopupBackgroundImage( Actor image ) mPopupBackgroundImage.SetProperty( Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER ); mPopupBackgroundImage.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER ); - // OnDialogTouched only consumes the event. It prevents the touch event to be caught by the backing. - mPopupBackgroundImage.TouchSignal().Connect( this, &Popup::OnDialogTouched ); - // Set the popup border to be slightly larger than the layout contents. UpdateBackgroundPositionAndSize(); @@ -938,7 +935,6 @@ Toolkit::Control Popup::CreateBacking() // Default to being transparent. backing.SetProperty( Actor::Property::COLOR_ALPHA, 0.0f ); - backing.TouchSignal().Connect( this, &Popup::OnBackingTouched ); backing.WheelEventSignal().Connect( this, &Popup::OnBackingWheelEvent ); return backing; } @@ -1119,7 +1115,11 @@ const std::string& Popup::GetTailRightImage() const void Popup::SetTouchTransparent( bool enabled ) { - mTouchTransparent = enabled; + if( mTouchTransparent != enabled ) + { + mTouchTransparent = enabled; + SetupTouch(); + } } const bool Popup::IsTouchTransparent() const @@ -1534,26 +1534,18 @@ bool Popup::DoConnectSignal( BaseObject* object, ConnectionTrackerInterface* tra bool Popup::OnBackingTouched( Actor actor, const TouchEvent& touch ) { - // Allow events to pass through if touch transparency is enabled. - if( mTouchTransparent ) + // Allow events to pass through if the backing isn't the hit-actor + if( (touch.GetHitActor(0) == actor) && + (touch.GetPointCount() > 0) && + (touch.GetState( 0 ) == PointState::DOWN)) { - return false; - } - - if( touch.GetPointCount() > 0 ) - { - if( touch.GetState( 0 ) == PointState::DOWN ) - { - // Guard against destruction during signal emission. - Toolkit::Popup handle( GetOwner() ); + // Guard against destruction during signal emission. + Toolkit::Popup handle( GetOwner() ); - mTouchedOutsideSignal.Emit(); - } + mTouchedOutsideSignal.Emit(); } - // Block anything behind backing becoming touched. - mLayer.SetProperty( Layer::Property::CONSUMES_TOUCH, true ); - return true; + return false; } bool Popup::OnBackingWheelEvent( Actor actor, const WheelEvent& event ) @@ -1564,22 +1556,13 @@ bool Popup::OnBackingWheelEvent( Actor actor, const WheelEvent& event ) return false; } - // Consume wheel event in dimmed backing actor. - mLayer.SetProperty( Layer::Property::CONSUMES_TOUCH, true ); return true; } bool Popup::OnDialogTouched( Actor actor, const TouchEvent& touch ) { - // Allow events to pass through if touch transparency is enabled. - if( mTouchTransparent ) - { - return false; - } - - // Consume event (stops backing actor receiving touch events) - mLayer.SetProperty( Layer::Property::CONSUMES_TOUCH, true ); - return true; + // Only connecting this so the backing does not become the default hit-actor and inadvertently closes the popup + return false; } void Popup::OnSceneConnection( int depth ) @@ -1975,6 +1958,25 @@ Actor Popup::GetNextKeyboardFocusableActor( Actor currentFocusedActor, Toolkit:: return nextFocusableActor; } +void Popup::SetupTouch() +{ + if( ! mTouchTransparent ) + { + // Connect all the signals and set us up to consume all touch events + mBacking.TouchSignal().Connect( this, &Popup::OnBackingTouched ); + mPopupBackgroundImage.TouchSignal().Connect( this, &Popup::OnDialogTouched ); + mPopupLayout.TouchSignal().Connect( this, &Popup::OnDialogTouched ); + mLayer.SetProperty( Layer::Property::CONSUMES_TOUCH, true ); + } + else + { + // We are touch transparent so disconnect all signals and ensure our layer does not consumed all touch events + mBacking.TouchSignal().Disconnect( this, &Popup::OnBackingTouched ); + mPopupBackgroundImage.TouchSignal().Disconnect( this, &Popup::OnDialogTouched ); + mPopupLayout.TouchSignal().Disconnect( this, &Popup::OnDialogTouched ); + mLayer.SetProperty( Layer::Property::CONSUMES_TOUCH, false ); + } +} } // namespace Internal diff --git a/dali-toolkit/internal/controls/popup/popup-impl.h b/dali-toolkit/internal/controls/popup/popup-impl.h old mode 100755 new mode 100644 index 781871e..17217d6 --- a/dali-toolkit/internal/controls/popup/popup-impl.h +++ b/dali-toolkit/internal/controls/popup/popup-impl.h @@ -2,7 +2,7 @@ #define DALI_TOOLKIT_INTERNAL_POPUP_H /* - * Copyright (c) 2019 Samsung Electronics Co., Ltd. + * Copyright (c) 2020 Samsung Electronics Co., Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -499,6 +499,12 @@ private: */ void AddFocusableChildrenRecursive( Actor parent, std::vector< Actor >& focusableActors ); + /** + * Sets up the touch signals connections as required. + * @note This must be called after all the members have been created. + */ + void SetupTouch(); + private: // Undefined. diff --git a/dali-toolkit/internal/controls/scrollable/item-view/item-view-impl.cpp b/dali-toolkit/internal/controls/scrollable/item-view/item-view-impl.cpp old mode 100755 new mode 100644 index 8f1e7c0..36d00d7 --- a/dali-toolkit/internal/controls/scrollable/item-view/item-view-impl.cpp +++ b/dali-toolkit/internal/controls/scrollable/item-view/item-view-impl.cpp @@ -1142,7 +1142,7 @@ bool ItemView::OnTouch( Actor actor, const TouchEvent& touch ) RemoveAnimation(mScrollAnimation); } - return true; // consume since we're potentially scrolling + return false; // Do not consume as we're potentially scrolling (detecting pan gestures) } void ItemView::OnPan( const PanGesture& gesture ) diff --git a/dali-toolkit/internal/controls/scrollable/scroll-view/scroll-view-impl.cpp b/dali-toolkit/internal/controls/scrollable/scroll-view/scroll-view-impl.cpp old mode 100755 new mode 100644 index 17b3acb..3e4039e --- a/dali-toolkit/internal/controls/scrollable/scroll-view/scroll-view-impl.cpp +++ b/dali-toolkit/internal/controls/scrollable/scroll-view/scroll-view-impl.cpp @@ -2125,7 +2125,7 @@ bool ScrollView::OnTouch( Actor actor, const TouchEvent& touch ) mScrollInterrupted = false; } - return true; + return false; } bool ScrollView::OnWheelEvent(const WheelEvent& event) diff --git a/dali-toolkit/internal/controls/slider/slider-impl.cpp b/dali-toolkit/internal/controls/slider/slider-impl.cpp old mode 100755 new mode 100644 index 07698d1..757bef8 --- a/dali-toolkit/internal/controls/slider/slider-impl.cpp +++ b/dali-toolkit/internal/controls/slider/slider-impl.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017 Samsung Electronics Co., Ltd. + * Copyright (c) 2020 Samsung Electronics Co., Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -240,7 +240,7 @@ bool Slider::OnTouch(Actor actor, const TouchEvent& touch) } } - return true; + return false; } void Slider::OnPan( Actor actor, const PanGesture& gesture ) diff --git a/dali-toolkit/internal/controls/text-controls/text-editor-impl.cpp b/dali-toolkit/internal/controls/text-controls/text-editor-impl.cpp index 0f02151..0709ae0 100755 --- a/dali-toolkit/internal/controls/text-controls/text-editor-impl.cpp +++ b/dali-toolkit/internal/controls/text-controls/text-editor-impl.cpp @@ -1863,7 +1863,7 @@ void TextEditor::OnSceneConnection( int depth ) bool TextEditor::OnTouched( Actor actor, const TouchEvent& touch ) { - return true; + return false; } void TextEditor::OnIdleSignal() diff --git a/dali-toolkit/internal/controls/text-controls/text-field-impl.cpp b/dali-toolkit/internal/controls/text-controls/text-field-impl.cpp index 0ccc9cb..64b3bac 100755 --- a/dali-toolkit/internal/controls/text-controls/text-field-impl.cpp +++ b/dali-toolkit/internal/controls/text-controls/text-field-impl.cpp @@ -1896,7 +1896,7 @@ void TextField::OnSceneConnection( int depth ) bool TextField::OnTouched( Actor actor, const TouchEvent& touch ) { - return true; + return false; } void TextField::OnIdleSignal() diff --git a/dali-toolkit/internal/drag-drop-detector/drag-and-drop-detector-impl.cpp b/dali-toolkit/internal/drag-drop-detector/drag-and-drop-detector-impl.cpp old mode 100755 new mode 100644 index ec4f55f..12d42fe --- a/dali-toolkit/internal/drag-drop-detector/drag-and-drop-detector-impl.cpp +++ b/dali-toolkit/internal/drag-drop-detector/drag-and-drop-detector-impl.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018 Samsung Electronics Co., Ltd. + * Copyright (c) 2020 Samsung Electronics Co., Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -209,7 +209,7 @@ bool DragAndDropDetector::OnDrag(Dali::Actor actor, const Dali::TouchEvent& data } mPointDown = false; } - return true; + return false; } const std::string& DragAndDropDetector::GetContent() const diff --git a/dali-toolkit/internal/text/decorator/text-decorator.cpp b/dali-toolkit/internal/text/decorator/text-decorator.cpp index bfc4686..bee7d9a 100644 --- a/dali-toolkit/internal/text/decorator/text-decorator.cpp +++ b/dali-toolkit/internal/text/decorator/text-decorator.cpp @@ -1386,8 +1386,7 @@ struct Decorator::Impl : public ConnectionTracker SetHandleImage( GRAB_HANDLE ); } - // Consume to avoid pop-ups accidentally closing, when handle is outside of pop-up area - return true; + return false; } bool OnHandleOneTouched( Actor actor, const TouchEvent& touch ) @@ -1417,8 +1416,7 @@ struct Decorator::Impl : public ConnectionTracker SetHandleImage( LEFT_SELECTION_HANDLE ); } - // Consume to avoid pop-ups accidentally closing, when handle is outside of pop-up area - return true; + return false; } bool OnHandleTwoTouched( Actor actor, const TouchEvent& touch ) @@ -1448,8 +1446,7 @@ struct Decorator::Impl : public ConnectionTracker SetHandleImage( RIGHT_SELECTION_HANDLE ); } - // Consume to avoid pop-ups accidentally closing, when handle is outside of pop-up area - return true; + return false; } void HandleResetPosition( PropertyNotification& source ) diff --git a/dali-toolkit/public-api/controls/control-impl.cpp b/dali-toolkit/public-api/controls/control-impl.cpp old mode 100755 new mode 100644 diff --git a/docs/content/example-code/properties.cpp b/docs/content/example-code/properties.cpp index b015bf8..e8f4d56 100644 --- a/docs/content/example-code/properties.cpp +++ b/docs/content/example-code/properties.cpp @@ -113,7 +113,7 @@ public: valueText << touchedCount; mTagText.SetProperty( TextLabel::Property::TEXT, valueText.str() ); - return true; // Consumed + return true; // Consumed meaning any gestures will be cancelled } // C++ EXAMPLE END