e_client: add e_client_resize_object_create_cb function 97/278397/1
authorDoyoun Kang <doyoun.kang@samsung.com>
Wed, 20 Jul 2022 05:02:21 +0000 (14:02 +0900)
committerJunseok Kim <juns.kim@samsung.com>
Wed, 20 Jul 2022 06:01:44 +0000 (15:01 +0900)
This supports e's module to make a customized resize object.
If the E_Client_Resize_Object_Create_Cb is set by e's module, then it's up to the module
to make a resize object. In this case, e doesn't make a default resize object.

Change-Id: I79612a2e4e1e2130a5c6be2cd2178a92cba5b1b7

src/bin/e_client.c
src/bin/e_client.h

index 2b36c3f215b2a9fcfa82d11237907f6a026ce138..42b2b69abf2a855c046eb61deed38746a1de9bc4 100644 (file)
@@ -65,6 +65,7 @@ static Ecore_Timer *action_timer = NULL;
 static Eina_Rectangle action_orig = {0, 0, 0, 0};
 
 static E_Client_Layout_Cb _e_client_layout_cb = NULL;
+static E_Client_Resize_Object_Create_Cb _e_client_resize_object_create_cb = NULL;
 
 static Eina_Bool _e_calc_visibility = EINA_FALSE;
 static Eina_Bool _e_visibility_changed = EINA_FALSE;
@@ -1765,13 +1766,18 @@ _e_client_resize_object_create(E_Client *ec)
 
    Evas_Object *resize_obj = NULL;
 
-   if (e_config->resize_object.type == 1) // image object
-     {
-        resize_obj = _e_client_resize_object_image_get(ec);
-     }
-   else // rectangle
+   if (_e_client_resize_object_create_cb)
+     resize_obj = _e_client_resize_object_create_cb(ec);
+   else
      {
-        resize_obj = _e_client_resize_object_rectangle_get(ec);
+        if (e_config->resize_object.type == 1) // image object
+          {
+             resize_obj = _e_client_resize_object_image_get(ec);
+          }
+        else // rectangle
+          {
+             resize_obj = _e_client_resize_object_rectangle_get(ec);
+          }
      }
    EINA_SAFETY_ON_NULL_RETURN_VAL(resize_obj, NULL);
 
@@ -8791,3 +8797,11 @@ e_client_transient_policy_get(E_Client *ec)
    if (!ec) return E_TRANSIENT_ABOVE;
    return ec->transient_policy;
 }
+
+E_API void
+e_client_resize_object_create_cb_set(E_Client_Resize_Object_Create_Cb cb)
+{
+   if (_e_client_resize_object_create_cb && cb)
+     CRI("ATTEMPTING TO OVERWRITE EXISTING CLIENT RESIZE OBJECT CREATE HOOK!!!");
+   _e_client_resize_object_create_cb = cb;
+}
index f0b248dc22ae5f6f72ec817f88d293a9a03321e7..070d6f954812d693d7695e23b8e450952e52efbf 100644 (file)
@@ -269,6 +269,7 @@ typedef void (*E_Client_Hook_Cb)(void *data, E_Client *ec);
 typedef Eina_Bool (*E_Client_Intercept_Hook_Cb)(void *data, E_Client *ec);
 typedef void (*E_Client_Layout_Cb)(void);
 typedef Eina_Bool (*E_Client_Surface_Tree_Foreach)(void *data, E_Client *ec);
+typedef Evas_Object* (*E_Client_Resize_Object_Create_Cb)(E_Client *ec);
 #else
 
 #define E_CLIENT_TYPE (int)0xE0b01002
@@ -1292,6 +1293,8 @@ E_API Eina_Bool e_client_is_belong_to_parent(E_Client *ec);
 E_API void e_client_transient_policy_set(E_Client *ec, E_Transient policy);
 E_API E_Transient e_client_transient_policy_get(E_Client *ec);
 
+E_API void e_client_resize_object_create_cb_set(E_Client_Resize_Object_Create_Cb cb);
+
 /**
  * Move window to coordinates that do not account client decorations yet.
  *