#define GET_ENUM_VALUE(structName, inputExp, outputExp) \
Scripting::GetEnumerationProperty<Toolkit::WebView::structName::Type>(inputExp, structName##_TABLE, structName##_TABLE_COUNT, outputExp)
+std::unordered_map<Dali::WebEnginePlugin*, Dali::WeakHandle<Toolkit::WebView>> WebView::mPluginWebViewMap;
+
WebView::WebView(const std::string& locale, const std::string& timezoneId)
: Control(ControlBehaviour(ACTOR_BEHAVIOUR_DEFAULT | DISABLE_STYLE_CHANGE_SIGNALS)),
mVisual(),
if(mWebEngine)
{
mWebEngine.FrameRenderedSignal().Disconnect(this, &WebView::OnFrameRendered);
+ auto iter = mPluginWebViewMap.find(mWebEngine.GetPlugin());
+ if (iter != mPluginWebViewMap.end())
+ {
+ mPluginWebViewMap.erase(iter);
+ }
mWebEngine.Destroy();
}
}
{
WebView* impl = new WebView();
Toolkit::WebView handle = Toolkit::WebView(*impl);
-
+ if (impl->GetPlugin())
+ {
+ mPluginWebViewMap[impl->GetPlugin()] = handle;
+ }
impl->Initialize();
return handle;
}
{
WebView* impl = new WebView(locale, timezoneId);
Toolkit::WebView handle = Toolkit::WebView(*impl);
-
+ if (impl->GetPlugin())
+ {
+ mPluginWebViewMap[impl->GetPlugin()] = handle;
+ }
impl->Initialize();
return handle;
}
{
WebView* impl = new WebView(argc, argv);
Toolkit::WebView handle = Toolkit::WebView(*impl);
-
+ if (impl->GetPlugin())
+ {
+ mPluginWebViewMap[impl->GetPlugin()] = handle;
+ }
impl->Initialize();
return handle;
}
+Toolkit::WebView WebView::FindWebView(Dali::WebEnginePlugin* plugin)
+{
+ auto iter = mPluginWebViewMap.find(plugin);
+ if (iter != mPluginWebViewMap.end())
+ {
+ return iter->second.GetHandle();
+ }
+ return Toolkit::WebView();
+}
+
Dali::WebEngineContext* WebView::GetContext()
{
return Dali::WebEngine::GetContext();
self.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, Dali::Accessibility::Role::FILLER);
}
+Dali::WebEnginePlugin* WebView::GetPlugin() const
+{
+ return mWebEngine ? mWebEngine.GetPlugin() : nullptr;
+}
+
DevelControl::ControlAccessible* WebView::CreateAccessibleObject()
{
return new WebViewAccessible(Self(), mWebEngine);
}
}
+Dali::Accessibility::Attributes WebView::WebViewAccessible::GetAttributes() const
+{
+ auto attributes = DevelControl::ControlAccessible::GetAttributes();
+
+ if(mRemoteChild.GetAddress())
+ {
+ attributes.insert_or_assign("child_bus", mRemoteChild.GetAddress().GetBus());
+ }
+
+ return attributes;
+}
+
void WebView::WebViewAccessible::DoGetChildren(std::vector<Dali::Accessibility::Accessible*>& children)
{
if(mRemoteChild.GetAddress())
{
+ // DoGetChildren is called at most once per every OnChildrenChanged.
+ // We have only one OnChildrenChanged in this case, so EmbedAtkSocket will be called only once.
+ Accessibility::Bridge::GetCurrentBridge()->EmbedAtkSocket(GetAddress(), mRemoteChild.GetAddress());
children.push_back(&mRemoteChild);
}
}
{
mRemoteChild.SetAddress(address);
OnChildrenChanged();
-
- if(address)
- {
- Accessibility::Bridge::GetCurrentBridge()->EmbedAtkSocket(GetAddress(), address);
- }
}
#undef GET_ENUM_STRING