Tiling2: Fixed re-tiling on e restart/module unload reload.

This commit is contained in:
Tom Hacohen 2014-01-17 16:24:53 +00:00
parent 39e17e96f8
commit 0b007b2ff6
1 changed files with 29 additions and 5 deletions

View File

@ -23,6 +23,7 @@ typedef struct Client_Extra {
int last_frame_adjustment; // FIXME: Hack for frame resize bug. int last_frame_adjustment; // FIXME: Hack for frame resize bug.
Eina_Bool sticky : 1; Eina_Bool sticky : 1;
Eina_Bool floating : 1; Eina_Bool floating : 1;
Eina_Bool tiled : 1;
} Client_Extra; } Client_Extra;
struct tiling_g tiling_g = { struct tiling_g tiling_g = {
@ -31,8 +32,8 @@ struct tiling_g tiling_g = {
.log_domain = -1, .log_domain = -1,
}; };
static void static void _add_client(E_Client *ec);
_add_client(E_Client *ec); static void _remove_client(E_Client *ec);
/* }}} */ /* }}} */
/* Globals {{{ */ /* Globals {{{ */
@ -351,10 +352,14 @@ _reapply_tree(void)
} }
void void
_restore_free_client(void *client) _restore_free_client(void *_item)
{ {
_restore_client(client); Window_Tree *item = _item;
free(client); if (item->client)
{
_restore_client(item->client);
}
free(item);
} }
void void
@ -417,6 +422,11 @@ _add_client(E_Client *ec)
if (is_ignored_window(extra)) if (is_ignored_window(extra))
return; return;
if (extra->tiled)
return;
extra->tiled = EINA_TRUE;
/* Stack tiled window below so that winlist doesn't mix up stacking */ /* Stack tiled window below so that winlist doesn't mix up stacking */
evas_object_layer_set(ec->frame, E_LAYER_CLIENT_BELOW); evas_object_layer_set(ec->frame, E_LAYER_CLIENT_BELOW);
@ -464,6 +474,8 @@ _remove_client(E_Client *ec)
return; return;
} }
extra->tiled = EINA_FALSE;
/* Window tree updating. */ /* Window tree updating. */
{ {
/* If focused is NULL, it should return the root. */ /* If focused is NULL, it should return the root. */
@ -1240,6 +1252,18 @@ e_modapi_init(E_Module *m)
_G.currently_switching_desktop = 0; _G.currently_switching_desktop = 0;
_G.action_cb = NULL; _G.action_cb = NULL;
/* Add all the existing windows. */
{
E_Client *ec;
E_CLIENT_FOREACH(e_comp_get(NULL), ec)
{
if (e_client_util_ignored_get(ec))
continue;
_add_client(ec);
}
}
return m; return m;
} }