X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali-toolkit%2Finternal%2Fcontrols%2Fpopup%2Fpopup-impl.cpp;h=092569c5374e5d56ec7f28fe49a6887a783e8bbd;hb=9e3fd659c4d25706ab65345bc7c562ac27248325;hp=b95e648eb3395ba61d0b640c4ec6c0279448a813;hpb=d8a4571d975ae061fe32f1d098d07ccc94604729;p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git diff --git a/dali-toolkit/internal/controls/popup/popup-impl.cpp b/dali-toolkit/internal/controls/popup/popup-impl.cpp index b95e648..092569c 100644 --- a/dali-toolkit/internal/controls/popup/popup-impl.cpp +++ b/dali-toolkit/internal/controls/popup/popup-impl.cpp @@ -39,10 +39,11 @@ #include #include #include -#include #include #include #include +#include +#include using namespace Dali; @@ -338,6 +339,13 @@ void Popup::OnInitialize() SetAsKeyboardFocusGroup( true ); SetupTouch(); + + DevelControl::AppendAccessibilityAttribute(self, "sub-role", "Alert"); + + DevelControl::SetAccessibilityConstructor(self, [](Dali::Actor actor) + { + return std::unique_ptr(new AccessibleImpl(actor, Dali::Accessibility::Role::DIALOG, true)); + }); } Popup::~Popup() @@ -563,8 +571,11 @@ void Popup::DisplayStateChangeComplete() 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 ) { @@ -713,6 +724,18 @@ void Popup::SetDisplayState( Toolkit::Popup::DisplayState displayState ) 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; @@ -1978,6 +2001,39 @@ void Popup::SetupTouch() } } +std::string Popup::AccessibleImpl::GetNameRaw() +{ + auto popup = Toolkit::Popup::DownCast( self ); + std::string title; + Actor popupTitle = popup.GetTitle(); + if (popupTitle) + { + std::string titleText = popupTitle.GetProperty(Toolkit::TextLabel::Property::TEXT); + title = titleText; + } + else + { + Actor popupContent = popup.GetContent(); + if (popupContent) + { + std::string contentText = popupContent.GetProperty(Toolkit::TextLabel::Property::TEXT); + title = contentText; + } + } + return title; +} + +Dali::Accessibility::States Popup::AccessibleImpl::CalculateStates() +{ + auto states = Control::Impl::AccessibleImpl::CalculateStates(); + auto popup = Toolkit::Popup::DownCast(self); + auto displayState = popup.GetProperty(Toolkit::Popup::Property::DISPLAY_STATE); + + states[Dali::Accessibility::State::SHOWING] = (displayState == "SHOWN" || displayState == "SHOWING"); + + return states; +} + } // namespace Internal } // namespace Toolkit