From: Shinwoo Kim Date: Thu, 8 Apr 2021 11:36:48 +0000 (+0900) Subject: atspi: remove property notification X-Git-Tag: dali_2.0.22~2^2 X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=commitdiff_plain;h=5b4855fceb96d9826ec7ce1e9ae33b267145ad25 atspi: remove property notification If a control registers and deregisters accessiblity repeatedly, the number of notification becomes larger and larger. And it makes system slower and slower. This patch is removeing property notification, when a control unregisters accessibility. Change-Id: I99d4831c70aebe148031eba552756fb08f603bc6 --- diff --git a/automated-tests/src/dali-toolkit-internal/utc-Dali-Accessibility-Controls.cpp b/automated-tests/src/dali-toolkit-internal/utc-Dali-Accessibility-Controls.cpp index bd8f3a4..f3d97a9 100644 --- a/automated-tests/src/dali-toolkit-internal/utc-Dali-Accessibility-Controls.cpp +++ b/automated-tests/src/dali-toolkit-internal/utc-Dali-Accessibility-Controls.cpp @@ -98,6 +98,9 @@ int UtcDaliAccessibilityPushButtonStates(void) Dali::Accessibility::TestEnableSC( true ); + /* add to scene and remove from scene to touch AccessibilityDeregister */ + application.GetScene().Add( pushbutton ); + auto states = accessible->GetStates(); DALI_TEST_EQUALS( static_cast< unsigned int >( states[ Accessibility::State::PRESSED ] ), false, TEST_LOCATION ); @@ -108,6 +111,9 @@ int UtcDaliAccessibilityPushButtonStates(void) states = accessible->GetStates(); DALI_TEST_EQUALS( static_cast< unsigned int >( states[ Accessibility::State::PRESSED ] ), true, TEST_LOCATION ); + /* add to scene and remove from scene to touch AccessibilityDeregister */ + application.GetScene().Remove( pushbutton ); + Dali::Accessibility::TestEnableSC( false ); END_TEST; diff --git a/dali-toolkit/internal/controls/control/control-data-impl.cpp b/dali-toolkit/internal/controls/control/control-data-impl.cpp index 1c48bc1..070fa82 100644 --- a/dali-toolkit/internal/controls/control/control-data-impl.cpp +++ b/dali-toolkit/internal/controls/control/control-data-impl.cpp @@ -487,7 +487,7 @@ Control::Impl::~Impl() StopObservingVisual(iter->visual); } - AccessibilityDeregister(); + AccessibilityDeregister(false); // All gesture detectors will be destroyed so no need to disconnect. delete mStartingPinchScale; @@ -1942,12 +1942,32 @@ void Control::Impl::AccessibilityRegister() } } -void Control::Impl::AccessibilityDeregister() +void Control::Impl::AccessibilityDeregister(bool remove) { if(accessibilityNotificationSet) { + accessibilityNotificationPosition.NotifySignal().Disconnect(&Control::Impl::PositionOrSizeChangedCallback); + if(remove) + { + mControlImpl.Self().RemovePropertyNotification(accessibilityNotificationPosition); + } + accessibilityNotificationPosition.Reset(); accessibilityNotificationPosition = {}; + + accessibilityNotificationSize.NotifySignal().Disconnect(&Control::Impl::PositionOrSizeChangedCallback); + if(remove) + { + mControlImpl.Self().RemovePropertyNotification(accessibilityNotificationSize); + } + accessibilityNotificationSize.Reset(); accessibilityNotificationSize = {}; + + accessibilityNotificationCulled.NotifySignal().Disconnect(&Control::Impl::CulledChangedCallback); + if(remove) + { + mControlImpl.Self().RemovePropertyNotification(accessibilityNotificationCulled); + } + accessibilityNotificationCulled.Reset(); accessibilityNotificationCulled = {}; accessibilityNotificationSet = false; } diff --git a/dali-toolkit/internal/controls/control/control-data-impl.h b/dali-toolkit/internal/controls/control/control-data-impl.h index 492461e..a3ab6c0 100644 --- a/dali-toolkit/internal/controls/control/control-data-impl.h +++ b/dali-toolkit/internal/controls/control/control-data-impl.h @@ -544,7 +544,7 @@ public: Dali::Accessibility::Accessible* GetAccessibilityObject(); void AccessibilityRegister(); - void AccessibilityDeregister(); + void AccessibilityDeregister(bool remove); std::function(Actor)> accessibilityConstructor; std::unique_ptr accessibilityObject; diff --git a/dali-toolkit/public-api/controls/control-impl.cpp b/dali-toolkit/public-api/controls/control-impl.cpp index 2c90452..62b1079 100644 --- a/dali-toolkit/public-api/controls/control-impl.cpp +++ b/dali-toolkit/public-api/controls/control-impl.cpp @@ -605,7 +605,7 @@ void Control::OnSceneDisconnection() { if(Accessibility::IsUp()) { - mImpl->AccessibilityDeregister(); + mImpl->AccessibilityDeregister(true); } mImpl->OnSceneDisconnection(); }