e_policy_visibility: modify code to consider the child's launch cancel while waiting... 83/309283/2
authorDoyoun Kang <doyoun.kang@samsung.com>
Mon, 8 Apr 2024 06:32:52 +0000 (15:32 +0900)
committerDoyoun Kang <doyoun.kang@samsung.com>
Mon, 8 Apr 2024 07:39:50 +0000 (07:39 +0000)
If the child window is to be hidden (by visibility) while the parent window is waiting for uniconify of child window,
then the uniconify_render timeout is occurred because the parent cannot get the e,action,launch,done signal of the child window.
So, we add e,action,launch,cancel signal event and use this to prevent the timeout of above case.

Change-Id: I1d1c2c5a200134c0eb7a668470172d95fddff2fb

src/bin/e_comp_object.c
src/bin/e_policy_visibility.c [changed mode: 0755->0644]

index 033a041..679701e 100644 (file)
@@ -2383,6 +2383,7 @@ _e_comp_intercept_hide(void *data, Evas_Object *obj)
      {
         ELOGF("COMP", "Hide. Cancel launching flag", cw->ec);
         cw->ec->launching = EINA_FALSE;
+        e_comp_object_signal_emit(cw->ec->frame, "e,action,launch,cancel", "e");
      }
 
    if (cw->ec->hidden)
old mode 100755 (executable)
new mode 100644 (file)
index 1c916cf..643e7b5
@@ -1713,6 +1713,10 @@ _e_vis_client_job_exec_by_type(E_Vis_Client *vc, E_Vis_Job_Type type)
               e_comp_object_signal_callback_del_full(vc->wait_for_child->frame,
                                                      "e,action,launch,done", "e",
                                                      _e_vis_cb_child_launch_done, vc);
+              e_comp_object_signal_callback_del_full(vc->wait_for_child->frame,
+                                                     "e,action,launch,cancel", "e",
+                                                     _e_vis_cb_child_launch_done, vc);
+
               e_pixmap_free(vc->wait_for_child->pixmap);
               e_object_delay_del_unref(E_OBJECT(vc->wait_for_child));
               vc->wait_for_child = NULL;
@@ -2075,7 +2079,10 @@ _e_vis_cb_child_launch_done(void *data, Evas_Object *obj, const char *signal, co
 
    E_FREE_FUNC(vc->grab, _e_vis_grab_release);
    if (comp_obj)
-     e_comp_object_signal_callback_del_full(comp_obj, "e,action,launch,done", "e", _e_vis_cb_child_launch_done, vc);
+     {
+        e_comp_object_signal_callback_del_full(comp_obj, "e,action,launch,done", "e", _e_vis_cb_child_launch_done, vc);
+        e_comp_object_signal_callback_del_full(comp_obj, "e,action,launch,cancel", "e", _e_vis_cb_child_launch_done, vc);
+     }
 }
 
 static void
@@ -2165,7 +2172,7 @@ _e_vis_intercept_show(void *data EINA_UNUSED, E_Client *ec)
                        if ((e_policy_visibility_client_is_uniconic(topmost)) &&
                            (e_client_visibility_get(topmost) == E_VISIBILITY_UNOBSCURED))
                          {
-                            ELOGF("COMP", "Already child(win:0x%08zx ec:%p) uniconify_render done..", ec, e_client_util_win_get(topmost), topmost);
+                            ELOGF("POL", "Already child(win:0x%08zx ec:%p) uniconify_render done..", ec, e_client_util_win_get(topmost), topmost);
                             return EINA_TRUE;
                          }
 
@@ -2180,6 +2187,11 @@ _e_vis_intercept_show(void *data EINA_UNUSED, E_Client *ec)
                                                          "e",
                                                          _e_vis_cb_child_launch_done,
                                                          vc);
+                       e_comp_object_signal_callback_add(topmost->frame,
+                                                         "e,action,launch,cancel",
+                                                         "e",
+                                                         _e_vis_cb_child_launch_done,
+                                                         vc);
 
                        /* do not allow child's removal */
                        vc->wait_for_child = topmost;