namespace Commons {
WrtAccess::WrtAccess() :
- m_initialized(false),
- m_sessionId(GenerateSessionId())
+ m_sessionId(GenerateSessionId()),
+ m_pluginOwners(0)
{
}
LogDebug("Invalid widget id");
Throw(Exception);
}
- ace_return_t ret = ace_client_initialize(Wrt::Popup::run_popup);
- Assert(ACE_OK == ret);
- m_initialized = true;
- m_widgetId = widgetId;
+
+ if (!m_pluginOwners++) {
+ ace_return_t ret = ace_client_initialize(Wrt::Popup::run_popup);
+ Assert(ACE_OK == ret);
+ m_widgetId = widgetId;
+ }
}
void WrtAccess::deinitialize(int /*widgetId*/)
{
LogDebug("deinitialize");
- m_initialized = false;
- ace_return_t ret = ace_client_shutdown();
- Assert(ACE_OK == ret);
+
+ if (!--m_pluginOwners) {
+ ace_return_t ret = ace_client_shutdown();
+ Assert(ACE_OK == ret);
+ }
}
int WrtAccess::getWidgetId() const
bool WrtAccess::checkAccessControl(const AceFunction& aceFunction) const
{
- Assert(m_initialized && "WrtAccessSingleton needs to be initialized with"
+ Assert(m_pluginOwners && "WrtAccessSingleton needs to be initialized with"
"WidgetId during on_widget_start_callback in each plugin");
size_t deviceCount = aceFunction.deviceCapabilities.size();