/* the head of list for E_Vis_Job_Group */
static Eina_Clist pol_job_group_head = EINA_CLIST_INIT(pol_job_group_head);
+static Eina_Bool pol_job_exec_walking = EINA_FALSE;
+
static Eina_Inlist *_e_pol_vis_hooks[] =
{
[E_POL_VIS_HOOK_TYPE_FG_SET] = NULL,
_e_vis_clist_unlink(elem);
job = EINA_CLIST_ENTRY(elem, E_Vis_Job, entry);
+ if (job->deleted)
+ {
+ if ((job->type == E_VIS_JOB_TYPE_LOWER) ||
+ (job->type == E_VIS_JOB_TYPE_HIDE) ||
+ (job->type == E_VIS_JOB_TYPE_ICONIFY) ||
+ (job->type == E_VIS_JOB_TYPE_LAYER_LOWER))
+ e_comp_canvas_norender_pop();
+ goto end;
+ }
VS_INF(job->vc->ec, "EXEC JOB:%p, type:%d (is_del ec:%d)", job, job->type, e_object_is_del(E_OBJECT(job->vc->ec)));
/* After calling the function below, ec may have been deleted.
* to avoid segmentation fault error.
*/
_e_vis_client_job_exec(job->vc, job->type);
+
+end:
INF("VISIBILITY | FREE JOB:%p, type:%d", job, job->type);
E_FREE_FUNC(job->timer, ecore_timer_del);
free(job);
EINA_CLIST_FOR_EACH_ENTRY_SAFE(job, tmp,
&group->job_head, E_Vis_Job, entry)
{
+ if (job->deleted) continue;
if (_e_vis_client_is_grabbed(job->vc))
return EINA_FALSE;
}
EINA_CLIST_FOR_EACH_ENTRY_SAFE(job, tmp,
&group->job_head, E_Vis_Job, entry)
{
+ if (job->deleted) continue;
if (_e_vis_client_is_uniconify_render_running_done(job->vc))
{
job->vc->state = E_VIS_ICONIFY_STATE_UNICONIC;
_e_vis_job_queue_update();
+ pol_job_exec_walking = EINA_TRUE;
EINA_CLIST_FOR_EACH_ENTRY_SAFE(group, tmp, &pol_job_group_head,
E_Vis_Job_Group, entry)
{
/* execute all of job in the group */
_e_vis_job_group_exec(group);
}
+ pol_job_exec_walking = EINA_FALSE;
+
INF("VISIBILITY | Job Eval End");
}
&group->job_head, E_Vis_Job, entry)
{
if (job->vc != vc) continue;
- _e_vis_job_del(&job->entry);
+
+ if (pol_job_exec_walking)
+ job->deleted = EINA_TRUE;
+ else
+ _e_vis_job_del(&job->entry);
}
if (!eina_clist_empty(&group->job_head)) continue;
_e_vis_job_group_del(&group->entry);
}
/* evaluate job list after deleting an element */
- _e_vis_job_eval();
+ if (!pol_job_exec_walking)
+ _e_vis_job_eval();
}
static E_Vis_Grab *