add a new hook - E_COMP_WL_HOOK_BUFFER_SIZE_CHANGE 09/213009/2 accepted/tizen/unified/20190902.111139 submit/tizen/20190902.063923
authorDoyoun Kang <doyoun.kang@samsung.com>
Thu, 29 Aug 2019 07:58:51 +0000 (16:58 +0900)
committerGwanglim Lee <gl77.lee@samsung.com>
Mon, 2 Sep 2019 06:36:46 +0000 (06:36 +0000)
We add a hook function to notify changing buffer size.
This hook is called if a buffer size is changed.

Change-Id: I8494f45a6521243dcdc4ab313b8e2046e840d79e

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

index cd7786d094aa0dcd52c7936bc138d278bf9f312d..4ed35a0b5319ca589a95b5ca814edca1963f61cf 100644 (file)
@@ -710,6 +710,7 @@ struct E_Client
       Eina_Bool accepts_focus : 1;
       Eina_Bool tz_position : 1; /* true when new position is set using tizen_position interface */
       unsigned char title : 1;
+      unsigned char buf_size : 1;
    } changes;
 
    struct
index 30cfd6b1dbf98e62748851303912c44fd8d3e38b..f17b3cbb843ced8deecb4ea66af1e70941f455fd 100644 (file)
@@ -63,6 +63,7 @@ static Eina_Inlist *_e_comp_wl_hooks[] =
    [E_COMP_WL_HOOK_SUBSURFACE_CREATE] = NULL,
    [E_COMP_WL_HOOK_BUFFER_CHANGE] = NULL,
    [E_COMP_WL_HOOK_CLIENT_REUSE] = NULL,
+   [E_COMP_WL_HOOK_BUFFER_SIZE_CHANGE] = NULL,
 };
 
 static Eina_Inlist *_e_comp_wl_intercept_hooks[] =
@@ -2115,9 +2116,20 @@ _e_comp_wl_cb_client_rot_change_end(void *d EINA_UNUSED, int t EINA_UNUSED, E_Ev
 static void
 _e_comp_wl_surface_state_size_update(E_Client *ec, E_Comp_Wl_Surface_State *state)
 {
+   int prev_w, prev_h;
    Eina_Rectangle *window;
 
+   prev_w = state->bw;
+   prev_h = state->bh;
+
    if (!e_pixmap_size_get(ec->pixmap, &state->bw, &state->bh)) return;
+
+   if ((prev_w != state->bw) ||
+       (prev_h != state->bh))
+     {
+        ec->changes.buf_size = EINA_TRUE;
+     }
+
    if (e_comp_object_frame_exists(ec->frame)) return;
    window = &ec->comp_data->shell.window;
    if ((!ec->borderless) && /* FIXME temporarily added this check code
@@ -2297,6 +2309,13 @@ _e_comp_wl_surface_state_commit(E_Client *ec, E_Comp_Wl_Surface_State *state)
                   EC_CHANGED(ec);
                }
           }
+
+        if (ec->changes.buf_size)
+          {
+             ELOGF("COMP", "Buffer size is changed. size(%d,%d)", ec, state->bw, state->bh);
+             _e_comp_wl_hook_call(E_COMP_WL_HOOK_BUFFER_SIZE_CHANGE, ec);
+             ec->changes.buf_size = EINA_FALSE;
+          }
      }
 
    /* map or unmap ec */
index 3adbfb4115b012d583793a4d90af6f82087c256c..75afbcebfc3d4d23741f47fe39e81fbd42edb370 100644 (file)
@@ -63,6 +63,7 @@ typedef enum _E_Comp_Wl_Hook_Point
    E_COMP_WL_HOOK_SUBSURFACE_CREATE,
    E_COMP_WL_HOOK_BUFFER_CHANGE,
    E_COMP_WL_HOOK_CLIENT_REUSE,
+   E_COMP_WL_HOOK_BUFFER_SIZE_CHANGE,
    E_COMP_WL_HOOK_LAST,
 } E_Comp_Wl_Hook_Point;