viewport: Apply viewport when parent resized 32/280532/1
authorSeunghun Lee <shiin.lee@samsung.com>
Wed, 24 Aug 2022 08:14:45 +0000 (17:14 +0900)
committerTizen Window System <tizen.windowsystem@gmail.com>
Wed, 31 Aug 2022 08:26:52 +0000 (17:26 +0900)
This patch is to resolve the issue that geometry of window applied by
viewport couldn't be updated when the size of its parent changed.

Updating geometry when parent gets resized makes sense because
calculating geometry is dependent on parent size.

Change-Id: I621ae16ca0eeadd381207119746d12249ffd92ee

src/bin/e_comp_wl_viewport.c

index ed012a52ed4b9162858bcbca658cf66d8ad9d544..9b726c0aacfc7b26dffbb571fc69cbf9f2ffe6c7 100644 (file)
@@ -115,7 +115,7 @@ _destroy_viewport(E_Viewport *viewport)
 
    ecore_event_handler_del(viewport->topmost_rotate_hdl);
 
-   if (viewport->epc && viewport->query_parent_size)
+   if (viewport->epc)
      {
         evas_object_event_callback_del_full(viewport->epc->frame, EVAS_CALLBACK_RESIZE,
                                             _e_comp_wl_viewport_cb_parent_resize, viewport);
@@ -252,11 +252,13 @@ _e_comp_wl_viewport_parent_check(E_Viewport *viewport)
 
    PIN("epc(%p)", viewport->epc);
 
-   if (!viewport->epc) return;
-
-   if (viewport->query_parent_size)
-     evas_object_event_callback_add(viewport->epc->frame, EVAS_CALLBACK_RESIZE,
-                                    _e_comp_wl_viewport_cb_parent_resize, viewport);
+   if (viewport->epc)
+     {
+        evas_object_event_callback_add(viewport->epc->frame,
+                                       EVAS_CALLBACK_RESIZE,
+                                       _e_comp_wl_viewport_cb_parent_resize,
+                                       viewport);
+     }
 }
 
 static void
@@ -554,17 +556,25 @@ _e_comp_wl_viewport_cb_parent_resize(void *data, Evas *e EINA_UNUSED, Evas_Objec
 
    if (e_object_is_del(E_OBJECT(viewport->epc))) return;
 
-   old_w = viewport->parent_size.w;
-   old_h = viewport->parent_size.h;
+   if (viewport->query_parent_size)
+     {
+        old_w = viewport->parent_size.w;
+        old_h = viewport->parent_size.h;
+
+        evas_object_geometry_get(viewport->epc->frame,
+                                 &viewport->parent_size.x,
+                                 &viewport->parent_size.y,
+                                 &viewport->parent_size.w,
+                                 &viewport->parent_size.h);
 
-   evas_object_geometry_get(viewport->epc->frame,
-                            &viewport->parent_size.x, &viewport->parent_size.y,
-                            &viewport->parent_size.w, &viewport->parent_size.h);
+        if ((old_w != viewport->parent_size.w) ||
+            (old_h != viewport->parent_size.h))
+          tizen_viewport_send_parent_size(viewport->resource,
+                                          viewport->parent_size.w,
+                                          viewport->parent_size.h);
+     }
 
-   if (old_w != viewport->parent_size.w || old_h != viewport->parent_size.h)
-     tizen_viewport_send_parent_size(viewport->resource,
-                                     viewport->parent_size.w,
-                                     viewport->parent_size.h);
+   e_comp_wl_viewport_apply(viewport->ec);
 }
 
 static void
@@ -798,12 +808,7 @@ _e_comp_wl_viewport_cb_query_parent_size(struct wl_client *client,
         w = viewport->parent_size.w;
         h = viewport->parent_size.h;
 
-        if (!viewport->query_parent_size)
-          {
-             viewport->query_parent_size = EINA_TRUE;
-             evas_object_event_callback_add(viewport->epc->frame, EVAS_CALLBACK_RESIZE,
-                                            _e_comp_wl_viewport_cb_parent_resize, viewport);
-          }
+        viewport->query_parent_size = EINA_TRUE;
      }
    else
      {