Defer hide comp object if is animating and Unset effect when buffer is destroied 40/74540/3
authorMinJeong Kim <minjjj.kim@samsung.com>
Tue, 14 Jun 2016 11:37:30 +0000 (20:37 +0900)
committerMinJeong Kim <minjjj.kim@samsung.com>
Thu, 16 Jun 2016 06:26:20 +0000 (23:26 -0700)
Change-Id: I90d684dd07332eed3aa28de0ad1e2c87029f7a3d
Signed-off-by: MinJeong Kim <minjjj.kim@samsung.com>
src/bin/e_comp_object.c
src/bin/e_comp_wl.c

index e0c05a67b0560179c6473bbff5f9cf1017e5d109..ddfd300dd24fbff6199c2b83eb6f123d4486f6b9 100644 (file)
@@ -17,6 +17,7 @@
    - comp_object_skip: object has a name which prohibits theme shadows
    - comp_object-to_del: list of objects which will be deleted when this object is deleted
    - comp_mirror: object is the result of e_comp_object_util_mirror_add()
+   - effect_running: object is animating by external module
 */
 
 #define UPDATE_MAX 512 // same as evas
index ec062b4e8cb56838d06a1fa513f892df18917d27..ead0de89e1dddaa8a0c97f061ba28cca0e49dddf 100644 (file)
@@ -1710,10 +1710,17 @@ _e_comp_wl_buffer_cb_destroy(struct wl_listener *listener, void *data EINA_UNUSE
         eina_hash_del_by_key(clients_buffer_hash, &buffer->resource);
         if (e_object_is_del(E_OBJECT(ec)))
           {
-             /* clear comp object immediately */
-             e_comp_object_redirected_set(ec->frame, 0);
-             evas_object_del(ec->frame);
-             ec->frame = NULL;
+             if (buffer->type != E_COMP_WL_BUFFER_TYPE_SHM)
+               {
+                  if ((e_comp_object_is_animating(ec->frame)) ||
+                      (evas_object_data_get(ec->frame, "effect_running")))
+                    e_comp_object_effect_set(ec->frame, NULL);
+
+                  /* clear comp object immediately */
+                  e_comp_object_redirected_set(ec->frame, 0);
+                  evas_object_del(ec->frame);
+                  ec->frame = NULL;
+               }
           }
         e_object_unref(E_OBJECT(ec));
 
@@ -2771,6 +2778,12 @@ _e_comp_wl_surface_render_stop(E_Client *ec)
    /* FIXME: this may be fine after e_pixmap can create textures for wl clients? */
    //if ((!ec->internal) && (!e_comp_gl_get()))
      ec->dead = ec->hidden = 1;
+
+   /* check if internal animation is running */
+   if (e_comp_object_is_animating(ec->frame)) return;
+   /* check if external animation is running */
+   if (evas_object_data_get(ec->frame, "effect_running")) return;
+
    evas_object_hide(ec->frame);
 }