[AT-SPI] Add Selection interface
[platform/core/uifw/dali-adaptor.git] / dali / internal / accessibility / bridge / bridge-impl.cpp
index ea95081..80b3fb4 100644 (file)
 // CLASS HEADER
 
 // EXTERNAL INCLUDES
+#include <dali/devel-api/common/stage.h>
 #include <dali/integration-api/debug.h>
+#include <dali/public-api/actors/layer.h>
 #include <iostream>
 #include <unordered_map>
 
 // INTERNAL INCLUDES
+#include <dali/devel-api/adaptor-framework/environment-variable.h>
+#include <dali/devel-api/adaptor-framework/window-devel.h>
 #include <dali/internal/accessibility/bridge/bridge-accessible.h>
 #include <dali/internal/accessibility/bridge/bridge-action.h>
 #include <dali/internal/accessibility/bridge/bridge-collection.h>
 #include <dali/internal/accessibility/bridge/bridge-component.h>
 #include <dali/internal/accessibility/bridge/bridge-editable-text.h>
 #include <dali/internal/accessibility/bridge/bridge-object.h>
+#include <dali/internal/accessibility/bridge/bridge-selection.h>
 #include <dali/internal/accessibility/bridge/bridge-text.h>
 #include <dali/internal/accessibility/bridge/bridge-value.h>
 #include <dali/internal/accessibility/bridge/dummy-atspi.h>
+#include <dali/internal/adaptor/common/adaptor-impl.h>
 #include <dali/internal/system/common/environment-variables.h>
-#include <dali/devel-api/adaptor-framework/environment-variable.h>
 
 using namespace Dali::Accessibility;
 
@@ -45,7 +50,8 @@ class BridgeImpl : public virtual BridgeBase,
                    public BridgeAction,
                    public BridgeValue,
                    public BridgeText,
-                   public BridgeEditableText
+                   public BridgeEditableText,
+                   public BridgeSelection
 {
   DBus::DBusClient                                              listenOnAtspiEnabledSignalClient;
   DBus::DBusClient                                              registryClient, directReadingClient;
@@ -238,6 +244,7 @@ public:
     BridgeValue::RegisterInterfaces();
     BridgeText::RegisterInterfaces();
     BridgeEditableText::RegisterInterfaces();
+    BridgeSelection::RegisterInterfaces();
 
     RegisterOnBridge(&application);
 
@@ -344,15 +351,15 @@ static Bridge* CreateBridge()
   try
   {
     /* check environment variable first */
-    const char *envAtspiDisabled = Dali::EnvironmentVariable::GetEnvironmentVariable(DALI_ENV_DISABLE_ATSPI);
-    if (envAtspiDisabled && std::atoi(envAtspiDisabled) != 0)
+    const charenvAtspiDisabled = Dali::EnvironmentVariable::GetEnvironmentVariable(DALI_ENV_DISABLE_ATSPI);
+    if(envAtspiDisabled && std::atoi(envAtspiDisabled) != 0)
     {
       return Dali::Accessibility::DummyBridge::GetInstance();
     }
 
     return new BridgeImpl;
   }
-  catch (const std::exception&)
+  catch(const std::exception&)
   {
     DALI_LOG_ERROR("Failed to initialize AT-SPI bridge");
     return Dali::Accessibility::DummyBridge::GetInstance();
@@ -363,17 +370,17 @@ Bridge* Bridge::GetCurrentBridge()
 {
   static Bridge* bridge;
 
-  if (bridge)
+  if(bridge)
   {
     return bridge;
   }
-  else if (autoInitState == AutoInitState::ENABLED)
+  else if(autoInitState == AutoInitState::ENABLED)
   {
     bridge = CreateBridge();
 
     /* check environment variable for suppressing screen-reader */
-    const char *envSuppressScreenReader = Dali::EnvironmentVariable::GetEnvironmentVariable(DALI_ENV_SUPPRESS_SCREEN_READER);
-    if (envSuppressScreenReader && std::atoi(envSuppressScreenReader) != 0)
+    const charenvSuppressScreenReader = Dali::EnvironmentVariable::GetEnvironmentVariable(DALI_ENV_SUPPRESS_SCREEN_READER);
+    if(envSuppressScreenReader && std::atoi(envSuppressScreenReader) != 0)
     {
       bridge->SuppressScreenReader(true);
     }
@@ -386,7 +393,7 @@ Bridge* Bridge::GetCurrentBridge()
 
 void Bridge::DisableAutoInit()
 {
-  if (bridgeInitialized)
+  if(bridgeInitialized)
   {
     DALI_LOG_ERROR("Bridge::DisableAutoInit() called after bridge auto-initialization");
   }
@@ -394,17 +401,26 @@ void Bridge::DisableAutoInit()
   autoInitState = AutoInitState::DISABLED;
 }
 
-void Bridge::EnableAutoInit(Accessible* topLevelWindow, const std::string& applicationName)
+void Bridge::EnableAutoInit()
 {
   autoInitState = AutoInitState::ENABLED;
 
-  if (bridgeInitialized)
+  if(bridgeInitialized)
   {
     return;
   }
 
+  auto rootLayer       = Dali::Stage::GetCurrent().GetRootLayer();
+  auto window          = Dali::DevelWindow::Get(rootLayer);
+  auto applicationName = Dali::Internal::Adaptor::Adaptor::GetApplicationPackageName();
+
   auto* bridge = Bridge::GetCurrentBridge();
-  bridge->AddTopLevelWindow(topLevelWindow);
+  bridge->AddTopLevelWindow(Dali::Accessibility::Accessible::Get(rootLayer, true));
   bridge->SetApplicationName(applicationName);
   bridge->Initialize();
+
+  if(window && window.IsVisible())
+  {
+    bridge->ApplicationShown();
+  }
 }