Send visibility after widget added 96/101796/5 submit/tizen_3.0/20161202.062936
authorHyunho Kang <hhstark.kang@samsung.com>
Fri, 2 Dec 2016 07:04:31 +0000 (16:04 +0900)
committerHyunho Kang <hhstark.kang@samsung.com>
Fri, 2 Dec 2016 08:09:19 +0000 (00:09 -0800)
Change-Id: I08214df5486ba36026152931424cea94de7be9d3
Signed-off-by: Hyunho Kang <hhstark.kang@samsung.com>
widget_toolkit/src/compositor.c

index 1bbe6cf..af2c03c 100644 (file)
@@ -51,10 +51,9 @@ struct compositor_handler {
        void *data;
        Evas_Object *evas_obj;
        int freeze;
-       bool is_init;
+
        struct tizen_remote_surface *surface;
        bool cancel_touch;
-       bool visible;
 };
 
 struct compositor_h {
@@ -66,7 +65,7 @@ static Ecore_Event_Handler *__visibility_listener;
 static struct compositor_h *__comp;
 static int __init_count;
 
-static bool __obj_is_visible(struct compositor_handler *handler)
+static bool __obj_is_visible(Evas_Object *obj)
 {
        int x, y, w, h;
        Ecore_Wl_Window *window = NULL;
@@ -75,42 +74,20 @@ static bool __obj_is_visible(struct compositor_handler *handler)
 
        window = elm_win_wl_window_get(__comp->win);
        ecore_wl_window_geometry_get(window, &window_x, &window_y, &window_w, &window_h);
-       evas_object_geometry_get(handler->evas_obj, &x, &y, &w, &h);
+       evas_object_geometry_get(obj, &x, &y, &w, &h);
        rotation = ecore_wl_window_rotation_get(window);
 
        if (x >= -w && x < window_w &&
                        y >= - h && y < window_h &&
-                       (rotation == 0 || rotation == 180)) {
-               handler->visible = true;
+                       (rotation == 0 || rotation == 180))
                return true;
-       else if (x >= - w && x < window_h &&
+       else if (x >= - w && x < window_h &&
                        y >= - h && y < window_w &&
-                       (rotation == 90 || rotation == 270)) {
-               handler->visible = true;
+                       (rotation == 90 || rotation == 270))
                return true;
-       }
-       handler->visible = false;
        return false;
 }
 
-static void __obj_move_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
-{
-       struct compositor_handler *handler = (struct compositor_handler *)data;
-
-       if (handler->cancel_touch)
-               return;
-
-       if (!handler->is_init) {
-               handler->is_init = true;
-               return;
-       }
-
-       if (__obj_is_visible(handler))
-               _compositor_set_visibility(obj, VISIBILITY_TYPE_UNOBSCURED);
-       else
-               _compositor_set_visibility(obj, VISIBILITY_TYPE_FULLY_OBSCURED);
-}
-
 static void __rs_cb_mouse_down(void *data, Evas *e, Evas_Object *obj, void *event_info)
 {
        struct compositor_handler *handler = (struct compositor_handler *)data;
@@ -127,7 +104,7 @@ static void __rs_cb_mouse_down(void *data, Evas *e, Evas_Object *obj, void *even
        evas_object_geometry_get(obj, &x, &y, &w, &h);
        _D("mouse down: %d %d", ev->canvas.x - x, ev->canvas.y - y);
 
-       if (!handler->visible) {
+       if (!__obj_is_visible(handler->evas_obj)) {
                _D("object is invisible ignore event");
                return;
        }
@@ -169,7 +146,7 @@ static void __rs_cb_mouse_up(void *data, Evas *e, Evas_Object *obj, void *event_
        evas_object_geometry_get(obj, &x, &y, &w, &h);
        _D("mouse up: %d %d", ev->canvas.x - x, ev->canvas.y - y);
 
-       if (!handler->visible) {
+       if (!__obj_is_visible(handler->evas_obj)) {
                _D("object is invisible ignore event");
                return;
        }
@@ -206,7 +183,7 @@ static void __rs_cb_mouse_move(void *data, Evas *e, Evas_Object *obj, void *even
        evas_object_geometry_get(obj, &x, &y, &w, &h);
        _D("mouse move: %d %d", ev->cur.canvas.x - x, ev->cur.canvas.y - y);
 
-       if (!handler->visible) {
+       if (!__obj_is_visible(handler->evas_obj)) {
                _D("object is invisible ignore event");
                return;
        }
@@ -239,7 +216,7 @@ static void __rs_cb_mouse_wheel(void *data, Evas *e, Evas_Object *obj, void *eve
 
        _D("mouse wheel");
 
-       if (!handler->visible) {
+       if (!__obj_is_visible(handler->evas_obj)) {
                _D("object is invisible ignore event");
                return;
        }
@@ -314,8 +291,11 @@ static void __rs_cb_buffer_update(struct tizen_remote_surface *trs, struct wl_bu
                                        handler->data);
                }
 
-               evas_object_event_callback_add(handler->evas_obj,
-                       EVAS_CALLBACK_MOVE, __obj_move_cb, handler);
+               if (__obj_is_visible(handler->evas_obj))
+                       _compositor_set_visibility(handler->evas_obj, VISIBILITY_TYPE_UNOBSCURED);
+               else
+                       _compositor_set_visibility(handler->evas_obj, VISIBILITY_TYPE_FULLY_OBSCURED);
+
        }
 
        tbm_surface = wl_buffer_get_user_data(buffer);
@@ -445,9 +425,7 @@ API int _compositor_set_handler(const char *app_id, _compositor_handler_cb cb, v
        handler->cb = cb;
        handler->data = data;
        handler->freeze = 0;
-       handler->is_init = false;
        handler->cancel_touch = false;
-       handler->visible = true;
 
        /*
         * handler will be freed in __rs_cb_missing callabck
@@ -484,7 +462,6 @@ API int _compositor_set_handler_by_rid(int resource_id, _compositor_handler_cb c
        handler->cb = cb;
        handler->data = data;
        handler->freeze = 0;
-       handler->is_init = false;
 
        aul_rsm_viewer_set_surface_handler_by_rid(resource_id, &__rs_listener,
                                                                handler);
@@ -608,7 +585,7 @@ static void __send_visibility(gpointer key, gpointer value, gpointer user_data)
        if (handler->freeze)
                return;
 
-       if (!__obj_is_visible(handler))
+       if (!__obj_is_visible(handler->evas_obj))
                return;
 
        if (event)