e_comp_object: defaultly use evas_object for input event instead image object 18/256318/2 accepted/tizen_6.0_unified_hotfix tizen_6.0_hotfix accepted/tizen/6.0/unified/hotfix/20210407.091812 submit/tizen_6.0_hotfix/20210406.032949
authorChangyeon Lee <cyeon.lee@samsung.com>
Tue, 30 Mar 2021 09:40:18 +0000 (18:40 +0900)
committerChangyeon Lee <cyeon.lee@samsung.com>
Thu, 1 Apr 2021 11:32:38 +0000 (20:32 +0900)
map_input_object is shown for avoiding the event transform by evas_map
which is applied at effect object.

when comp_object is set by unredirect, map_input_object is
hidden even if buffer of client is rotated acoording to screen rotation.

so if client is set by redirect, map_input_object receive input event
and if client is set by unredirect, cw->obj receive input event.

it doesn't have a problem in normal cases because the size of
map_input_object(redirect) and cw->obj(unredirect) are the same size
of window(ec size).

but it has a problem in case of down/up input event

1. down event is signaled and cw->obj receive event
   comp_object is unredirect and size of cw->obj is same window size
   ex) widow size (1080x1920), cw->obj (1080x1920)

2. comp_object is redirect and map_input_object is shown and
   cw->obj is resized according to buffer size(rotated).
   ex) window size (1080x1920) cw->obj (1920x1080)
       map_input_object(1080x1920)

3. up event is signaled but cw->obj receive event
   so evas send input coordinate with current cw->obj size
   because evas can't change evas_object which is received between down
   and up event

it causes the wrong coordinate of input event is sent to the client.
so map_input_object is renamed default_input_object and
default_input_object use for input event instead image object(cw->obj).

Change-Id: I277c3804c3a2a73d2562cdbdc98cca9dfda40645

src/bin/e_comp_object.c

index 883a5e1fff86d7ccd02db1064327f1d80a83e9af..d35fef8c58df0030e5c3c9d3e583a9b13b114151 100644 (file)
@@ -90,7 +90,7 @@ typedef struct _E_Comp_Object
    Evas_Object         *effect_obj; // effects object
    Evas_Object         *transform_bg_obj;   // transform backgroung with keep_ratio option
    Evas_Object         *transform_tranp_obj;// transform transp rect obj
-   Evas_Object         *map_input_obj; // input object to avoid the event transform by evas map
+   Evas_Object         *default_input_obj; // default input object
    unsigned int         layer; //e_comp_canvas_layer_map(cw->ec->layer)
    Eina_List           *obj_mirror;  // extra mirror objects
    Eina_Tiler          *updates; //render update regions
@@ -1183,7 +1183,7 @@ _e_comp_object_shadow_setup(E_Comp_Object *cw)
           }
      }
 
-   evas_object_pass_events_set(cw->map_input_obj, pass_event_flag);
+   evas_object_pass_events_set(cw->default_input_obj, pass_event_flag);
    evas_object_pass_events_set(cw->obj, pass_event_flag);
 #ifdef BORDER_ZOOMAPS
    e_zoomap_child_edje_solid_setup(cw->zoomobj);
@@ -1342,12 +1342,12 @@ _e_comp_object_setup(E_Comp_Object *cw)
         evas_object_event_callback_add(cw->smart_obj, EVAS_CALLBACK_MOUSE_WHEEL, _e_comp_object_cb_mouse_wheel, cw);
      }
 
-   cw->map_input_obj = evas_object_rectangle_add(e_comp->evas);
-   evas_object_name_set(cw->map_input_obj, "cw->map_input_obj");
-   evas_object_move(cw->map_input_obj, cw->x, cw->y);
-   evas_object_resize(cw->map_input_obj, cw->w, cw->h);
-   evas_object_color_set(cw->map_input_obj, 0, 0, 0, 0);
-   evas_object_smart_member_add(cw->map_input_obj, cw->smart_obj);
+   cw->default_input_obj = evas_object_rectangle_add(e_comp->evas);
+   evas_object_name_set(cw->default_input_obj, "cw->default_input_obj");
+   evas_object_move(cw->default_input_obj, cw->x, cw->y);
+   evas_object_resize(cw->default_input_obj, cw->w, cw->h);
+   evas_object_color_set(cw->default_input_obj, 0, 0, 0, 0);
+   evas_object_smart_member_add(cw->default_input_obj, cw->smart_obj);
 
    _e_comp_object_hook_call(E_COMP_OBJECT_HOOK_OBJECT_SETUP, cw->ec);
 }
@@ -2679,7 +2679,7 @@ _e_comp_object_frame_recalc(E_Comp_Object *cw)
                     }
                }
           }
-        evas_object_pass_events_set(cw->map_input_obj, pass_event_flag);
+        evas_object_pass_events_set(cw->default_input_obj, pass_event_flag);
         evas_object_pass_events_set(cw->obj, pass_event_flag);
      }
    else
@@ -3113,7 +3113,7 @@ _e_comp_smart_hide(Evas_Object *obj)
    evas_object_hide(cw->clip);
    if (cw->input_obj) evas_object_hide(cw->input_obj);
    evas_object_hide(cw->effect_obj);
-   evas_object_hide(cw->map_input_obj);
+   if (cw->default_input_obj) evas_object_hide(cw->default_input_obj);
    if (cw->transform_bg_obj) evas_object_hide(cw->transform_bg_obj);
    if (cw->transform_tranp_obj) evas_object_hide(cw->transform_tranp_obj);
    if (stopping)
@@ -3186,7 +3186,7 @@ _e_comp_smart_show(Evas_Object *obj)
    if (cw->mask.obj) evas_object_show(cw->mask.obj);
    if (cw->transform_bg_obj) evas_object_show(cw->transform_bg_obj);
    if (cw->transform_tranp_obj) evas_object_show(cw->transform_tranp_obj);
-   if (evas_object_map_enable_get(cw->effect_obj)) evas_object_show(cw->map_input_obj);
+   if (cw->default_input_obj) evas_object_show(cw->default_input_obj);
    e_comp_render_queue();
    if (cw->ec->input_only)
      {
@@ -3279,7 +3279,7 @@ _e_comp_smart_del(Evas_Object *obj)
    if (cw->dim.mask_obj) evas_object_del(cw->dim.mask_obj);
    evas_object_del(cw->transform_bg_obj);
    evas_object_del(cw->transform_tranp_obj);
-   evas_object_del(cw->map_input_obj);
+   evas_object_del(cw->default_input_obj);
    eina_stringshare_del(cw->frame_theme);
    eina_stringshare_del(cw->frame_name);
    if (cw->animating)
@@ -3300,7 +3300,7 @@ _e_comp_smart_move(Evas_Object *obj, int x, int y)
 
    cw->x = x, cw->y = y;
    evas_object_move(cw->effect_obj, x, y);
-   evas_object_move(cw->map_input_obj, x, y);
+   evas_object_move(cw->default_input_obj, x, y);
    if (cw->input_obj) evas_object_move(cw->input_obj, x, y);
 
    e_comp_object_map_update(obj);
@@ -3340,7 +3340,7 @@ _e_comp_smart_resize(Evas_Object *obj, int w, int h)
                CRI("CW RSZ: %dx%d || PX: %dx%d", ww, hh, pw, ph);
           }
         evas_object_resize(cw->effect_obj, tw, th);
-        evas_object_resize(cw->map_input_obj, w, h);
+        evas_object_resize(cw->default_input_obj, w, h);
         if (cw->zoomobj) e_zoomap_child_resize(cw->zoomobj, pw, ph);
         if (cw->input_obj)
           evas_object_resize(cw->input_obj, w, h);
@@ -3362,7 +3362,7 @@ _e_comp_smart_resize(Evas_Object *obj, int w, int h)
    else
      {
         evas_object_resize(cw->effect_obj, tw, th);
-        evas_object_resize(cw->map_input_obj, w, h);
+        evas_object_resize(cw->default_input_obj, w, h);
      }
    if (!cw->visible)
      {
@@ -4038,7 +4038,7 @@ e_comp_object_input_area_set(Evas_Object *obj, int x, int y, int w, int h)
         evas_object_geometry_set(input_rect_data->obj,
           MAX(cw->ec->client.x + (!!cw->frame_object * cw->client_inset.l), 0) + x,
           MAX(cw->ec->client.y + (!!cw->frame_object * cw->client_inset.t), 0) + y, w, h);
-        evas_object_pass_events_set(cw->map_input_obj, 1);
+        evas_object_pass_events_set(cw->default_input_obj, 1);
         evas_object_pass_events_set(cw->obj, 1);
         if (cw->visible)
           {
@@ -4050,7 +4050,7 @@ e_comp_object_input_area_set(Evas_Object *obj, int x, int y, int w, int h)
      {
         evas_object_smart_member_del(cw->input_obj);
         E_FREE_FUNC(cw->input_obj, evas_object_del);
-        evas_object_pass_events_set(cw->map_input_obj, 0);
+        evas_object_pass_events_set(cw->default_input_obj, 0);
         evas_object_pass_events_set(cw->obj, 0);
      }
 }
@@ -6072,7 +6072,6 @@ e_comp_object_map_update(Evas_Object *obj)
           {
              ELOGF("TRANSFORM", "map: disable", cw->ec);
              evas_object_map_enable_set(cw->effect_obj, EINA_FALSE);
-             evas_object_hide(cw->map_input_obj);
           }
         e_pixmap_size_get(ec->pixmap, &bw, &bh);
         evas_object_resize(cw->effect_obj, bw, bh);
@@ -6124,8 +6123,6 @@ e_comp_object_map_update(Evas_Object *obj)
     */
    _e_comp_object_map_transform_rect(cw->ec, 0, 0, bw, bh, NULL, NULL, &tw, &th);
    evas_object_resize(cw->effect_obj, tw, th);
-
-   evas_object_show(cw->map_input_obj);
 }
 
 EINTERN Eina_Bool