DEBUG("purging");
Window_Info *wi;
Eina_List *l, *l_prev;
+ Eina_Bool view_change_need = EINA_FALSE;
+ Eina_Bool keyboard_window_is = EINA_FALSE;
+ int removed_index = 0;
EINA_LIST_REVERSE_FOREACH_SAFE(window_infos, l, l_prev, wi) {
if (!wi) continue;
if (_window_need_to_be_purged(wi)) {
+ if (removed_index == 0 ) {
+ view_change_need = wi->view_change_need;
+ keyboard_window_is = wi->keyboard_window_is;
+ }
g_object_unref(wi->window);
g_free(wi->rect);
g_free(wi);
window_infos = eina_list_remove_list(window_infos, l);
+ removed_index++;
+ }
+ }
+
+ //if purged window is top window rebuild context
+ if (view_change_need && user_cb && !keyboard_window_is) {
+ Window_Info* wi_top = eina_list_last_data_get(window_infos);
+ if (wi_top) {
+ AtspiAccessible *top_window = wi_top->window;
+ if (wi_top->keyboard_window_is) {
+ int count = eina_list_count(window_infos);
+ wi_top = (count > 1) ? eina_list_nth(window_infos, count - 2) : NULL;
+ if (wi_top)
+ top_window = wi_top->window;
+ else
+ top_window = NULL;
+ }
+ if (top_window) {
+ DEBUG("Rebuild context as top window was purged.");
+ user_cb(user_data, top_window);
+ }
}
}
}