From 11065a905c27c0f188338bcd847019b001e4924d Mon Sep 17 00:00:00 2001 From: "Carsten Haitzler (Rasterman)" Date: Mon, 12 Apr 2021 16:01:20 +0100 Subject: [PATCH] e - fix restore of window visiblity and events on e restarts you no longer have to cycle virtual desks to fix window events. this fixes that. @fix --- src/bin/e_main.c | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/src/bin/e_main.c b/src/bin/e_main.c index ec3076280..8f3d3e19f 100644 --- a/src/bin/e_main.c +++ b/src/bin/e_main.c @@ -1648,16 +1648,40 @@ _e_main_desk_restore(void) unsigned int desks[2]; Ecore_X_Atom a; + // hide all windows first as desk show will restore + E_CLIENT_FOREACH(ec) + { + ec->hidden = 1; + evas_object_show(ec->frame); + ec->changes.visible = 0; + evas_object_hide(ec->frame); + e_client_comp_hidden_set(ec, EINA_TRUE); + } EINA_LIST_FOREACH(e_comp->zones, l, zone) { + desk = NULL; + snprintf(buf, sizeof(buf), "E_DESK_%i", zone->num); a = ecore_x_atom_get(buf); ret = ecore_x_window_prop_card32_get(e_comp->root, a, desks, 2); if (ret == 2) { desk = e_desk_at_xy_get(zone, desks[0], desks[1]); - if (!desk) continue; - e_desk_show(desk); + if (desk) e_desk_show(desk); + } + if (!desk) desk = e_desk_current_get(zone); + if (desk) + { + // ensure windows for this desk are shown + E_CLIENT_REVERSE_FOREACH(ec) + { + if ((ec->desk == desk) || (ec->sticky)) + { + ec->hidden = 0; + e_client_comp_hidden_set(ec, ec->hidden || ec->shaded); + evas_object_show(ec->frame); + } + } } } E_CLIENT_REVERSE_FOREACH(ec)