goto renew;
ec = vc->ec;
- grab = vc->grab;
VS_INF(ec, "FINISH Uniconify render(ev:%p, vc:%p, provider:%p)", ev->ec, vc->ec, provider_ec);
e_comp_object_render(ec->frame);
}
- if (vc->grab == grab)
- vc->grab = NULL;
+ EINA_LIST_FREE(vc->wait_buf_attach_grab_list, grab)
+ {
+ E_FREE_FUNC(grab, _e_vis_grab_release);
+ }
+ vc->wait_buf_attach_grab_list = NULL;
- E_FREE_FUNC(grab, _e_vis_grab_release);
E_FREE_FUNC(vc->buf_attach, ecore_event_handler_del);
renew:
return ECORE_CALLBACK_PASS_ON;
}
static void
-_e_vis_client_buffer_attach_handler_add(E_Vis_Client *vc)
+_e_vis_client_buffer_attach_handler_add(E_Vis_Client *vc, E_Vis_Grab *grab)
{
+ vc->wait_buf_attach_grab_list = eina_list_append(vc->wait_buf_attach_grab_list, grab);
+
if (vc->buf_attach)
return;
VS_DBG(vc->ec, "CLIENT DEL");
+ eina_list_free(vc->wait_buf_attach_grab_list);
+ vc->wait_buf_attach_grab_list = NULL;
+
E_FREE_FUNC(vc->grab, _e_vis_grab_release);
E_LIST_REVERSE_FREE(vc->job.grab_list, grab)
grab->deleted = 1;
_e_vis_client_prepare_foreground_signal_emit(vc);
vc->state = E_VIS_ICONIFY_STATE_RUNNING_UNICONIFY;
VS_DBG(vc->ec, "\tUPDATE ICONIC STATE: %s", STATE_STR(vc));
- vc->grab = _e_vis_client_grab_get(vc, type, __func__);
- _e_vis_client_buffer_attach_handler_add(vc);
+ E_Vis_Grab *grab = _e_vis_client_grab_get(vc, type, __func__);
+ _e_vis_client_buffer_attach_handler_add(vc, grab);
e_policy_wl_iconify_state_change_send(ec, 0);
_e_pol_vis_hook_call(E_POL_VIS_HOOK_TYPE_UNICONIFY_RENDER_RUNNING, ec);
if (!vc) return EINA_FALSE;
VS_DBG(vc->ec, "\tDEFER MOVE: %s", STATE_STR(vc));
- vc->grab = _e_vis_client_grab_get(vc, type, __func__);
- _e_vis_client_buffer_attach_handler_add(vc);
+ E_Vis_Grab *grab = _e_vis_client_grab_get(vc, type, __func__);
+ _e_vis_client_buffer_attach_handler_add(vc, grab);
_e_vis_client_job_add(vc, type);