ecore_wl2/ecore_evas: add job for processing configure event first. 79/284779/4 accepted/tizen/unified/20221130.171033
authorHosang Kim <hosang12.kim@samsung.com>
Fri, 25 Nov 2022 05:48:15 +0000 (14:48 +0900)
committerHosang Kim <hosang12.kim@samsung.com>
Mon, 28 Nov 2022 10:28:14 +0000 (19:28 +0900)
Sometimes before window configure event is processed, request of
resizing by application occurs. so I add job for processing configure
event first.

This reverts commit 770a7ba18b87d5176b3f2936dd0283d27b55e94c.

Change-Id: Idc0624a358f30acf948e50ef2408de678a271868

src/lib/ecore_wl2/ecore_wl2_private.h
src/lib/ecore_wl2/ecore_wl2_window.c
src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_common.c
src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_private.h

index 8263915..4e0ec5f 100644 (file)
@@ -353,6 +353,7 @@ struct _Ecore_Wl2_Window
         Eina_Bool input : 1;
         Eina_Bool fullscreen : 1;
         Eina_Bool maximized : 1;
+        Eina_Bool configure_event : 1;
      } pending;
 
    struct
index 2a92450..36a2e61 100644 (file)
@@ -228,6 +228,7 @@ _ecore_wl2_window_configure_send(Ecore_Wl2_Window *win)
      ev->states |= ECORE_WL2_WINDOW_STATE_MAXIMIZED;
 
    win->req_config = win->def_config;
+   win->pending.configure_event = EINA_TRUE;
 
    ERR("[WINDOW] Generate WINDOW_CONFIGURE event.. win:%d, states:%d, geo(%d,%d,%dx%d), type:%d", win->resource_id, ev->states, ev->x, ev->y, ev->w, ev->h, size_type);
    ecore_event_add(ECORE_WL2_EVENT_WINDOW_CONFIGURE, ev, NULL, NULL);
index c11be2f..e9d49e4 100644 (file)
@@ -349,8 +349,9 @@ _ecore_evas_wl_common_move(Ecore_Evas *ee, int x, int y)
 //
 
 static void
-_ecore_evas_wl_common_resize(Ecore_Evas *ee, int w, int h)
+_ecore_evas_wl_common_resize_job(void *data)
 {
+   Ecore_Evas *ee = data;
    Ecore_Evas_Engine_Wl_Data *wdata;
    int ow, oh, ew, eh;
    int diff = 0;
@@ -359,9 +360,14 @@ _ecore_evas_wl_common_resize(Ecore_Evas *ee, int w, int h)
 
    if (!ee) return;
 
+   int w = ee->expecting_resize.w;
+   int h = ee->expecting_resize.h;
+
    wdata = ee->engine.data;
    if (!wdata) return;
 
+   wdata->resize_job = NULL;
+
    ee->req.w = w;
    ee->req.h = h;
 
@@ -556,6 +562,28 @@ _ecore_evas_wl_common_resize(Ecore_Evas *ee, int w, int h)
         if (ee->func.fn_resize) ee->func.fn_resize(ee);
      }
    ecore_wl2_window_geometry_set(wdata->win, ee->x, ee->y, w, h);
+
+}
+
+static void
+_ecore_evas_wl_common_resize(Ecore_Evas *ee, int w, int h)
+{
+   Ecore_Evas_Engine_Wl_Data *wdata;
+
+   if (!ee) return;
+
+   ee->expecting_resize.w = w;
+   ee->expecting_resize.h = h;
+
+   wdata = ee->engine.data;
+   if (!wdata) return;
+
+   if (wdata->win->pending.configure_event)
+     {
+        if (wdata->resize_job) ecore_job_del(wdata->resize_job);
+        wdata->resize_job = ecore_job_add(_ecore_evas_wl_common_resize_job, ee);
+     }
+   else _ecore_evas_wl_common_resize_job(ee);
 }
 
 static void
@@ -660,7 +688,8 @@ _ecore_evas_wl_common_cb_window_configure(void *data EINA_UNUSED, int type EINA_
 
    wdata = ee->engine.data;
    if (!wdata) return ECORE_CALLBACK_PASS_ON;
-   if (wdata->win->pending.geom) return ECORE_CALLBACK_PASS_ON;
+
+   wdata->win->pending.configure_event = EINA_FALSE;
 
    if (!ecore_wl2_window_resizing_get(wdata->win) && !wdata->resizing)
      wdata->cw = wdata->ch = 0;
index 0895397..37d3fa1 100644 (file)
@@ -66,6 +66,7 @@ struct _Ecore_Evas_Engine_Wl_Data
    short output_rotation;
    Ecore_Event_Handler *ignore_output_transform_hdl;
    //
+   Ecore_Job *resize_job;
 
    Ecore_Evas_Wl_Selection_Data selection_data[ECORE_EVAS_SELECTION_BUFFER_LAST];
    Ecore_Wl2_Offer *external_offer;