Eina_Bool canvas_vis = EINA_TRUE;
Eina_Bool ec_vis, ec_opaque, calc_region;
Eina_Bool skip_rot_pending_show = EINA_FALSE;
- Eina_Bool is_above_rot_pending = EINA_FALSE;
+ int skip_by_pending_show = 0;
+ Eina_Bool is_above_show_pending = EINA_FALSE;
Eina_Bool is_launching_effect = EINA_FALSE;
Eina_Bool is_vis_on_skip = EINA_FALSE;
Eina_Bool is_display_off = EINA_FALSE;
e_client_geometry_get(ec, &x, &y, &w, &h);
ec_vis = ec_opaque = skip_rot_pending_show = is_vis_on_skip = EINA_FALSE;
+ skip_by_pending_show = 0;
calc_region = EINA_TRUE;
ec_frame_visible = evas_object_visible_get(ec->frame);
calc_region = EINA_FALSE;
calc_skip_type |= 0x02;
skip_rot_pending_show = EINA_TRUE;
+ skip_by_pending_show = 1;
+ }
+ else if (ec->show_pending.count > 0)
+ {
+ calc_region = EINA_FALSE;
+ calc_skip_type |= 0x40;
+ skip_by_pending_show = 2;
}
else
{
/* unobscured case */
EC_IS_NOT_VISIBLE
{
- if ((!is_above_rot_pending) &&
+ if ((!is_above_show_pending) &&
((!effect_running) ||
((effect_running) && (!is_launching_effect))))
{
}
else
{
- if (!is_above_rot_pending)
+ if (!is_above_show_pending)
is_vis_on_skip = EINA_TRUE;
ELOGF("POL_VIS", "CLIENT VIS ON-SKIP. argb:%d, opaque:%2d, frame_v:%d, cdata:%p", ec, ec->argb, ec->visibility.opaque, ec_frame_visible, cdata);
}
}
/* subtract window region from canvas region */
- if (canvas_vis && !skip_rot_pending_show && !is_vis_on_skip)
+ if (canvas_vis && !skip_by_pending_show && !is_vis_on_skip)
{
/* check alpha window is opaque or not. */
if ((ec->visibility.opaque > 0) && (ec->argb))
* However, with rotation mode, iconification is done if client
* is iconified by itself.
*/
- if ((!skip_rot_pending_show) ||
+ if ((!skip_by_pending_show) ||
(ec->visibility.force_obscured) ||
(ec->bg_state) ||
(ec->exp_iconify.by_client))
/* previous state is unobscured: -1 or 0 */
ec->visibility.obscured = E_VISIBILITY_FULLY_OBSCURED;
ec->visibility.changed = 1;
- ELOGF("POL_VIS", "CLIENT VIS OFF. argb:%d, opaque:%2d, frame_v:%d, canvas_v:%d, calc_r:%d(%d), rot_p:%d",
- ec, ec->argb, ec->visibility.opaque,
- ec_frame_visible, canvas_vis, calc_region, calc_skip_type, skip_rot_pending_show);
+ ELOGF("POL_VIS", "CLIENT VIS OFF. argb:%d, opaque:%2d, frame_v:%d, canvas_v:%d, calc_r:%d(%d), show_p:%d",
+ ec, ec->argb, ec->visibility.opaque,
+ ec_frame_visible, canvas_vis, calc_region, calc_skip_type, skip_by_pending_show);
}
}
}
if (!is_vis_on_skip)
changed_list = eina_list_append(changed_list, ec);
- is_above_rot_pending |= skip_rot_pending_show;
+
+ if (skip_rot_pending_show)
+ is_above_show_pending = EINA_TRUE;
}
if (changed_list)
evas_object_stack_below(ec->frame, below->frame);
}
+E_API int
+e_client_show_pending_set(E_Client *ec)
+{
+ if (!ec) return 0;
+
+ ec->show_pending.count++;
+ ELOGF("E_CLIENT", "SET show_pending. (count:%d, run:%d)", ec, ec->show_pending.count, ec->show_pending.running);
+ return ec->show_pending.count;
+}
+
+E_API int
+e_client_show_pending_unset(E_Client *ec)
+{
+ if (!ec) return 0;
+ if (ec->show_pending.count <= 0) return 0;
+
+ ec->show_pending.count--;
+ ELOGF("E_CLIENT", "UNSET show_pending. (count:%d, run:%d)", ec, ec->show_pending.count, ec->show_pending.running);
+ if (ec->show_pending.count == 0 && ec->show_pending.running)
+ {
+ ec->show_pending.running = EINA_FALSE;
+ if (ec->frame)
+ {
+ ELOGF("E_CLIENT", "evas_object_show by unset show_pending", ec);
+ evas_object_show(ec->frame);
+ //e_comp_object_damage(ec->frame, 0, 0, ec->w, ec->h);
+ }
+ }
+
+ return ec->show_pending.count;
+}
+
static Eina_Bool
_e_client_surface_tree_foreach_helper(E_Client *ec, E_Client_Surface_Tree_Foreach func, void *data)
{