job->timer = ecore_timer_add(E_VIS_TIMEOUT, timeout_func, job);
if ((job->type == E_VIS_JOB_TYPE_LOWER) ||
- (job->type == E_VIS_JOB_TYPE_HIDE))
+ (job->type == E_VIS_JOB_TYPE_HIDE) ||
+ (job->type == E_VIS_JOB_TYPE_LAYER_LOWER))
e_comp_canvas_norender_push();
return EINA_TRUE;
_e_vis_clist_unlink(elem);
job = EINA_CLIST_ENTRY(elem, E_Vis_Job, entry);
if ((job->type == E_VIS_JOB_TYPE_LOWER) ||
- (job->type == E_VIS_JOB_TYPE_HIDE))
+ (job->type == E_VIS_JOB_TYPE_HIDE) ||
+ (job->type == E_VIS_JOB_TYPE_LAYER_LOWER))
e_comp_canvas_norender_pop();
E_FREE_FUNC(job->timer, ecore_timer_del);
free(job);
e_comp_canvas_norender_pop();
evas_object_hide(ec->frame);
break;
+ case E_VIS_JOB_TYPE_LAYER_LOWER:
+ e_comp_canvas_norender_pop();
+ E_VIS_CLIENT_GET(vc, ec);
+ if (vc)
+ evas_object_layer_set(ec->frame, vc->layer);
+ break;
default:
VS_ERR(ec, "Unkown job type: %d", type);
break;
return ret;
}
+E_API Eina_Bool
+e_policy_visibility_client_layer_lower(E_Client *ec, E_Layer layer)
+{
+ if (!e_config->use_buffer_flush) return EINA_FALSE;
+
+ E_VIS_CLIENT_GET_OR_RETURN_VAL(vc, ec, EINA_FALSE);
+
+ VS_DBG(ec, "API ENTRY | LAYER LOWER (layer:%d)", layer);
+
+ /* find activity client among the clients to be lower */
+ if (!_e_vis_ec_foreground_check(ec, !!e_config->transient.lower))
+ {
+ VS_INF(ec, "NO activity clients");
+ return EINA_FALSE;
+ }
+
+ if (!_e_vis_ec_below_uniconify(ec))
+ {
+ VS_DBG(ec, "Failed to uniconify below client");
+ return EINA_FALSE;
+ }
+
+ /* add lower lower job, it will be executed after below activity client finishs updating */
+ vc->layer = layer;
+ _e_vis_client_job_add(vc, E_VIS_JOB_TYPE_LAYER_LOWER);
+
+ return EINA_TRUE;
+}
+
E_API void
e_policy_visibility_uniconify_render_disable_set(E_Client *ec, Eina_Bool disable)
{
E_API Eina_Bool e_policy_visibility_client_raise(E_Client *ec);
E_API Eina_Bool e_policy_visibility_client_uniconify(E_Client *ec, Eina_Bool raise);
E_API Eina_Bool e_policy_visibility_client_activate(E_Client *ec);
+E_API Eina_Bool e_policy_visibility_client_layer_lower(E_Client *ec, E_Layer layer);
E_API E_Vis_Grab *e_policy_visibility_client_grab_get(E_Client *ec, const char *name);
E_API void e_policy_visibility_client_grab_release(E_Vis_Grab *grab);
E_API void e_policy_visibility_uniconify_render_disable_set(E_Client *ec, Eina_Bool disable);
// restore original layer
if (original_layer != evas_object_layer_get(ec->frame))
{
- evas_object_layer_set(ec->frame, original_layer);
- ec->layer = original_layer;
+ Eina_Bool pend = EINA_FALSE;
+ pend = e_policy_visibility_client_layer_lower(ec, original_layer);
+ if (!pend)
+ {
+ evas_object_layer_set(ec->frame, original_layer);
+ ec->layer = original_layer;
+ }
}
}
ec->changable_layer[E_CHANGABLE_LAYER_TYPE_ABOVE_NOTIFICATION].set = 0;