[AT-SPI] Emit WindowEvent::DESTROY 73/273873/4
authorShinwoo Kim <cinoo.kim@samsung.com>
Fri, 15 Apr 2022 03:09:38 +0000 (12:09 +0900)
committerShinwoo Kim <cinoo.kim@samsung.com>
Mon, 2 May 2022 05:58:54 +0000 (14:58 +0900)
AT client needs to know that a window is destroyed.

Change-Id: Id64d31b3a69a7465e8eb382ab6ed2db9b1788007

dali/internal/accessibility/bridge/bridge-impl.cpp
dali/internal/accessibility/bridge/bridge-object.h
dali/internal/window-system/common/window-impl.cpp

index 0cf7d17..6d96eea 100644 (file)
@@ -272,6 +272,11 @@ public:
   {
     if(mData)
     {
+      // The ~Window() after this point cannot emit DESTROY, because Bridge is not available. So emit DESTROY here.
+      for(auto windowAccessible : mApplication.mChildren)
+      {
+        BridgeObject::Emit(windowAccessible, WindowEvent::DESTROY);
+      }
       mData->mCurrentlyHighlightedActor = {};
       mData->mHighlightActor            = {};
     }
index 7d402b1..9784469 100644 (file)
@@ -68,7 +68,7 @@ protected:
   /**
    * @copydoc Dali::Accessibility::Bridge::Emit()
    */
-  void Emit(Dali::Accessibility::Accessible* obj, Dali::Accessibility::WindowEvent event, unsigned int detail) override;
+  void Emit(Dali::Accessibility::Accessible* obj, Dali::Accessibility::WindowEvent event, unsigned int detail = 0) override;
 
   /**
    * @copydoc Dali::Accessibility::Bridge::Emit()
index 545b382..e0a6cc5 100644 (file)
@@ -107,6 +107,8 @@ Window::~Window()
     auto rootLayer  = mScene.GetRootLayer();
     auto accessible = Accessibility::Accessible::Get(rootLayer, true);
     bridge->RemoveTopLevelWindow(accessible);
+    // Related to multi-window case. This is called for default window and non-default window, but it is effective for non-default window.
+    bridge->Emit(accessible, Accessibility::WindowEvent::DESTROY);
   }
 
   if(mAdaptor)