e_client: Ensure to create view_client 66/321066/1
authorSeunghun Lee <shiin.lee@samsung.com>
Thu, 13 Mar 2025 06:15:27 +0000 (15:15 +0900)
committerSeunghun Lee <shiin.lee@samsung.com>
Thu, 13 Mar 2025 09:37:27 +0000 (18:37 +0900)
This patch prevents E_Client instance from being created without
view_client.

Change-Id: I8922575c477189aa0a6c3e1d3fd80922abdccbeb

src/bin/core/e_client.c

index 58b9d9571a53ac456398f2b58e2aabafb20f4816..c9726be99abf6c699b04dc77008533f2c62b0c71 100644 (file)
@@ -3393,17 +3393,21 @@ _e_client_input_thread_clone_new(E_Client *ec)
    e_input_backend_thread_safe_call(_e_input_thread_client_new, &ec_new_data, sizeof(E_Input_Thread_Request_EClient_Data));
 }
 
-static void
+static Eina_Bool
 _e_client_view_init(E_Client *ec)
 {
    E_Client_Private *priv = PRI(ec);
    E_View_Tree *tree;
 
    tree = e_canvas_layer_view_tree_get(e_comp_canvas_get(), E_CANVAS_LAYER_CLIENT_NORMAL);
-   if (!tree)
-     return;
+
+   assert(tree);
 
    priv->view_client = e_view_client_create(ec, tree);
+   if (!priv->view_client)
+     return EINA_FALSE;
+
+   return EINA_TRUE;
 }
 
 E_API E_Client *
@@ -3532,7 +3536,13 @@ e_client_new(E_Pixmap *cp, int first_map, int internal)
         return NULL;
      }
 
-   _e_client_view_init(ec);
+   if (!_e_client_view_init(ec))
+     {
+        ERR("Failed to initialize view for ec(%p)", ec);
+        e_object_del(E_OBJECT(ec));
+        return NULL;
+     }
+
    evas_object_event_callback_add(ec->frame, EVAS_CALLBACK_SHOW, _e_client_cb_evas_show, ec);
    evas_object_event_callback_add(ec->frame, EVAS_CALLBACK_HIDE, _e_client_cb_evas_hide, ec);
    evas_object_event_callback_add(ec->frame, EVAS_CALLBACK_MOVE, _e_client_cb_evas_move, ec);