Fix keyboard removal logic in _window_remove 34/317334/3 accepted/tizen/7.0/unified/20250102.085414
authorYoungsun Suh <youngsun.suh@samsung.com>
Tue, 31 Dec 2024 01:11:14 +0000 (10:11 +0900)
committerYoungsun Suh <youngsun.suh@samsung.com>
Tue, 31 Dec 2024 02:24:41 +0000 (11:24 +0900)
Change-Id: I8a6322e62b3c9256b548a11bf925218582daacd1

src/window_tracker.c

index 3013bd50e830bd38441ed9c45189f2f5fcc30761..6dd204b1cf139f08b37501d215a58b4dc92fd0ef 100644 (file)
@@ -326,6 +326,7 @@ static void _window_remove(WindowTrackerData *wtd, AtspiAccessible *window)
        Eina_List *l, *l_prev;
        WindowInfo *wi = NULL;
        int removed_index = 0;
+       int keyboard_index = -1;
        EINA_LIST_REVERSE_FOREACH_SAFE(wtd->window_infos, l, l_prev, wi) {
                if (!wi) continue;
                if (atspi_accessible_is_equal(wi->window, window)) {
@@ -336,7 +337,9 @@ static void _window_remove(WindowTrackerData *wtd, AtspiAccessible *window)
                        wtd->window_infos = eina_list_remove_list(wtd->window_infos, l);
                        window_removed = EINA_TRUE;
                        break;
-               }
+               } else if (wi->keyboard_window_is)
+                       keyboard_index = removed_index;
+
                removed_index++;
        }
 
@@ -356,24 +359,10 @@ static void _window_remove(WindowTrackerData *wtd, AtspiAccessible *window)
                if (wtd->user_cb && !keyboard_window_is) {
                        _switch_context_to_non_keyboard_top(wtd);
                }
-       } else {
+       } else if (removed_index > 0 && keyboard_index == removed_index - 1) {
                /* The removed window could be under the keyboard window,
                in this case the keyboard window should be removed from the list */
-               if (removed_index != 0) {
-                       int count = eina_list_count(wtd->window_infos);
-                       wi = eina_list_nth(wtd->window_infos, count - removed_index - 1);
-                       if (wi) {
-                               gchar *id = atspi_accessible_get_unique_id(wi->window, NULL);
-                               DEBUG("Check upper window: %s, keyboard window: %d", id, wi->keyboard_window_is);
-                               g_free(id);
-                               if (wi->keyboard_window_is) {
-                                       wtd->window_infos = eina_list_remove(wtd->window_infos, wi);
-                                       g_object_unref(wi->window);
-                                       g_free(wi);
-                               }
-                       } else
-                               DEBUG("Current window info list is emtpy");
-               }
+               window_tracker_keyboard_window_remove(wtd);
        }
 
        gchar *id = atspi_accessible_get_unique_id(window, NULL);