Revert "e_comp_wl: Change input region set method" 54/289454/1
authorJunkyeong Kim <jk0430.kim@samsung.com>
Wed, 8 Mar 2023 01:54:42 +0000 (10:54 +0900)
committerTizen Window System <tizen.windowsystem@gmail.com>
Wed, 8 Mar 2023 02:02:04 +0000 (11:02 +0900)
This reverts commit e73ae666dfcef2058ea9e150ed60428bb1c8aa04.

Change-Id: Iee34018bc783422a6267c77b82f4ad393ea4c2ef

src/bin/e_comp_wl.c

index d555f91..53418e3 100644 (file)
@@ -2938,20 +2938,54 @@ _e_comp_wl_surface_state_commit(E_Client *ec, E_Comp_Wl_Surface_State *state)
        (!eina_tiler_empty(state->input)) &&
        ec->first_mapped)
      {
-        Eina_Rectangle *rect;
-        Eina_Iterator *itr;
+        Eina_Tiler *src, *tmp;
+        int sw, sh;
 
-        e_comp_object_input_objs_del(ec->frame);
-        itr = eina_tiler_iterator_new(state->input);
-        EINA_ITERATOR_FOREACH(itr, rect)
+        if (state->bw > 0) sw = state->bw;
+        else sw = ec->w;
+
+        if (state->bh > 0) sh = state->bh;
+        else sh = ec->h;
+
+        tmp = eina_tiler_new(sw, sh);
+        eina_tiler_tile_size_set(tmp, 1, 1);
+
+        eina_tiler_rect_add(tmp,
+                            &(Eina_Rectangle){0, 0, sw, sh});
+
+        if ((src = eina_tiler_intersection(state->input, tmp)))
           {
-             Eina_Rectangle r;
+             Eina_Rectangle *rect, *rect_input;
+             Eina_Iterator *itr, *itr_input;
 
-             EINA_RECTANGLE_SET(&r, rect->x, rect->y, rect->w, rect->h);
-             ELOGF("COMP", "Set Input Area x:%d, y:%d, w:%d, h:%d", ec, r.x, r.y, r.w, r.h);
-             e_comp_object_input_area_set(ec->frame, r.x, r.y, r.w, r.h);
+             e_comp_object_input_objs_del(ec->frame);
+             itr = eina_tiler_iterator_new(src);
+             EINA_ITERATOR_FOREACH(itr, rect)
+               {
+                  itr_input = eina_tiler_iterator_new(state->input);
+                  EINA_ITERATOR_FOREACH(itr_input, rect_input)
+                    {
+                       if ((rect->x == rect_input->x) && (rect->y == rect_input->y))
+                         {
+                            if (rect->w > rect_input->w) rect->w = rect_input->w;
+                            if (rect->h > rect_input->h) rect->h = rect_input->h;
+                         }
+                    }
+                  ELOGF("COMP", "Set Input Area x:%d, y:%d, w:%d, h:%d",
+                        ec, rect->x, rect->y, rect->w, rect->h);
+                  e_comp_object_input_area_set(ec->frame,
+                                               rect->x, rect->y,
+                                               rect->w, rect->h);
+                  eina_iterator_free(itr_input);
+               }
+
+             eina_iterator_free(itr);
+             eina_tiler_free(src);
           }
-        eina_iterator_free(itr);
+        else
+          e_comp_object_input_area_set(ec->frame, 0, 0, ec->w, ec->h);
+
+        eina_tiler_free(tmp);
 
         /* clear input tiler */
         eina_tiler_clear(state->input);