mTable = accessibilityDelegate;
}
+void NUIViewAccessible::Detach()
+{
+ mIsDetached = true;
+}
+
std::string NUIViewAccessible::StealString(char* str)
{
std::string ret{};
template<Interface I, typename R, typename... Args>
R NUIViewAccessible::CallMethod(R (*method)(RefObject*, Args...), Args... args) const
{
+ if(mIsDetached)
+ {
+ DALI_LOG_ERROR("Method called on detached NUIViewAccessible[%p]", static_cast<const void*>(this));
+
+ if constexpr(std::is_same_v<R, void>)
+ return;
+ else
+ return R{};
+ }
+
DALI_ASSERT_DEBUG(method);
DALI_ASSERT_ALWAYS(GetInterfaces()[I]);
}));
}
+SWIGEXPORT void SWIGSTDCALL CSharp_Dali_Accessibility_DetachAccessibleObject(Dali::Toolkit::Control* arg1_control)
+{
+ GUARD_ON_NULL_RET(arg1_control);
+
+ try_catch(([&]() {
+ auto* actorAccessible = Dali::Accessibility::Accessible::Get(*arg1_control);
+ auto* viewAccessible = dynamic_cast<NUIViewAccessible*>(actorAccessible);
+
+ if(viewAccessible)
+ {
+ viewAccessible->Detach();
+ }
+ }));
+}
+
#ifdef __cplusplus
} // extern "C"
#endif
static void SetAccessibilityDelegate(const AccessibilityDelegate* accessibilityDelegate);
+ void Detach();
+
// Standard interfaces (Accessible, Action, Component)
std::string GetNameRaw() const override;
*/
template<Dali::Accessibility::AtspiInterface I, typename R, typename... Args>
R CallMethod(R (*method)(Dali::RefObject*, Args...), Args... args) const;
+
+ // Prevents calling C# methods if the View has been disposed
+ bool mIsDetached = false;
};
#endif // NUI_VIEW_ACCESSIBLE_H