From c7999bb78902c5c45003cdcec5577e4f31b1bdf0 Mon Sep 17 00:00:00 2001 From: "Carsten Haitzler (Rasterman)" Date: Mon, 4 Oct 2021 13:18:42 +0100 Subject: [PATCH] protect against possible junk fullscreen windows in list --- src/bin/e_client.c | 12 +++++++----- src/bin/e_comp_object.c | 1 + 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/src/bin/e_client.c b/src/bin/e_client.c index ffc182511..6e605a339 100644 --- a/src/bin/e_client.c +++ b/src/bin/e_client.c @@ -459,6 +459,8 @@ _e_client_revert_focus(E_Client *ec) static void _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) { eina_stringshare_del(ec->restore_zone_id); @@ -478,9 +480,7 @@ _e_client_free(E_Client *ec) E_OBJECT(ec)->references++; 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) e_comp->new_clients--; @@ -2875,7 +2875,8 @@ e_client_desk_set(E_Client *ec, E_Desk *desk) { if (ec->desk) 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; ec->desk = desk; @@ -4465,7 +4466,8 @@ e_client_fullscreen(E_Client *ec, E_Fullscreen policy) e_object_ref(E_OBJECT(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; if (ec->maximized) diff --git a/src/bin/e_comp_object.c b/src/bin/e_comp_object.c index 5c62c652a..04b0bd330 100644 --- a/src/bin/e_comp_object.c +++ b/src/bin/e_comp_object.c @@ -1800,6 +1800,7 @@ _e_comp_intercept_focus(void *data, Evas_Object *obj, Eina_Bool focus) if (focus) { ec = e_client_stack_active_adjust(ec); + if (!ec) return; obj = ec->frame; cw = evas_object_data_get(obj, "comp_obj"); }