self.WheelEventSignal().Connect( this, &WidgetView::OnWheelEvent );
// Accessibility
- self.SetProperty(Toolkit::DevelControl::Property::ACCESSIBILITY_ROLE, Dali::Accessibility::Role::EMBEDDED);
- self.SetProperty(Toolkit::DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE, true);
+ self.SetProperty(Toolkit::DevelControl::Property::ACCESSIBILITY_ROLE, Dali::Accessibility::Role::FILLER);
+ self.SetProperty(Toolkit::DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE, false);
+}
+
+Dali::Toolkit::DevelControl::ControlAccessible* WidgetView::CreateAccessibleObject()
+{
+ return new WidgetViewAccessible(Self());
}
void WidgetView::OnSceneConnection( int depth )
}
mPaused = needPaused;
}
+
+ if(!mPaused)
+ {
+ auto* accessible = dynamic_cast<WidgetView::WidgetViewAccessible*>(GetAccessibleObject());
+ DALI_ASSERT_DEBUG(accessible);
+ accessible->SynchronizeChildPosition();
+ }
}
void WidgetView::OnSizeSet( const Vector3& targetSize )
widget_instance_resize(mInstanceId.c_str(), targetSize.x, targetSize.y);
}
+WidgetView::WidgetViewAccessible::WidgetViewAccessible(Dali::Actor self)
+: ControlAccessible(self)
+{
+ mRemoteChild.SetParent(this);
+
+ Dali::Accessibility::Bridge::EnabledSignal().Connect(this, &WidgetViewAccessible::OnChildrenChanged);
+ Dali::Accessibility::Bridge::DisabledSignal().Connect(this, &WidgetViewAccessible::OnChildrenChanged);
+}
+
+void WidgetView::WidgetViewAccessible::SynchronizeChildPosition()
+{
+ if(!Dali::Accessibility::IsUp() || !mRemoteChild.GetAddress())
+ {
+ return;
+ }
+
+ auto extents = GetExtents(Dali::Accessibility::CoordinateType::SCREEN);
+ Dali::Accessibility::Bridge::GetCurrentBridge()->SetSocketOffset(&mRemoteChild, extents.x, extents.y);
+}
+
+void WidgetView::WidgetViewAccessible::DoGetChildren(std::vector<Dali::Accessibility::Accessible*>& children)
+{
+ using Dali::Accessibility::Bridge;
+
+ static const char rootPath[] = "root";
+
+ if(!Dali::Accessibility::IsUp())
+ {
+ return;
+ }
+
+ auto self = Dali::WidgetView::WidgetView::DownCast(Self());
+ auto& selfImpl = Dali::WidgetView::GetImplementation(self);
+ auto instanceId = selfImpl.GetInstanceId();
+ auto busName = Bridge::MakeBusNameForWidget(instanceId);
+
+ auto address = Bridge::GetCurrentBridge()->EmbedSocket(GetAddress(), {busName, rootPath});
+
+ mRemoteChild.SetAddress(address);
+
+ if(address)
+ {
+ children.push_back(&mRemoteChild);
+ SynchronizeChildPosition();
+ }
+}
+
} // namespace Internal
} // namespace WidgetView
// EXTERNAL INCLUDES
#include <dali/public-api/rendering/renderer.h>
+#include <dali-toolkit/devel-api/controls/control-accessible.h>
#include <dali-toolkit/public-api/controls/control-impl.h>
#include <dali-toolkit/public-api/controls/text-controls/text-label.h>
#include <dali-toolkit/public-api/controls/image-view/image-view.h>
#include <tbm_surface.h>
#include <screen_connector_toolkit.h>
#include <dali/devel-api/adaptor-framework/native-image-source-devel.h>
+#include <dali/devel-api/adaptor-framework/proxy-accessible.h>
#include <dali/devel-api/adaptor-framework/window-devel.h>
#include <dali/public-api/object/property-notification.h>
*/
virtual void OnInitialize();
+ /**
+ * @copydoc Toolkit::Internal::Control::CreateAccessibleObject()
+ */
+ Dali::Toolkit::DevelControl::ControlAccessible* CreateAccessibleObject() override;
+
/**
* @copydoc Toolkit::Control::OnSceneConnection()
*/
// Undefined
WidgetView& operator= ( const WidgetView& );
-private:
+protected:
+ class WidgetViewAccessible : public Dali::Toolkit::DevelControl::ControlAccessible
+ {
+ public:
+ WidgetViewAccessible() = delete;
+
+ WidgetViewAccessible(Dali::Actor self);
+
+ /**
+ * @brief Notifies the remote child about its position on the screen.
+ *
+ * @note The number of D-Bus messages sent may be smaller than the number of calls to this method.
+ */
+ void SynchronizeChildPosition();
+
+ protected:
+ /**
+ * @copydoc Dali::Accessibility::ActorAccessible::DoGetChildren()
+ */
+ void DoGetChildren(std::vector<Dali::Accessibility::Accessible*>& children) override;
+
+ private:
+ Dali::Accessibility::ProxyAccessible mRemoteChild;
+ };
+private:
Dali::Renderer mRenderer;
std::string mWidgetId;