e_eom: execute configure_send when external output connected if current client set... 26/172226/3
authorJunkyeong Kim <jk0430.kim@samsung.com>
Tue, 13 Mar 2018 02:11:54 +0000 (11:11 +0900)
committerSooChan Lim <sc1.lim@samsung.com>
Tue, 13 Mar 2018 06:23:12 +0000 (06:23 +0000)
Change-Id: Ia7d0f509b8577fb4e2994ec15b6d60c720f51a93
Signed-off-by: Junkyeong Kim <jk0430.kim@samsung.com>
src/bin/e_eom.c

index 5b77719..e952c29 100644 (file)
@@ -1917,6 +1917,58 @@ err:
 }
 
 static void
+_e_eom_send_configure_event()
+{
+   E_EomOutput *eom_output = NULL;
+   E_EomVirtualOutputPtr voutput = NULL;
+   E_EomClientPtr eom_client = NULL;
+   E_Client *ec = NULL;
+   Eina_List *l;
+   Eina_Bool ret = EINA_FALSE;
+   E_Comp_Client_Data *cdata = NULL;
+   E_Plane *ep = NULL;
+
+   EINA_LIST_FOREACH(g_eom->clients, l, eom_client)
+     {
+        if (eom_client->current == EINA_TRUE)
+          {
+             EINA_SAFETY_ON_NULL_RETURN(eom_client->ec);
+
+             ec = eom_client->ec;
+
+             cdata = ec->comp_data;
+             EINA_SAFETY_ON_NULL_RETURN(cdata);
+             EINA_SAFETY_ON_NULL_RETURN(cdata->shell.configure_send);
+
+             voutput = _e_eom_virtual_output_get_by_id(eom_client->output_id);
+             if (voutput == NULL)
+               {
+                  EOMER("no voutput error\n");
+                  return;
+               }
+
+             eom_output = voutput->eom_output;
+             if (eom_output == NULL)
+               {
+                  EOMER("no eom_output error\n");
+                  return;
+               }
+
+             EOMDB("e_comp_object_redirected_set (ec:%p)(ec->frame:%p)\n", ec, ec->frame);
+             ret = _e_eom_util_add_comp_object_redirected_hook(eom_client->ec);
+             EINA_SAFETY_ON_FALSE_RETURN(ret == EINA_TRUE);
+
+             cdata->shell.configure_send(ec->comp_data->shell.surface, 0, eom_output->width, eom_output->height);
+
+             ep = e_output_default_fb_target_get(eom_output->eout);
+             e_plane_ec_prepare_set(ep, ec);
+
+             return;
+          }
+     }
+}
+
+static void
 _e_eom_window_set_internal(struct wl_resource *resource, int output_id, E_Client *ec)
 {
    E_EomOutputPtr eom_output = NULL;
@@ -2453,6 +2505,8 @@ e_eom_connect(E_Output *output)
      {
         EOMDB("Start wait Presentation");
 
+        _e_eom_send_configure_event();
+
         if (eom_output->delay_timer)
           ecore_timer_del(eom_output->delay_timer);
         eom_output->delay_timer = ecore_timer_add(EOM_DELAY_CONNECT_CHECK_TIMEOUT, _e_eom_presentation_check, eom_output);