protect against possible junk fullscreen windows in list

This commit is contained in:
Carsten Haitzler 2021-10-04 13:18:42 +01:00
parent 36dac31c8f
commit c7999bb789
2 changed files with 8 additions and 5 deletions

View File

@ -459,6 +459,8 @@ _e_client_revert_focus(E_Client *ec)
static void static void
_e_client_free(E_Client *ec) _e_client_free(E_Client *ec)
{ {
if (ec->desk)
ec->desk->fullscreen_clients = eina_list_remove(ec->desk->fullscreen_clients, ec);
if (ec->restore_zone_id) if (ec->restore_zone_id)
{ {
eina_stringshare_del(ec->restore_zone_id); eina_stringshare_del(ec->restore_zone_id);
@ -478,9 +480,7 @@ _e_client_free(E_Client *ec)
E_OBJECT(ec)->references++; E_OBJECT(ec)->references++;
if (ec->fullscreen) if (ec->fullscreen)
{ {
ec->desk->fullscreen_clients = eina_list_remove(ec->desk->fullscreen_clients, ec); if (!ec->desk->fullscreen_clients) e_comp_render_queue();
if (!ec->desk->fullscreen_clients)
e_comp_render_queue();
} }
if (ec->new_client) if (ec->new_client)
e_comp->new_clients--; e_comp->new_clients--;
@ -2875,7 +2875,8 @@ e_client_desk_set(E_Client *ec, E_Desk *desk)
{ {
if (ec->desk) if (ec->desk)
ec->desk->fullscreen_clients = eina_list_remove(ec->desk->fullscreen_clients, ec); ec->desk->fullscreen_clients = eina_list_remove(ec->desk->fullscreen_clients, ec);
desk->fullscreen_clients = eina_list_append(desk->fullscreen_clients, ec); if (!eina_list_data_find(desk->fullscreen_clients, ec))
desk->fullscreen_clients = eina_list_append(desk->fullscreen_clients, ec);
} }
old_desk = ec->desk; old_desk = ec->desk;
ec->desk = desk; ec->desk = desk;
@ -4465,7 +4466,8 @@ e_client_fullscreen(E_Client *ec, E_Fullscreen policy)
e_object_ref(E_OBJECT(ec)); e_object_ref(E_OBJECT(ec));
e_comp->nocomp_ec = ec; e_comp->nocomp_ec = ec;
} }
ec->desk->fullscreen_clients = eina_list_append(ec->desk->fullscreen_clients, ec); if (!eina_list_data_find(ec->desk->fullscreen_clients, ec))
ec->desk->fullscreen_clients = eina_list_append(ec->desk->fullscreen_clients, ec);
ec->pre_res_change.valid = 0; ec->pre_res_change.valid = 0;
if (ec->maximized) if (ec->maximized)

View File

@ -1800,6 +1800,7 @@ _e_comp_intercept_focus(void *data, Evas_Object *obj, Eina_Bool focus)
if (focus) if (focus)
{ {
ec = e_client_stack_active_adjust(ec); ec = e_client_stack_active_adjust(ec);
if (!ec) return;
obj = ec->frame; obj = ec->frame;
cw = evas_object_data_get(obj, "comp_obj"); cw = evas_object_data_get(obj, "comp_obj");
} }