e_eom: use the e_eom_create/e_eom_destroy 11/210711/3
authorSooChan Lim <sc1.lim@samsung.com>
Tue, 23 Jul 2019 06:19:48 +0000 (15:19 +0900)
committerSooChan Lim <sc1.lim@samsung.com>
Wed, 24 Jul 2019 10:18:15 +0000 (10:18 +0000)
Change-Id: Ib343678d904393b3859f82594fb701ad499a865e

src/bin/e_comp_screen.c
src/bin/e_eom.c
src/bin/e_eom.h

index b66a42ee9f05a2a3da4bcfcee68bd23a198318b6..8cf790ee6ff2240e7616764a7d67bdf4f9dae9df 100644 (file)
@@ -626,7 +626,7 @@ _e_comp_screen_output_create_cb(tdm_display *dpy, tdm_output *toutput, void *use
         return;
      }
 
-   e_eom_create(output);
+   e_eom_create(output, EINA_TRUE);
    e_comp_screen->outputs = eina_list_append(e_comp_screen->outputs, output);
    e_comp_screen->num_outputs++;
 
index 3da5fdf85420d88962542fb12505516bef8d037d..f383b95318e712c67beda1d0d0e0d5a33b149dd3 100644 (file)
@@ -143,6 +143,7 @@ struct _E_Eom_Output
 
    E_Output *eout;
    E_EomVirtualOutput *voutput;
+   Eina_Bool added;
 };
 
 struct _E_Eom_Virtual_Output
@@ -1193,58 +1194,38 @@ _e_eom_output_deinit(void)
    if (!g_eom->outputs) return;
 
    EINA_LIST_FOREACH(g_eom->outputs, l, output)
-     free(output);
+     e_eom_destroy(output->eout);
 
    eina_list_free(g_eom->outputs);
-
    g_eom->outputs = NULL;
 }
 
 static Eina_Bool
 _e_eom_output_init(tdm_display *dpy)
 {
-   E_EomOutputPtr eom_output = NULL;
-   int i, count;
+   E_Comp_Screen *e_comp_screen = NULL;
+   E_Output *output = NULL;
+   Eina_List *l;
+
+   EINA_SAFETY_ON_NULL_RETURN_VAL(e_comp, EINA_FALSE);
 
-   count = e_comp->e_comp_screen->num_outputs;
+   e_comp_screen = e_comp->e_comp_screen;
+   EINA_SAFETY_ON_NULL_RETURN_VAL(e_comp_screen, EINA_FALSE);
 
-   g_eom->output_count = count - 1;
+   g_eom->output_count = e_comp_screen->num_outputs - 1;
    EOINF("external output count : %d", NULL, g_eom->output_count);
 
-   /* skip main output id:0 */
-   /* start from 1 */
-   for (i = 1; i < count; i++)
+   /* create the eom_output except for the primary output */
+   EINA_LIST_FOREACH(e_comp_screen->outputs, l, output)
      {
-        eom_output = E_NEW(E_EomOutput, 1);
-        EINA_SAFETY_ON_NULL_GOTO(eom_output, err);
-
-        eom_output->id = i;
-        eom_output->mode = EOM_OUTPUT_MODE_NONE;
-        eom_output->connection = WL_EOM_STATUS_NONE;
-        eom_output->eout = e_output_find_by_index(i);
-        EINA_SAFETY_ON_NULL_GOTO(eom_output->eout, err);
+        if (!output) continue;
+        if (output == g_eom->output_primary) continue;
 
-        eom_output->output = eom_output->eout->toutput;
-        eom_output->type = (eom_output_type_e)eom_output->eout->toutput_type;
-
-        if (!e_output_connected(eom_output->eout))
+        if (!e_eom_create(output, EINA_FALSE))
           {
-             EOINF("create(%d)output, type:%d, status:%d", eom_output->eout,
-                   eom_output->id, eom_output->type, eom_output->connection_status);
-             g_eom->outputs = eina_list_append(g_eom->outputs, eom_output);
-             eom_output->connection_status = EINA_FALSE;
-             continue;
+             EOERR("e_eom_create fails.", output);
+             goto err;
           }
-
-        //eom_output->connection_status = EINA_TRUE;
-        eom_output->phys_width = eom_output->eout->info.size.w;
-        eom_output->phys_height = eom_output->eout->info.size.h;
-
-        EOINF("create(%d)output, type:%d, status:%d, w:%d, h:%d, mm_w:%d, mm_h:%d", eom_output->eout,
-              eom_output->id, eom_output->type, eom_output->connection_status,
-              eom_output->width, eom_output->height, eom_output->phys_width, eom_output->phys_height);
-
-        g_eom->outputs = eina_list_append(g_eom->outputs, eom_output);
      }
 
    return EINA_TRUE;
@@ -2643,7 +2624,7 @@ e_eom_disconnect(E_Output *output)
 }
 
 EINTERN Eina_Bool
-e_eom_create(E_Output *output)
+e_eom_create(E_Output *output, Eina_Bool added)
 {
    E_EomOutputPtr eom_output = NULL;
 
@@ -2658,19 +2639,23 @@ e_eom_create(E_Output *output)
    eom_output->eout = output;
    EINA_SAFETY_ON_NULL_GOTO(eom_output->eout, err);
 
-   eom_output->output = eom_output->eout->toutput;
-   eom_output->type = (eom_output_type_e)eom_output->eout->toutput_type;
+   eom_output->output = output->toutput;
+   eom_output->type = (eom_output_type_e)output->toutput_type;
 
    eom_output->connection_status = EINA_FALSE;
    eom_output->width = 0;
    eom_output->height = 0;
    eom_output->phys_width = 0;
    eom_output->phys_height = 0;
+   eom_output->added = added;
 
-   EOINF("create (%d)output, type:%d, name:%s", eom_output->eout,
-         eom_output->id, eom_output->type, eom_output->name);
+   if (eom_output->added)
+     g_eom->added_outputs = eina_list_append(g_eom->added_outputs, eom_output);
+   else
+     g_eom->outputs = eina_list_append(g_eom->outputs, eom_output);
 
-   g_eom->added_outputs = eina_list_append(g_eom->added_outputs, eom_output);
+   EOINF("create (%d)output, type:%d, name:%s added:%d", eom_output->eout,
+         eom_output->id, eom_output->type, eom_output->name, eom_output->added);
 
    return EINA_TRUE;
 
@@ -2684,28 +2669,21 @@ EINTERN Eina_Bool
 e_eom_destroy(E_Output *output)
 {
    E_EomOutputPtr eom_output = NULL;
-   E_EomOutputPtr eom_output_delete = NULL;
-   Eina_List *l;
 
    if (!g_eom) return EINA_TRUE;
 
-   EINA_LIST_FOREACH(g_eom->added_outputs, l, eom_output)
-     {
-        if (eom_output && eom_output->eout == output)
-          {
-             eom_output_delete = eom_output;
-             break;
-          }
-     }
-
-   if (!eom_output_delete) return EINA_FALSE;
+   eom_output = _e_eom_output_find_added_output(output);
+   EINA_SAFETY_ON_NULL_RETURN_VAL(eom_output, EINA_FALSE);
 
-   EOINF("destroy (%d)output, type:%d, name:%s", eom_output->eout,
-         eom_output->id, eom_output->type, eom_output->name);
+   EOINF("destroy (%d)output, type:%d, name:%s added:%d", eom_output->eout,
+         eom_output->id, eom_output->type, eom_output->name, eom_output->added);
 
-   g_eom->added_outputs = eina_list_remove(g_eom->added_outputs, eom_output_delete);
+   if (eom_output->added)
+     g_eom->added_outputs = eina_list_remove(g_eom->added_outputs, eom_output);
+   else
+     g_eom->outputs = eina_list_remove(g_eom->outputs, eom_output);
 
-   E_FREE(eom_output_delete);
+   E_FREE(eom_output);
 
    return EINA_TRUE;
 }
index 9114ab2f73efd1dbf16673194095686b8b90b449..cf8ac23df7c241c38dd1c57db7d0d09e8800a0e1 100644 (file)
@@ -12,7 +12,7 @@ E_API   Eina_Bool e_eom_is_ec_external(E_Client *ec);
 EINTERN tdm_output* e_eom_tdm_output_by_ec_get(E_Client *ec);
 EINTERN Eina_Bool e_eom_connect(E_Output *output);
 EINTERN Eina_Bool e_eom_disconnect(E_Output *output);
-EINTERN Eina_Bool e_eom_create(E_Output *output);
+EINTERN Eina_Bool e_eom_create(E_Output *output, Eina_Bool added);
 EINTERN Eina_Bool e_eom_destroy(E_Output *output);
 EINTERN Eina_Bool e_eom_mode_change(E_Output *output, E_Output_Mode *emode);
 #endif