From: Junseok Kim Date: Wed, 11 Jun 2025 02:07:00 +0000 (+0900) Subject: e_policy_wl: Add input blocker object during splash launch X-Git-Tag: accepted/tizen/7.0/unified/20250612.122821^0 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=refs%2Fchanges%2F94%2F325494%2F1;p=platform%2Fupstream%2Fenlightenment.git e_policy_wl: Add input blocker object during splash launch Change-Id: Ifc39eea3f86ae834d637851830bf05da4943c602 --- diff --git a/src/bin/e_policy_wl.c b/src/bin/e_policy_wl.c index 70ec8ccaf6..9a65ed5dcc 100644 --- a/src/bin/e_policy_wl.c +++ b/src/bin/e_policy_wl.c @@ -175,6 +175,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 @@ -6324,6 +6325,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) { @@ -6361,6 +6377,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); @@ -6552,6 +6575,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 */ @@ -6650,6 +6681,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); @@ -6893,6 +6927,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; @@ -6900,6 +6942,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) @@ -6924,6 +6968,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); }