e_comp_wl: Delegate unsetting input region 09/320109/2
authorSeunghun Lee <shiin.lee@samsung.com>
Wed, 5 Feb 2025 07:24:53 +0000 (16:24 +0900)
committerTizen Window System <tizen.windowsystem@gmail.com>
Mon, 24 Feb 2025 08:47:33 +0000 (08:47 +0000)
Change-Id: I35f3c7b714f5fb79b87d6b480b22dd10220b9cc3

src/bin/server/e_comp_wl.c
src/bin/server/e_comp_wl_intern.h
src/bin/server/e_compositor.c
src/bin/server/e_surface_view.c

index 5513e152e972e163f1eddf8579ccf1227447f108..90a3932061d415ac72fab6ea493bbfa5770f7dad 100644 (file)
@@ -5938,32 +5938,25 @@ e_comp_wl_client_surface_pending_buffer_set(E_Client *ec, E_Comp_Wl_Buffer *buff
 }
 
 EINTERN void
-e_comp_wl_client_input_region_set(E_Client *ec, pixman_region32_t *region)
+e_comp_wl_client_input_region_unset(E_Client *ec)
 {
-   if (pixman_region32_not_empty(region))
+   if (!e_input_thread_check_client_cloning_needed())
      return;
 
-   ELOGF("COMP", "         |unset input rect", NULL);
-   e_view_client_input_objs_del(e_client_view_get(ec));
-   e_view_client_input_area_set(e_client_view_get(ec), -1, -1, 1, 1);
-
-   if (e_input_thread_check_client_cloning_needed())
-     {
-        E_Input_Thread_Request_EClient_Data ec_data;
-        memset(&ec_data, 0, sizeof(E_Input_Thread_Request_EClient_Data));
+   E_Input_Thread_Request_EClient_Data ec_data;
+   memset(&ec_data, 0, sizeof(E_Input_Thread_Request_EClient_Data));
 
-        Eina_Rectangle *input_rect;
-        input_rect = eina_rectangle_new(-1, -1, 1, 1);
+   Eina_Rectangle *input_rect;
+   input_rect = eina_rectangle_new(-1, -1, 1, 1);
 
-        if (input_rect)
-          {
-             ec_data.ec = ec;
-             ec_data.rect = input_rect;
+   if (input_rect)
+     {
+        ec_data.ec = ec;
+        ec_data.rect = input_rect;
 
-             ICINF("[%s] ec(%p), x(-1), y(-1), w(1), h(1)\n", __func__, ec);
-             e_input_backend_thread_safe_call(_e_comp_wl_input_thread_input_area_clear, &ec_data, sizeof(E_Input_Thread_Request_EClient_Data));
-             e_input_backend_thread_safe_call(_e_comp_wl_input_thread_input_area_append, &ec_data, sizeof(E_Input_Thread_Request_EClient_Data));
-          }
+        ICINF("[%s] ec(%p), x(-1), y(-1), w(1), h(1)\n", __func__, ec);
+        e_input_backend_thread_safe_call(_e_comp_wl_input_thread_input_area_clear, &ec_data, sizeof(E_Input_Thread_Request_EClient_Data));
+        e_input_backend_thread_safe_call(_e_comp_wl_input_thread_input_area_append, &ec_data, sizeof(E_Input_Thread_Request_EClient_Data));
      }
 }
 
index b195afb9ad190d4c191069b4e116113f11a1f2b1..9333cf12a953798d181f7cdd8cb82398fb4679c3 100644 (file)
@@ -89,7 +89,7 @@ EINTERN void e_comp_wl_client_evas_deinit(E_Client *ec);
 EINTERN void e_comp_wl_client_surface_init(E_Client *ec);
 EINTERN void e_comp_wl_client_surface_finish(E_Client *ec);
 EINTERN void e_comp_wl_client_surface_pending_buffer_set(E_Client *ec, E_Comp_Wl_Buffer *buffer, int32_t sx, int32_t sy);
-EINTERN void e_comp_wl_client_input_region_set(E_Client *ec, pixman_region32_t *region);
+EINTERN void e_comp_wl_client_input_region_unset(E_Client *ec);
 
 EINTERN Eina_Bool e_comp_wl_client_subsurface_cyclic_reference_check(E_Client *ec, E_Client *parent);
 EINTERN void      e_comp_wl_client_subsurface_commit_to_cache(E_Client *ec);
index e7b83243bba0811a758524f47a797f621d772149..674baa43e19f70553dad1c8b9f2001f00a5a73ac 100644 (file)
@@ -1131,15 +1131,6 @@ _e_surface_pending_buffer_update(E_Surface *surface)
                                                ds_surface->current.dy);
 }
 
-static void
-_e_surface_pending_input_region_update(E_Surface *surface)
-{
-   struct ds_surface *ds_surface = surface->ds_surface;
-   E_Client *ec = surface->ec;
-
-   e_comp_wl_client_input_region_set(ec, &ds_surface->current.input);
-}
-
 static void
 _e_surface_pending_buffer_transform_update(E_Surface *surface)
 {
@@ -1269,9 +1260,6 @@ _e_surface_pending_update(E_Surface *surface)
    if (ds_surface->current.committed & DS_SURFACE_STATE_BUFFER)
      _e_surface_pending_buffer_update(surface);
 
-   if (ds_surface->current.committed & DS_SURFACE_STATE_INPUT_REGION)
-     _e_surface_pending_input_region_update(surface);
-
    if (ds_surface->current.committed & DS_SURFACE_STATE_TRANSFORM)
      _e_surface_pending_buffer_transform_update(surface);
 
index 97f56ec967f89e97ed78002fce8d966a0b88186d..a9b0ef05b8473ee0eb8a8840ec427a071bf51c0d 100644 (file)
@@ -8,6 +8,7 @@
 #include "e_compositor_private.h"
 #include "e_surface_view_intern.h"
 #include "e_comp_input_intern.h"
+#include "e_view_client_intern.h"
 
 #include <stdlib.h>
 #include <wayland-util.h>
@@ -169,6 +170,23 @@ _surface_view_opaque_region_update(E_Surface_View *view)
      e_comp_wl_hook_call(E_COMP_WL_HOOK_CLIENT_ALPHA_CHANGE, view->ec);
 }
 
+static void
+_surface_view_input_region_update(E_Surface_View *view)
+{
+   E_Client *ec = view->ec;
+   pixman_region32_t *input_region = e_surface_input_region_get(view->surface);
+
+   if (pixman_region32_not_empty(input_region))
+     return;
+
+   ESV_INF("Unset input region", ec);
+
+   e_view_client_input_objs_del(e_client_view_get(ec));
+   e_view_client_input_area_set(e_client_view_get(ec), -1, -1, 1, 1);
+
+   e_comp_wl_client_input_region_unset(ec);
+}
+
 static void
 _surface_view_cb_surface_commit(struct wl_listener *listener, void *data)
 {
@@ -181,6 +199,9 @@ _surface_view_cb_surface_commit(struct wl_listener *listener, void *data)
    if (event->committed & E_SURFACE_STATE_OPAQUE_REGION)
      _surface_view_opaque_region_update(view);
 
+   if (event->committed & E_SURFACE_STATE_INPUT_REGION)
+     _surface_view_input_region_update(view);
+
    if (e_comp_wl_remote_surface_commit(view->ec))
      return;