From 50ec6e54aec32a534abfcdf9877e6cedb7ffa7dc Mon Sep 17 00:00:00 2001 From: "Junseok, Kim" Date: Fri, 20 Mar 2020 19:34:08 +0900 Subject: [PATCH] e_client: didn't focus client that child couldn't get focus without focus_skip_set Change-Id: I22bcbe942e328f1364efcd9583e052e12a5f11b3 Signed-off-by: Junseok, Kim --- src/bin/e_client.c | 36 +++++++++++++++++++++++++----------- 1 file changed, 25 insertions(+), 11 deletions(-) diff --git a/src/bin/e_client.c b/src/bin/e_client.c index 5a8d47342f..f4e9511bff 100644 --- a/src/bin/e_client.c +++ b/src/bin/e_client.c @@ -876,7 +876,8 @@ _e_client_check_really_iconified(E_Client *ec) static Eina_Bool _e_client_focus_can_take(E_Client *ec) { - E_Client *cec = NULL; + E_Client *client_ec = NULL; + E_Client *above_ec = NULL; if (!ec) return EINA_FALSE; if (e_object_is_del(E_OBJECT(ec))) return EINA_FALSE; @@ -885,17 +886,30 @@ _e_client_focus_can_take(E_Client *ec) if (ec->lock_focus_in || ec->lock_focus_out) return EINA_FALSE; if (!ec->visible) return EINA_FALSE; if (ec->bg_state) return EINA_FALSE; - if (!(cec = _e_client_check_obscured_by_children_group(ec)) || - _e_client_check_really_iconified(cec)) + if (ec->visibility.obscured != E_VISIBILITY_UNOBSCURED) { - if (ec->visibility.obscured != E_VISIBILITY_UNOBSCURED) - { - if (_e_client_check_really_iconified(ec)) - return EINA_FALSE; - if (ec->visibility.obscured == E_VISIBILITY_UNKNOWN) - return EINA_FALSE; - } - if (_e_client_check_fully_contain_by_above(ec, EINA_FALSE)) return EINA_FALSE; + if (_e_client_check_really_iconified(ec)) + return EINA_FALSE; + if (ec->visibility.obscured == E_VISIBILITY_UNKNOWN) + return EINA_FALSE; + } + + above_ec = _e_client_check_fully_contain_by_above(ec, EINA_FALSE); + if (!above_ec) return EINA_TRUE; + + client_ec = _e_client_check_obscured_by_children_group(ec); + if (!client_ec) return EINA_FALSE; + + if (above_ec != client_ec) + return EINA_FALSE; + + if (_e_client_focus_can_take(client_ec)) + { + return EINA_FALSE; + } + else if (_e_client_check_fully_contain_by_above(client_ec, EINA_FALSE)) + { + return EINA_FALSE; } return EINA_TRUE; -- 2.34.1