visibility: fixed bug for handling deiconify_approve. 13/106113/1
authorDoyoun Kang <doyoun.kang@samsung.com>
Tue, 20 Dec 2016 11:39:22 +0000 (20:39 +0900)
committerDoyoun Kang <doyoun.kang@samsung.com>
Tue, 20 Dec 2016 11:39:25 +0000 (20:39 +0900)
There was a bug that the window was shown by timeout if its transient_for
child window was deleted while it was activating

Change-Id: Ie802954c588f5600a4757cfe44b7363814be6ee9

src/bin/e_policy_visibility.c
src/bin/e_policy_visibility_internal.h

index 60b5effe4c6fcdaad08786fcf91ccbc06be3b9d6..fc292a413590ae36e6c93fb0c754feb7f546c2ac 100644 (file)
@@ -780,6 +780,16 @@ _e_vis_client_cb_evas_restack(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_
    if (visible) _e_vis_update_foreground_job_queue();
 }
 
+static Eina_Bool
+_e_vis_client_grab_clear_cb(void *data)
+{
+   E_Vis_Grab *grab = data;
+   VS_INF(grab->vc->ec, "FORCE CLEAR! Grab %s", grab->name);
+   grab->deleted = 1;
+   _e_vis_client_grab_remove(grab->vc, grab);
+   return ECORE_CALLBACK_DONE;
+}
+
 void
 _e_vis_client_delay_del(E_Object *obj)
 {
@@ -792,6 +802,11 @@ _e_vis_client_delay_del(E_Object *obj)
         VS_DBG(ec, "REF Delay Del");
         e_pixmap_ref(ec->pixmap);
         e_object_delay_del_ref(obj);
+        if (vc->grab)
+          {
+             E_FREE_FUNC(vc->grab->timer, ecore_timer_del);
+             vc->grab->timer = ecore_timer_add(E_CLEAR_GRAB_TIMEOUT, _e_vis_client_grab_clear_cb, vc->grab);
+          }
      }
 }
 
@@ -894,7 +909,7 @@ _e_vis_client_uniconify_render(E_Vis_Client *vc, E_Vis_Job_Type type, Eina_Bool
    if (_e_vis_client_is_uniconify_render_running(vc))
      goto end;
 
-   VS_DBG(ec, "BEGIN Uniconify render: raise %d\n", raise);
+   VS_DBG(ec, "BEGIN Uniconify render: raise %d", raise);
 
    _e_vis_client_prepare_foreground_signal_emit(vc);
    vc->state = E_VIS_ICONIFY_STATE_RUNNING_UNICONIFY;
index 661a07596be34ce7cdf1f4620d0da96aac55b3eb..fafb477d09d2315fceb2afdca8d75b780909f6bb 100644 (file)
@@ -2,6 +2,7 @@
 #define _E_POLICY_VISIBILITY_INTERNAL_H_
 
 #define E_VIS_TIMEOUT   2.0
+#define E_CLEAR_GRAB_TIMEOUT   0.01
 
 #define NAME(ec)        ec->icccm.name ? ec->icccm.name : ""
 #define STATE_STR(vc)                                                         \