From: Shinwoo Kim Date: Tue, 24 May 2022 02:48:29 +0000 (+0900) Subject: Support multi window case X-Git-Tag: submit/tizen/20220621.022714^0 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=f19e502553debecb6ac29ebf68dbef72dbebdce1;p=platform%2Fcore%2Faccessibility%2Fscreen-reader.git Support multi window case 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 --- diff --git a/src/window_tracker.c b/src/window_tracker.c index a3e81296..15ff3717 100644 --- a/src/window_tracker.c +++ b/src/window_tracker.c @@ -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)