diff options
author | Carsten Haitzler (Rasterman) <raster@rasterman.com> | 2021-10-04 13:18:42 +0100 |
---|---|---|
committer | Carsten Haitzler (Rasterman) <raster@rasterman.com> | 2021-10-04 13:35:08 +0100 |
commit | c7999bb78902c5c45003cdcec5577e4f31b1bdf0 (patch) | |
tree | 9530fa2580d1bf7c6c0d944fc933d24156048fc1 | |
parent | 36dac31c8f675b2b7328b106a0b5bdf690381300 (diff) | |
download | enlightenment-c7999bb78902c5c45003cdcec5577e4f31b1bdf0.tar.gz |
protect against possible junk fullscreen windows in list
-rw-r--r-- | src/bin/e_client.c | 12 | ||||
-rw-r--r-- | 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 ffc1825112..6e605a3393 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 5c62c652ac..04b0bd3301 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"); } |