Support multi window case 82/275382/3 accepted/tizen/unified/20220622.134042 submit/tizen/20220621.022714
authorShinwoo Kim <cinoo.kim@samsung.com>
Tue, 24 May 2022 02:48:29 +0000 (11:48 +0900)
committerShinwoo Kim <cinoo.kim@samsung.com>
Tue, 24 May 2022 12:10:16 +0000 (21:10 +0900)
The screen-reader can launch when multi windows are showing.
In this case, the window in ACTIVE state is not enough.

This will work with following patch
https://review.tizen.org/gerrit/#/c/platform/core/uifw/dali-adaptor/+/275412

*TODO: EFL application

Change-Id: I5a02f65ba8a906808043b5d3a4327c5e17e0c1fa

src/window_tracker.c

index a3e812969a34b3f2be78fdf1ce07563eaadd2bdd..15ff37179f3754f6835ead6827bcb387a490cf8d 100644 (file)
@@ -612,6 +612,23 @@ void* window_tracker_unregister(WindowTrackerData *wtd) {
 void window_tracker_active_window_request(WindowTrackerData *wtd)
 {
        DEBUG("START");
+
+       /* append foreground window first which can be used on multi-window case */
+       GArray *windows = atspi_get_foreground_windows();
+       AtspiAccessible *window;
+       int i;
+       if (windows) {
+               DEBUG("Foreground windows: %d", windows->len);
+               for (i = 0; i < windows->len; i++) {
+                       window = g_array_index(windows, AtspiAccessible *, i);
+                       _window_append(wtd, window, EINA_TRUE, EINA_FALSE, ACCESSIBLE_WINDOW_ACTIVATE_INFO_DEFAULT_LABEL_ENABLED);
+               }
+               for (i = 0; i< windows->len; ++i) {
+                       g_object_unref(g_array_index(windows, AtspiAccessible*, i));
+               }
+               g_array_free(windows, TRUE);
+       }
+
        /* this should be after the window_tracker_register because this calls _window_append
           and the _window_append needs wtd->user_cb (app_tracker_context_switch) */
        _active_window_append(wtd);
@@ -629,25 +646,7 @@ AtspiAccessible *window_tracker_top_window_get(WindowTrackerData *wtd)
 
 void window_tracker_window_append(WindowTrackerData *wtd, AtspiAccessible *window, AtspiRole role)
 {
-       gchar *name = atspi_accessible_get_name(window, NULL);
-
-       if (name) {
-               /*TODO: need to check if checking INPUT_METHOD_WINDOW is necessary or not
-               because window_tracker_window_append is not called from app_tracker
-               if role is INPUT_METHOD_WINDOW, when app_tracker handles showing event.*/
-               if (role == ATSPI_ROLE_INPUT_METHOD_WINDOW && g_strcmp0(name, "ISF Popup")) {
-                       _window_append(wtd, window, EINA_FALSE, EINA_TRUE, ACCESSIBLE_WINDOW_ACTIVATE_INFO_DEFAULT_LABEL_ENABLED);
-                       /* keep keyboard window reference, because keyboard window exsits always if it shows once. */
-                       if (wtd->keyboard_window) g_object_unref(wtd->keyboard_window);
-                       wtd->keyboard_window = g_object_ref(window);
-               } else if (!g_strcmp0(name, "ISF Popup"))
-                       /*ISF Popup: this would be an indicator window of keyboard.
-                       There is a show(hide)_indicator_window in ise-default package.
-                       If so, I cannot remember why we are appending this window.*/
-                       _window_append(wtd, window, EINA_TRUE, EINA_FALSE, ACCESSIBLE_WINDOW_ACTIVATE_INFO_DEFAULT_LABEL_ENABLED);
-       }
-
-       g_free(name);
+       _window_append(wtd, window, EINA_TRUE, EINA_FALSE, ACCESSIBLE_WINDOW_ACTIVATE_INFO_DEFAULT_LABEL_ENABLED);
 }
 
 void window_tracker_window_remove(WindowTrackerData *wtd, AtspiAccessible *window)