summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarsten Haitzler (Rasterman) <raster@rasterman.com>2021-10-04 13:18:42 +0100
committerCarsten Haitzler (Rasterman) <raster@rasterman.com>2021-10-04 13:35:08 +0100
commitc7999bb78902c5c45003cdcec5577e4f31b1bdf0 (patch)
tree9530fa2580d1bf7c6c0d944fc933d24156048fc1
parent36dac31c8f675b2b7328b106a0b5bdf690381300 (diff)
downloadenlightenment-c7999bb78902c5c45003cdcec5577e4f31b1bdf0.tar.gz
protect against possible junk fullscreen windows in list
-rw-r--r--src/bin/e_client.c12
-rw-r--r--src/bin/e_comp_object.c1
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");
}