Make sure parent_get is called with sub-surface 47/260747/2
authorSeunghun Lee <shiin.lee@samsung.com>
Fri, 2 Jul 2021 05:41:11 +0000 (14:41 +0900)
committerSeunghun Lee <shiin.lee@samsung.com>
Thu, 8 Jul 2021 23:11:32 +0000 (23:11 +0000)
e_comp_wl_subsurface APIs should be called with sub-surface except for
e_comp_wl_subsurface_check() that is for checking if given E_Client is
for sub-surface.

This silences following error log.

E/E20     (  294): ERR<eina_safety> src/bin/e_comp_wl_subsurface.c:1299
safety check failed: ec->comp_data == NULL

Change-Id: I220aff909ff0c754f44f7ed4c2f95e5a1475f513

src/bin/e_client.c
src/bin/e_comp_wl.c
src/bin/e_comp_wl_viewport.c
src/bin/e_eom.c
src/bin/e_info_server.c

index b39a6afbf2a22d5acea312b9c61d73c3d33741b9..3a0a03dfec5d78c6d3984d7a343e50790a22d4bc 100644 (file)
@@ -3835,25 +3835,28 @@ _e_client_transform_core_check_change(E_Client *ec)
           }
      }
 
-   // check parent matrix change
-   E_Client *parent = e_comp_wl_subsurface_parent_get(ec);
-   if (parent && parent->transform_core.result.enable)
+   if (e_comp_wl_subsurface_check(ec))
      {
-        ec->transform_core.parent.enable = EINA_TRUE;
+        // check parent matrix change
+        E_Client *parent = e_comp_wl_subsurface_parent_get(ec);
+        if (parent && parent->transform_core.result.enable)
+          {
+             ec->transform_core.parent.enable = EINA_TRUE;
 
-        if (!e_util_transform_matrix_equal_check(&ec->transform_core.parent.matrix,
-                                                 &parent->transform_core.result.matrix))
+             if (!e_util_transform_matrix_equal_check(&ec->transform_core.parent.matrix,
+                                                      &parent->transform_core.result.matrix))
+               {
+                  check = EINA_TRUE;
+                  ec->transform_core.parent.matrix = parent->transform_core.result.matrix;
+               }
+          }
+        else if (ec->transform_core.parent.enable)
           {
+             ec->transform_core.parent.enable = EINA_FALSE;
+             e_util_transform_matrix_load_identity(&ec->transform_core.parent.matrix);
              check = EINA_TRUE;
-             ec->transform_core.parent.matrix = parent->transform_core.result.matrix;
           }
      }
-   else if (ec->transform_core.parent.enable)
-     {
-        ec->transform_core.parent.enable = EINA_FALSE;
-        e_util_transform_matrix_load_identity(&ec->transform_core.parent.matrix);
-        check = EINA_TRUE;
-     }
 
    return check;
 }
index f65e8611365e47f2c48495240d8e6412ee64b9c2..bd2201468034db4886c40586124df585e64de5d1 100644 (file)
@@ -398,6 +398,9 @@ e_comp_wl_topmost_parent_get(E_Client *ec)
 {
    E_Client *parent;
 
+   if (!e_comp_wl_subsurface_check(ec))
+     return ec;
+
    parent = e_comp_wl_subsurface_parent_get(ec);
    while (parent)
      {
index cb0479bbc0a805e6601f7e7816f49305ae354e1d..ed012a52ed4b9162858bcbca658cf66d8ad9d544 100644 (file)
@@ -234,12 +234,13 @@ static void
 _e_comp_wl_viewport_parent_check(E_Viewport *viewport)
 {
    E_Client *ec;
-   E_Client *new_parent;
+   E_Client *new_parent = NULL;
 
    ec = viewport->ec;
    if (e_object_is_del(E_OBJECT(ec)) || !ec->comp_data) return;
 
-   new_parent = e_comp_wl_subsurface_parent_get(ec);
+   if (e_comp_wl_subsurface_check(ec))
+     new_parent = e_comp_wl_subsurface_parent_get(ec);
 
    if (viewport->epc == new_parent) return;
 
index 97ab3619ca41ce8da619d38a0264920b2dfd029e..2d05ddba026210d093b072b9d1ff1a7195e44e42 100644 (file)
@@ -362,6 +362,8 @@ _e_eom_output_by_ec_child_get(E_Client *ec)
 
         if (output_ec == ec) return eom_output;
 
+        if (!e_comp_wl_subsurface_check(ec)) continue;
+
         parent_ec = e_comp_wl_subsurface_parent_get(ec);
         while (parent_ec)
           {
@@ -449,6 +451,9 @@ _e_eom_client_get_current_by_ec_parrent(E_Client *ec)
    E_EomClientPtr client;
    E_Client *parent = NULL;
 
+   if (!e_comp_wl_subsurface_check(ec))
+     return NULL;
+
    EINA_LIST_FOREACH(g_eom->clients, l, client)
      {
         parent = e_comp_wl_subsurface_parent_get(ec);
index 5ce0c24ae6a4bdbe119ce33cfa51b2238f9b05b3..461bd7c4b98685c0e07074eb6bc75a1ab30dafc1 100644 (file)
@@ -1293,7 +1293,7 @@ fail:
 static const char*
 _get_win_prop_Subsurface_Parent(const Evas_Object *evas_obj)
 {
-   const E_Client *ec, *parent;
+   const E_Client *ec, *parent = NULL;
    char *str = NULL;
 
    ec = evas_object_data_get(evas_obj, "E_Client");
@@ -1302,7 +1302,9 @@ _get_win_prop_Subsurface_Parent(const Evas_Object *evas_obj)
    if (!ec->comp_data)
      return strdup("None");
 
-   parent = e_comp_wl_subsurface_parent_get((E_Client *)ec);
+   if (e_comp_wl_subsurface_check((E_Client *)ec))
+     parent = e_comp_wl_subsurface_parent_get((E_Client *)ec);
+
    if (asprintf(&str, "0x%zx", parent ? e_client_util_win_get(parent) : 0) < 0)
      return NULL;