e_client: don't focus if child is focus deferred 16/232916/1 accepted/tizen/unified/20200510.220504 submit/tizen/20200508.090411
authorJunseok, Kim <juns.kim@samsung.com>
Fri, 8 May 2020 08:40:09 +0000 (17:40 +0900)
committerJunSeok Kim <juns.kim@samsung.com>
Fri, 8 May 2020 08:58:37 +0000 (08:58 +0000)
Change-Id: Ibcbcc2cfe7f46b5c940c19cc2b5dc21fe04c280b
Signed-off-by: Junseok, Kim <juns.kim@samsung.com>
src/bin/e_client.c

index 79971c2b4caa95ecb9003bd8b0a72138abccd3c7..29a3821560a59d82926ffaf848c6118a2f6acfc3 100644 (file)
@@ -3602,6 +3602,8 @@ _e_client_focus_calculate(E_Zone *zone)
 {
    E_Client *defered_focus_ec = NULL, *reverted_focus_ec = NULL;
    E_Client *ec = NULL, *old_focused = NULL, *cec = NULL;
+   Eina_List *child_list = NULL;
+   Eina_Bool child_deferred;
 
    EINA_SAFETY_ON_NULL_RETURN(zone);
    if (zone->display_state == E_ZONE_DISPLAY_STATE_OFF) return;
@@ -3655,6 +3657,19 @@ _e_client_focus_calculate(E_Zone *zone)
         if (focused && (focused->layer > ec->layer)) continue;
         else if (!focused && reverted_focus_ec && (reverted_focus_ec->layer > ec->layer)) continue;
 
+        // check transient_for child defered
+        child_deferred = EINA_FALSE;
+        child_list = eina_list_clone(ec->transients);
+        EINA_LIST_FREE(child_list, cec)
+          {
+             if (eina_list_data_find(defer_focus_stack, cec))
+               {
+                  child_deferred = EINA_TRUE;
+                  break;
+               }
+          }
+        if (child_deferred) continue;
+
         defered_focus_ec = ec;
         break;
      }