tiling: fix enlightenment can be freezed by infinite event callback.

Summary:
initialize the tinfo when remove client in tiling.

the reason why of "freezing" that tiling added window twice into _G.tinfo->tree.
then tiling module set to a different size about same window as if two different window.
finally, the event "E_EVENT_CLIENT_MOVE" occurs by changing geometry, and tiling resize the window again by the event "E_EVENT_CLIENT_MOVE".

next, it is the cause of this problem.

In (4), when user types ALT+TAP.
 - tiling module adds uniconify window into _G.tinfo->tree.
 - at this time, _G.tinfo is the informaion of one desk.
 - E create input_only window and destoryed for a moment.
 - tiling module initialize the _G.tinfo by the event EVAS_CALLBACK_DEL happend by destorying input window.
 - now, _G.tinfo is the informaion of the other desk.
In (5), iconify app.
 - tiling try to remove window from _G.tinfo->tree, but failed. (problem)
 - because _G.tinfo isn't initialized to the desk including uniconify window at that time.
In (6), uniconify app.
 - tiling change the _G.tinfo, then insert client info to _G.tinfo.

so I suggest that initializing the _G.tinfo when removing window.

Test Plan:
(1) launch any app.
(2) Iconify it.
(3) change the desk different with launching app.
(4) Uniconify app by ALT+TAP.
(5) Iconify it again.
(6) Uniconify it again.

Reviewers: raster, zmike, tom, tasn

Reviewed By: tasn

CC: cedric

Differential Revision: https://phab.enlightenment.org/D850
This commit is contained in:
Seunghun Lee 2014-05-14 11:05:51 +01:00 committed by Tom Hacohen
parent 94ca9df27a
commit 60d78371db
1 changed files with 5 additions and 2 deletions

View File

@ -640,8 +640,11 @@ _client_remove_no_apply(E_Client *ec)
static void
_remove_client(E_Client *ec)
{
if (_client_remove_no_apply(ec))
_reapply_tree();
if (desk_should_tile_check(ec->desk))
{
if (_client_remove_no_apply(ec))
_reapply_tree();
}
}
/* }}} */