// EXTERNAL INCLUDES
#include <dali/public-api/actors/layer.h>
#include <dali/public-api/dali-adaptor-version.h>
+#include <dali/public-api/object/weak-handle.h>
#include <dali/public-api/signals/connection-tracker.h>
#include <memory>
+#include <tuple>
// INTERNAL INCLUDES
#include <dali/devel-api/adaptor-framework/proxy-accessible.h>
result = result | child->GetStates();
}
+ // The Application object should never have the SENSITIVE state
+ result[Dali::Accessibility::State::SENSITIVE] = false;
+
return result;
}
{
mIsEmbedded = false;
mParent.SetAddress({});
+ Dali::Accessibility::Bridge::GetCurrentBridge()->SetExtentsOffset(0, 0);
}
}
+ void SetOffset(std::int32_t x, std::int32_t y) override
+ {
+ if(!mIsEmbedded)
+ {
+ return;
+ }
+
+ Dali::Accessibility::Bridge::GetCurrentBridge()->SetExtentsOffset(x, y);
+ }
+
// Component
Dali::Rect<> GetExtents(Dali::Accessibility::CoordinateType type) const override
};
/**
- * @brief Enumeration for FilteredEvents.
+ * @brief Enumeration for CoalescableMessages.
*/
-enum class FilteredEvents
+enum class CoalescableMessages
{
- BOUNDS_CHANGED ///< Bounds changed
+ BOUNDS_CHANGED, ///< Bounds changed
+ SET_OFFSET, ///< Set offset
+ POST_RENDER, ///< Post render
};
// Custom specialization of std::hash
namespace std
{
template<>
-struct hash<std::pair<FilteredEvents, Dali::Accessibility::Accessible*>>
+struct hash<std::pair<CoalescableMessages, Dali::Accessibility::Accessible*>>
{
- size_t operator()(std::pair<FilteredEvents, Dali::Accessibility::Accessible*> value) const
+ size_t operator()(std::pair<CoalescableMessages, Dali::Accessibility::Accessible*> value) const
{
return (static_cast<size_t>(value.first) * 131) ^ reinterpret_cast<size_t>(value.second);
}
*/
class BridgeBase : public Dali::Accessibility::Bridge, public Dali::ConnectionTracker
{
- std::unordered_map<std::pair<FilteredEvents, Dali::Accessibility::Accessible*>, std::pair<unsigned int, std::function<void()>>> mFilteredEvents;
+ std::unordered_map<std::pair<CoalescableMessages, Dali::Accessibility::Accessible*>, std::tuple<unsigned int, unsigned int, std::function<void()>>> mCoalescableMessages;
/**
- * @brief Removes all FilteredEvents using Tick signal.
+ * @brief Removes all CoalescableMessages using Tick signal.
*
- * @return False if mFilteredEvents is empty, otherwise true.
+ * @return False if mCoalescableMessages is empty, otherwise true.
*/
- bool TickFilteredEvents();
+ bool TickCoalescableMessages();
public:
/**
- * @brief Adds FilteredEvents, Accessible, and delay time to mFilteredEvents.
+ * @brief Adds CoalescableMessages, Accessible, and delay time to mCoalescableMessages.
*
- * @param[in] kind FilteredEvents enum value
+ * @param[in] kind CoalescableMessages enum value
* @param[in] obj Accessible object
* @param[in] delay The delay time
* @param[in] functor The function to be called // NEED TO UPDATE!
*/
- void AddFilteredEvent(FilteredEvents kind, Dali::Accessibility::Accessible* obj, float delay, std::function<void()> functor);
+ void AddCoalescableMessage(CoalescableMessages kind, Dali::Accessibility::Accessible* obj, float delay, std::function<void()> functor);
/**
* @brief Callback when the visibility of the window is changed.
/**
* @copydoc Dali::Accessibility::Bridge::GetDefaultLabel()
*/
- Dali::Accessibility::Accessible* GetDefaultLabel() const override
- {
- return mDefaultLabels.empty() ? nullptr : mDefaultLabels.back();
- }
+ Dali::Accessibility::Accessible* GetDefaultLabel(Dali::Accessibility::Accessible* root) const override;
/**
* @copydoc Dali::Accessibility::Bridge::GetApplication()
}
protected:
- mutable ApplicationAccessible mApplication;
- std::vector<Dali::Accessibility::Accessible*> mDefaultLabels;
- bool mIsScreenReaderSuppressed = false;
+ // We use a weak handle in order not to keep a window alive forever if someone forgets to UnregisterDefaultLabel()
+ using DefaultLabelType = std::pair<Dali::WeakHandle<Dali::Window>, Dali::Accessibility::Accessible*>;
+ using DefaultLabelsType = std::list<DefaultLabelType>;
+
+ mutable ApplicationAccessible mApplication;
+ DefaultLabelsType mDefaultLabels;
+ bool mIsScreenReaderSuppressed = false;
private:
/**
*/
CacheElementType CreateCacheElement(Dali::Accessibility::Accessible* item);
+ /**
+ * @brief Removes expired elements from the default label collection.
+ */
+ void CompressDefaultLabels();
+
+ /**
+ * @brief Gets the window to which this accessible belongs (or an empty handle).
+ *
+ * @param accessible The accessible
+ * @return The window
+ */
+ static Dali::WeakHandle<Dali::Window> GetWindow(Dali::Accessibility::Accessible* accessible);
+
protected:
BridgeBase();
virtual ~BridgeBase();