e_policy_visibility: modify code to consider the child's launch cancel while waiting... 89/308989/1
authorDoyoun Kang <doyoun.kang@samsung.com>
Mon, 1 Apr 2024 00:39:21 +0000 (09:39 +0900)
committerDoyoun Kang <doyoun.kang@samsung.com>
Wed, 3 Apr 2024 08:53:20 +0000 (17:53 +0900)
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: I97145aab138ce0485767c90836805ade10704415

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

index d0b2e82da1328d4c734428fa6455eb897de6e40a..c48b0661f064b722900e2785aad716de536d42dd 100644 (file)
@@ -2421,6 +2421,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 c0c235a..dea8703
@@ -1710,6 +1710,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;
@@ -2072,7 +2076,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
@@ -2162,7 +2169,7 @@ _e_vis_intercept_show(void *data EINA_UNUSED, E_Client *ec)
                        if ((e_policy_visibility_client_is_uniconic(topmost)) &&
                            (topmost->visibility.obscured == 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;
                          }
 
@@ -2177,6 +2184,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;