work around clients like firefox with csd and broken iconify logic

so simple version: if firefox does CSD then when u press its minimize
(iconify) button it ASSUMES it will be iconified. it ASSUMES WM_STATE
will transition to iconic annd then back. it will cease rendering lots
of things when it thinks it is iconified when it isn't - e was
refusing because e wants windows tyo stay with live content so in ibar
and winlist and so on they keep showing updates). this assumption that
a wm will always iconify you when asked is wrong. a wm can refuse. so
basically firefox is brokne in its assumptions and logic. so work
around it but this leads to other fun things like clients stopping
rendering when iconified... as they now are told theya have been
iconified.
This commit is contained in:
Carsten Haitzler 2021-02-01 13:05:55 +00:00
parent 7d2be9edcc
commit a92840b13f
1 changed files with 9 additions and 1 deletions

View File

@ -1154,7 +1154,15 @@ _e_comp_x_client_hide(E_Client *ec)
if ((!ec->iconic) && (!ec->override))
ecore_x_window_prop_card32_set(e_client_util_win_get(ec), E_ATOM_MAPPED, &visible, 1);
_e_comp_x_client_data_get(ec)->iconic = ec->iconic && (!e_comp_object_mirror_visibility_check(ec->frame));
_e_comp_x_client_data_get(ec)->iconic = ec->iconic
// XXX: if we tell apps they are iconic.. they may stop rendering and this
// means our miniatures we use in ibar, ibox and winlist alt-tab dont udpate
// ... we could i guess setn fake wm state changes to normal when these are
// visible and then toggle iconic on and off while still visually hiding
// the client... but clients that assume they will be iconic when they ask
// are mistaken ... so for now disable this until we have a debate on it
// && (!e_comp_object_mirror_visibility_check(ec->frame))
;
if (ec->unredirected_single || _e_comp_x_client_data_get(ec)->iconic)
ecore_x_window_hide(_e_comp_x_client_window_get(ec));
if (_e_comp_x_client_data_get(ec)->iconic)