e_policy_wl: Add input blocker object during splash launch 95/325495/1
authorJunseok Kim <juns.kim@samsung.com>
Wed, 11 Jun 2025 02:07:00 +0000 (11:07 +0900)
committerJunSeok Kim <juns.kim@samsung.com>
Wed, 11 Jun 2025 04:27:19 +0000 (04:27 +0000)
Change-Id: Ifc39eea3f86ae834d637851830bf05da4943c602

src/bin/e_policy_wl.c

index 67a0c1af3bd58e348f8287543152311d2214af20..00f7e2a40d31f11e95305995ee5e61ae0af848eb 100644 (file)
@@ -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);
      }