SetupTouch();
- DevelControl::SetAccessibilityConstructor( self, []( Dali::Actor actor ) {
- return std::unique_ptr< Dali::Accessibility::Accessible >(
- new Control::Impl::AccessibleImpl( actor, Dali::Accessibility::Role::DIALOG, true ) );
- } );
+ DevelControl::SetAccessibilityConstructor(self, [](Dali::Actor actor)
+ {
+ return std::unique_ptr<Dali::Accessibility::Accessible>(new AccessibleImpl(actor, Dali::Accessibility::Role::DIALOG, true));
+ });
}
Popup::~Popup()
{
- if( DevelControl::GetBoundAccessibilityObject( Self() ) )
- Accessibility::Bridge::GetCurrentBridge()->RemovePopup( DevelControl::GetBoundAccessibilityObject( Self() ) );
mEntryAnimationData.Clear();
mExitAnimationData.Clear();
}
bool Popup::OnAutoHideTimeReached()
{
- // Display timer has expired, auto hide the popup exactly as if the user had clicked outside.
- SetDisplayState( Toolkit::Popup::HIDDEN );
+ if (!Dali::Accessibility::IsUp() || true) // TODO: remove 'true' in sync with EFL (UX change)
+ {
+ // Display timer has expired, auto hide the popup exactly as if the user had clicked outside.
+ SetDisplayState( Toolkit::Popup::HIDDEN );
+ }
if( mAutoHideTimer )
{
return;
}
+ auto *accessible = Dali::Accessibility::Accessible::Get(Self());
+ if (display)
+ {
+ Dali::Accessibility::Bridge::GetCurrentBridge()->AddPopup(accessible);
+ accessible->EmitStateChanged(Dali::Accessibility::State::SHOWING, 1, 0);
+ }
+ else
+ {
+ accessible->EmitStateChanged(Dali::Accessibility::State::SHOWING, 0, 0);
+ Dali::Accessibility::Bridge::GetCurrentBridge()->RemovePopup(accessible);
+ }
+
// Convert the bool state to the actual display state to use.
mDisplayState = display ? Toolkit::Popup::SHOWING : Toolkit::Popup::HIDING;
return false;
}
-void Popup::OnSceneDisconnection()
-{
- auto p = Dali::Accessibility::Accessible::Get(Self());
- Accessibility::Bridge::GetCurrentBridge()->RemovePopup( p );
- Control::OnSceneDisconnection();
-}
-
void Popup::OnSceneConnection( int depth )
{
mLayoutDirty = true;
RelayoutRequest();
Control::OnSceneConnection( depth );
- auto p = Dali::Accessibility::Accessible::Get(Self());
- Accessibility::Bridge::GetCurrentBridge()->AddPopup( p );
}
void Popup::OnChildAdd( Actor& child )
}
}
+Dali::Accessibility::States Popup::AccessibleImpl::CalculateStates()
+{
+ auto states = Control::Impl::AccessibleImpl::CalculateStates();
+ auto popup = Toolkit::Popup::DownCast(self);
+ auto displayState = popup.GetProperty<std::string>(Toolkit::Popup::Property::DISPLAY_STATE);
+
+ states[Dali::Accessibility::State::SHOWING] = (displayState == "SHOWN" || displayState == "SHOWING");
+
+ return states;
+}
+
} // namespace Internal
} // namespace Toolkit
#include <dali-toolkit/public-api/controls/control-impl.h>
#include <dali-toolkit/devel-api/controls/table-view/table-view.h>
#include <dali-toolkit/devel-api/controls/popup/popup.h>
+#include <dali-toolkit/internal/controls/control/control-data-impl.h>
namespace Dali
{
static Property::Value GetProperty( BaseObject* object, Property::Index propertyIndex );
protected:
+ struct AccessibleImpl : public Control::Impl::AccessibleImpl
+ {
+ using Control::Impl::AccessibleImpl::AccessibleImpl;
+
+ Dali::Accessibility::States CalculateStates() override;
+ };
/**
* Construct a new Popup.
* Called when the popup is directly or indirectly parented to the stage.
*/
void OnSceneConnection( int depth ) override;
- void OnSceneDisconnection() override;
/**
* From Control; called after a child has been added to the owning actor.