From d200668b54a8ff4fb1bba300acffb0b31b32bcd9 Mon Sep 17 00:00:00 2001 From: Junseok Kim Date: Wed, 11 Jun 2025 11:07:00 +0900 Subject: [PATCH] e_policy_wl: Add input blocker object during splash launch Change-Id: Ifc39eea3f86ae834d637851830bf05da4943c602 --- src/bin/e_policy_wl.c | 45 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/src/bin/e_policy_wl.c b/src/bin/e_policy_wl.c index 67a0c1af3b..00f7e2a40d 100644 --- a/src/bin/e_policy_wl.c +++ b/src/bin/e_policy_wl.c @@ -184,6 +184,7 @@ typedef struct _E_Policy_Wl_Tzlaunch_Splash Eina_Bool custom_effect_callee; /* custom effect enabled */ const char *appid; + Evas_Object *input_block_obj; } E_Policy_Wl_Tzlaunch_Splash; typedef struct _E_Policy_Wl_Tzlaunch_Effect_Info @@ -6680,6 +6681,21 @@ _launchscreen_splash_cb_del(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, v tzlaunch_splash->obj = NULL; } +static void +_launchscreen_splash_cb_show(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED) +{ + E_Policy_Wl_Tzlaunch_Splash *tzlaunch_splash = data; + + if ((tzlaunch_splash) && + (tzlaunch_splash->obj == obj) && + (tzlaunch_splash->input_block_obj)) + { + ELOGF("TZPOL", "Raise input blocker for launchscreen", tzlaunch_splash->ec); + evas_object_show(tzlaunch_splash->input_block_obj); + evas_object_raise(tzlaunch_splash->input_block_obj); + } +} + static void _launchscreen_splash_cb_hide(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED) { @@ -6717,6 +6733,13 @@ _launch_splash_off(E_Policy_Wl_Tzlaunch_Splash *tzlaunch_splash) "Launchscreen hide | pid %d, replaced:%d, tzlaunch_pixmap:%p, ec_pixmap:%p", ec, tzlaunch_splash->pid, tzlaunch_splash->replaced, tzlaunch_splash->ep, ec->pixmap); + if (tzlaunch_splash->input_block_obj) + { + ELOGF("TZPOL", "Remove input blocker for launchscreen", ec); + evas_object_del(tzlaunch_splash->input_block_obj); + tzlaunch_splash->input_block_obj = NULL; + } + if (tzlaunch_splash->indicator_obj) { e_comp_object_indicator_unswallow(ec->frame, tzlaunch_splash->indicator_obj); @@ -6908,6 +6931,14 @@ _launchscreen_splash_setup(E_Policy_Wl_Tzlaunch_Splash *splash, } } + if (splash->input_block_obj) + { + ELOGF("TZPOL", "Setup input blocker for launchscreen", ec); + evas_object_move(splash->input_block_obj, 0, 0); + evas_object_resize(splash->input_block_obj, e_comp->w, e_comp->h); + evas_object_freeze_events_set(splash->input_block_obj, EINA_TRUE); + evas_object_show(splash->input_block_obj); + } /* Post job of setup content_type */ @@ -7006,6 +7037,9 @@ _launchscreen_splash_setup(E_Policy_Wl_Tzlaunch_Splash *splash, evas_object_event_callback_add(splash->obj, EVAS_CALLBACK_DEL, _launchscreen_splash_cb_del, splash); + evas_object_event_callback_add(splash->obj, + EVAS_CALLBACK_SHOW, + _launchscreen_splash_cb_show, splash); evas_object_event_callback_add(splash->obj, EVAS_CALLBACK_HIDE, _launchscreen_splash_cb_hide, splash); @@ -7249,6 +7283,14 @@ _tzlaunch_splash_add(struct wl_resource *res_tzlaunch_effect, struct wl_resource tzlaunch_splash->ec->icccm.name = eina_stringshare_add("Launchscreen"); tzlaunch_splash->ec->ignored = EINA_TRUE; + tzlaunch_splash->input_block_obj = evas_object_rectangle_add(e_comp->evas); + evas_object_name_set(tzlaunch_splash->input_block_obj, "tzlaunch_splash->input_block_obj"); + evas_object_move(tzlaunch_splash->input_block_obj, tzlaunch_splash->ec->x, tzlaunch_splash->ec->y); + evas_object_resize(tzlaunch_splash->input_block_obj, tzlaunch_splash->ec->w, tzlaunch_splash->ec->h); + evas_object_color_set(tzlaunch_splash->input_block_obj, 0, 0, 0, 0); + evas_object_smart_member_add(tzlaunch_splash->input_block_obj, tzlaunch_splash->ec->frame); + ELOGF("TZPOL", "Create input blocker for launchscreen", tzlaunch_splash->ec); + e_comp->launchscrns = eina_list_append(e_comp->launchscrns, tzlaunch_splash->ec); return tzlaunch_splash; @@ -7256,6 +7298,8 @@ error: if (tzlaunch_splash) { ERR("Could not initialize launchscreen client"); + if (tzlaunch_splash->input_block_obj) + evas_object_del(tzlaunch_splash->input_block_obj); if (tzlaunch_splash->ep) e_pixmap_win_id_del(tzlaunch_splash->ep); if (tzlaunch_splash->ec) @@ -7280,6 +7324,7 @@ _tzlaunch_splash_destroy(struct wl_resource *res_tzlaunch_splash) if (tzlaunch_splash->obj) { evas_object_event_callback_del_full(tzlaunch_splash->obj, EVAS_CALLBACK_DEL, _launchscreen_splash_cb_del, tzlaunch_splash); + evas_object_event_callback_del_full(tzlaunch_splash->obj, EVAS_CALLBACK_SHOW, _launchscreen_splash_cb_show, tzlaunch_splash); evas_object_event_callback_del_full(tzlaunch_splash->obj, EVAS_CALLBACK_HIDE, _launchscreen_splash_cb_hide, tzlaunch_splash); } -- 2.34.1