e_tizen_launch_effect: modify code to clean up view's listener 96/323696/1
authorDoyoun Kang <doyoun.kang@samsung.com>
Sun, 4 May 2025 07:09:12 +0000 (16:09 +0900)
committerTizen Window System <tizen.windowsystem@gmail.com>
Tue, 6 May 2025 03:26:41 +0000 (12:26 +0900)
Change-Id: I9433d2b11db73fa3988f9b2844fa3fe72ca726ea

src/bin/server/e_tizen_launch_effect.c

index 1ab1a0f8a9de572a4f1eb5406aaaf4a1498988cb..50cccced67e072d145a05133ed868d0e6824f891 100644 (file)
@@ -64,6 +64,7 @@ struct _E_Tizen_Launch_Effect_Splash
    Eina_Bool                  custom_effect_callee; /* custom effect enabled */
    const char                *appid;
 
+   Eina_Bool                  set_view_listener;
    struct wl_listener view_destroy_listener;
    struct wl_listener view_hide_listener;
 };
@@ -126,6 +127,21 @@ _e_tizen_launch_effect_e_clients_find_by_pid(pid_t pid)
    return clients;
 }
 
+static void
+_launch_splash_view_unset(E_Tizen_Launch_Effect_Splash *tzlaunch_splash)
+{
+   if (!tzlaunch_splash->view) return;
+
+   if (tzlaunch_splash->set_view_listener)
+     {
+        e_view_event_listener_del(tzlaunch_splash->view, E_VIEW_HIDE, &tzlaunch_splash->view_hide_listener);
+        e_view_event_listener_del(tzlaunch_splash->view, E_VIEW_DESTROY, &tzlaunch_splash->view_destroy_listener);
+        tzlaunch_splash->set_view_listener = EINA_FALSE;
+     }
+
+   tzlaunch_splash->view = NULL;
+}
+
 static void
 _launch_splash_off(E_Tizen_Launch_Effect_Splash *tzlaunch_splash)
 {
@@ -138,7 +154,7 @@ _launch_splash_off(E_Tizen_Launch_Effect_Splash *tzlaunch_splash)
    ec = tzlaunch_splash->ec;
    view_client = e_client_view_get(ec);
 
-   tzlaunch_splash->view = NULL;
+   _launch_splash_view_unset(tzlaunch_splash);
    tzlaunch_splash->ec = NULL;
    tzlaunch_splash->valid = EINA_FALSE;
    if (tzlaunch_splash->timeout) ecore_timer_del(tzlaunch_splash->timeout);
@@ -233,7 +249,7 @@ _launchscreen_splash_cb_view_destroy(struct wl_listener *listener, void *data)
 
    tzlaunch_splash->view_image = NULL;
    tzlaunch_splash->view_edje = NULL;
-   tzlaunch_splash->view = NULL;
+   _launch_splash_view_unset(tzlaunch_splash);
 }
 
 static void
@@ -320,7 +336,7 @@ _launchscreen_splash_setup(E_Tizen_Launch_Effect_Splash *splash,
 
              e_view_destroy(e_view_image_view_get(splash->view_image));
              splash->view_image = NULL;
-             splash->view = NULL;
+             _launch_splash_view_unset(splash);
 
              return EINA_FALSE;
           }
@@ -360,7 +376,7 @@ _launchscreen_splash_setup(E_Tizen_Launch_Effect_Splash *splash,
 
              e_view_destroy(e_view_edje_view_get(splash->view_edje));
              splash->view_edje = NULL;
-             splash->view = NULL;
+             _launch_splash_view_unset(splash);
 
              return EINA_FALSE;
           }
@@ -432,6 +448,8 @@ _launchscreen_splash_setup(E_Tizen_Launch_Effect_Splash *splash,
 
         splash->view_hide_listener.notify = _launchscreen_splash_cb_view_hide;
         e_view_event_listener_add(splash->view, E_VIEW_HIDE, &splash->view_hide_listener);
+
+        splash->set_view_listener = EINA_TRUE;
      }
 
    splash->valid = EINA_TRUE;
@@ -476,7 +494,7 @@ _tzlaunch_splash_iface_cb_launch(struct wl_client *client EINA_UNUSED, struct wl
         if (tzlaunch_splash->view)
           {
              e_view_destroy(tzlaunch_splash->view);
-             tzlaunch_splash->view = NULL;
+             _launch_splash_view_unset(tzlaunch_splash);
           }
      }
 }
@@ -641,7 +659,7 @@ _tzlaunch_splash_iface_cb_launch_v2(struct wl_client *client EINA_UNUSED,
         if (tzlaunch_splash->view)
           {
              e_view_destroy(tzlaunch_splash->view);
-             tzlaunch_splash->view = NULL;
+             _launch_splash_view_unset(tzlaunch_splash);
           }
      }
 }
@@ -709,12 +727,6 @@ _tzlaunch_splash_destroy(struct wl_resource *res_tzlaunch_splash)
    tzlaunch_splash = wl_resource_get_user_data(res_tzlaunch_splash);
    EINA_SAFETY_ON_NULL_RETURN(tzlaunch_splash);
 
-   if (tzlaunch_splash->view)
-     {
-        e_view_event_listener_del(tzlaunch_splash->view, E_VIEW_HIDE, &tzlaunch_splash->view_hide_listener);
-        e_view_event_listener_del(tzlaunch_splash->view, E_VIEW_DESTROY, &tzlaunch_splash->view_destroy_listener);
-     }
-
    _launch_splash_off(tzlaunch_splash);
 
    tzlaunch_effect = tzlaunch_splash->tzlaunch_effect;