e: fix layout and visibility issue with emotion xv surface.

SVN revision: 64304
This commit is contained in:
Cedric BAIL 2011-10-22 21:15:40 +00:00
parent dfe911f764
commit fe17e9caa7
1 changed files with 98 additions and 8 deletions

View File

@ -99,7 +99,7 @@ struct _E_Comp_Win
Ecore_X_Window_Type primary_type; // fetched for override-redirect windowa
unsigned char misses; // number of sync misses
Eina_Bool delete_pending : 1; // delete pendig
Eina_Bool hidden_override : 1; // hidden override
Eina_Bool animating : 1; // it's busy animating - defer hides/dels
@ -161,6 +161,48 @@ static void _e_mod_comp_win_configure(E_Comp_Win *cw,
int h,
int border);
static void
_e_mod_comp_child_show(E_Comp_Win *cw)
{
evas_object_show(cw->shobj);
if (cw->bd)
{
Eina_List *l;
E_Border *tmp;
EINA_LIST_FOREACH(cw->bd->client.e.state.video_child, l, tmp)
{
E_Comp_Win *tcw;
tcw = eina_hash_find(borders, e_util_winid_str_get(tmp->client.win));
if (!tcw) continue ;
evas_object_show(tcw->shobj);
}
}
}
static void
_e_mod_comp_child_hide(E_Comp_Win *cw)
{
evas_object_hide(cw->shobj);
if (cw->bd)
{
Eina_List *l;
E_Border *tmp;
EINA_LIST_FOREACH(cw->bd->client.e.state.video_child, l, tmp)
{
E_Comp_Win *tcw;
tcw = eina_hash_find(borders, e_util_winid_str_get(tmp->client.win));
if (!tcw) continue ;
evas_object_hide(tcw->shobj);
}
}
}
static void
_e_mod_comp_cb_pending_after(void *data __UNUSED__,
E_Manager *man __UNUSED__,
@ -699,7 +741,7 @@ _e_mod_comp_win_update(E_Comp_Win *cw)
{
if (!cw->hidden_override)
{
evas_object_show(cw->shobj);
_e_mod_comp_child_show(cw);
_e_mod_comp_win_render_queue(cw);
}
@ -1093,7 +1135,7 @@ nocomp:
// _e_mod_comp_win_damage(cw, 0, 0, cw->w, cw->h, 0);
if (cw->visible)
{
if (!cw->hidden_override) evas_object_show(cw->shobj);
if (!cw->hidden_override) _e_mod_comp_child_show(cw);
cw->pending_count++;
e_manager_comp_event_src_visibility_send
(cw->c->man, (E_Manager_Comp_Source *)cw,
@ -2039,7 +2081,7 @@ _e_mod_comp_win_show(E_Comp_Win *cw)
if ((cw->dmg_updates >= 1) && (cw->show_ready))
{
cw->defer_hide = 0;
if (!cw->hidden_override) evas_object_show(cw->shobj);
if (!cw->hidden_override) _e_mod_comp_child_show(cw);
edje_object_signal_emit(cw->shobj, "e,state,visible,on", "e");
if (!cw->animating)
{
@ -2097,7 +2139,7 @@ _e_mod_comp_win_hide(E_Comp_Win *cw)
}
cw->defer_hide = 0;
cw->force = 0;
evas_object_hide(cw->shobj);
_e_mod_comp_child_hide(cw);
if (cw->update_timeout)
{
@ -2186,6 +2228,22 @@ _e_mod_comp_win_raise_above(E_Comp_Win *cw,
EINA_INLIST_GET(cw),
EINA_INLIST_GET(cw2));
evas_object_stack_above(cw->shobj, cw2->shobj);
if (cw->bd)
{
Eina_List *l;
E_Border *tmp;
EINA_LIST_FOREACH(cw->bd->client.e.state.video_child, l, tmp)
{
E_Comp_Win *tcw;
tcw = eina_hash_find(borders, e_util_winid_str_get(tmp->client.win));
if (!tcw) continue ;
evas_object_stack_below(tcw->shobj, cw->shobj);
}
}
_e_mod_comp_win_render_queue(cw);
cw->pending_count++;
e_manager_comp_event_src_config_send
@ -2201,6 +2259,22 @@ _e_mod_comp_win_raise(E_Comp_Win *cw)
cw->c->wins = eina_inlist_remove(cw->c->wins, EINA_INLIST_GET(cw));
cw->c->wins = eina_inlist_append(cw->c->wins, EINA_INLIST_GET(cw));
evas_object_raise(cw->shobj);
if (cw->bd)
{
Eina_List *l;
E_Border *tmp;
EINA_LIST_FOREACH(cw->bd->client.e.state.video_child, l, tmp)
{
E_Comp_Win *tcw;
tcw = eina_hash_find(borders, e_util_winid_str_get(tmp->client.win));
if (!tcw) continue ;
evas_object_stack_below(tcw->shobj, cw->shobj);
}
}
_e_mod_comp_win_render_queue(cw);
cw->pending_count++;
e_manager_comp_event_src_config_send
@ -2216,6 +2290,22 @@ _e_mod_comp_win_lower(E_Comp_Win *cw)
cw->c->wins = eina_inlist_remove(cw->c->wins, EINA_INLIST_GET(cw));
cw->c->wins = eina_inlist_prepend(cw->c->wins, EINA_INLIST_GET(cw));
evas_object_lower(cw->shobj);
if (cw->bd)
{
Eina_List *l;
E_Border *tmp;
EINA_LIST_FOREACH(cw->bd->client.e.state.video_child, l, tmp)
{
E_Comp_Win *tcw;
tcw = eina_hash_find(borders, e_util_winid_str_get(tmp->client.win));
if (!tcw) continue ;
evas_object_stack_below(tcw->shobj, cw->shobj);
}
}
_e_mod_comp_win_render_queue(cw);
cw->pending_count++;
e_manager_comp_event_src_config_send
@ -3014,13 +3104,13 @@ _e_mod_comp_src_hidden_set_func(void *data __UNUSED__,
if (cw->visible)
{
if (cw->hidden_override)
evas_object_hide(cw->shobj);
_e_mod_comp_child_hide(cw);
else if (!cw->bd || cw->bd->visible)
evas_object_show(cw->shobj);
_e_mod_comp_child_show(cw);
}
else
{
if (cw->hidden_override) evas_object_hide(cw->shobj);
if (cw->hidden_override) _e_mod_comp_child_hide(cw);
}
}