From 30b8c0fb4bb73e0cb21c15d9042dd86d627ee5c2 Mon Sep 17 00:00:00 2001 From: Doyoun Kang Date: Tue, 14 Jan 2020 19:26:01 +0900 Subject: [PATCH] e_service_quickpanel: skip special windows while finding below/eval windows Change-Id: I002336f5803977b23208edc287facd7f895382fb --- src/bin/services/e_service_quickpanel.c | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/src/bin/services/e_service_quickpanel.c b/src/bin/services/e_service_quickpanel.c index 6a825cb2c0..bdab1ada96 100644 --- a/src/bin/services/e_service_quickpanel.c +++ b/src/bin/services/e_service_quickpanel.c @@ -174,6 +174,8 @@ static void _quickpanel_client_evas_cb_show(void *data, Evas *evas, Eva static void _quickpanel_client_evas_cb_hide(void *data, Evas *evas, Evas_Object *obj, void *event); static void _quickpanel_client_evas_cb_move(void *data, Evas *evas, Evas_Object *obj, void *event); +static Eina_Bool _quickpanel_check_skip_client(E_Client *ec); + inline static Eina_Bool _e_qp_srv_is_effect_finish_job_started(E_Policy_Quickpanel *qp) { @@ -1582,6 +1584,23 @@ end: return ECORE_CALLBACK_PASS_ON; } +static Eina_Bool +_quickpanel_check_skip_client(E_Client *ec) +{ + Eina_Bool skip = EINA_FALSE; + + if (!ec) return EINA_TRUE; + + if (e_policy_client_is_keyboard(ec) || + e_policy_client_is_keyboard_sub(ec) || + e_policy_client_is_cursor(ec)) + { + skip = EINA_TRUE; + } + + return skip; +} + /* NOTE: if the state(show/hide/stack) of windows which are stacked below * quickpanel is changed, we close the quickpanel. * the most major senario is that quickpanel should be closed when WiFi popup to @@ -1608,7 +1627,7 @@ _quickpanel_below_visible_client_get(E_Policy_Quickpanel *qp) for (ec = e_client_below_get(qp->ec); ec; ec = e_client_below_get(ec)) { if (!ec->visible) continue; - if (e_policy_client_is_keyboard(ec)) continue; + if (_quickpanel_check_skip_client(ec)) continue; if (!E_INTERSECTS(ec->x, ec->y, ec->w, ec->h, zx, zy, zw, zh)) continue; return ec; } @@ -1630,7 +1649,7 @@ _quickpanel_below_change_eval(void *data, void *event) if (EINA_UNLIKELY((!ev) || (!ev->ec))) return; - if (e_policy_client_is_cursor(ev->ec)) + if (_quickpanel_check_skip_client(ev->ec)) return; qp->changes.below = EINA_TRUE; -- 2.34.1