e_hwc_window: Remove the e_view listener of ec for the below transparent 97/320497/2
authorChangyeon Lee <cyeon.lee@samsung.com>
Wed, 26 Feb 2025 10:16:15 +0000 (19:16 +0900)
committerChangyeon Lee <cyeon.lee@samsung.com>
Tue, 4 Mar 2025 08:27:41 +0000 (17:27 +0900)
Use default e_view listener of hwc_window

Change-Id: Ic38cf5730b3bb5c285860e9488325b2b8a97ec6c

src/bin/displaymgr/e_hwc_window.c

index 2541e1a066ecefbef391068744b09945dc1c56a8..14b82c27c5580608c97cadc24af8d97d9f65a425 100644 (file)
@@ -660,28 +660,95 @@ _e_hwc_window_free(E_Hwc_Window *hwc_window)
    E_FREE(hwc_window);
 }
 
+static void
+_e_hwc_window_below_transparent_obj_map_apply(E_Hwc_Window *hwc_window)
+{
+   E_Map *map = NULL, *new_map = NULL;
+   int w, h;
+   Eina_Bool enable;
+   E_View *view;
+
+   EINA_SAFETY_ON_NULL_RETURN(hwc_window->below_transparent_view);
+
+   e_view_rect_size_get(hwc_window->below_transparent_view, &w, &h);
+   view = e_view_rect_view_get(hwc_window->below_transparent_view);
+
+   enable = e_client_transform_core_enable_get(hwc_window->ec);
+   if (enable)
+     map = e_view_client_map_get(e_client_view_get(hwc_window->ec));
+
+   if ((enable) && (map))
+     {
+        new_map = e_map_dup(map);
+        if (!new_map)
+          {
+             EHWERR("fail to dup e_map", hwc_window->ec, hwc_window->hwc, hwc_window);
+             e_map_free(map);
+             return;
+          }
+     }
+   else
+     {
+        new_map = e_map_new();
+        if (!new_map)
+          {
+             EHWERR("fail to new e_map", hwc_window->ec, hwc_window->hwc, hwc_window);
+             return;
+          }
+
+        e_map_util_points_populate_from_view_full(new_map, view, 0);
+        e_map_util_points_color_set(new_map, 255, 255, 255, 255);
+     }
+
+   e_map_point_image_uv_set(new_map, 0, 0, 0);
+   e_map_point_image_uv_set(new_map, 1, w, 0);
+   e_map_point_image_uv_set(new_map, 2, w, h);
+   e_map_point_image_uv_set(new_map, 3, 0, h);
+
+   e_view_map_set(view, new_map);
+   e_view_map_enable_set(view, true);
+
+   if (map) e_map_free(map);
+
+   e_map_free(new_map);
+}
+
 static void
 _e_hwc_window_view_cb_show(struct wl_listener *listener, void *data)
 {
    E_Hwc_Window *hwc_window;
+   E_View *view;
 
    hwc_window = wl_container_of(listener, hwc_window, show_listener);
 
    hwc_window->evas_visible = EINA_TRUE;
 
    e_hwc_window_changed_set(hwc_window, E_HWC_WINS_CHANGED_WIN_VISIBLE);
+
+   if (hwc_window->below_transparent_view)
+     {
+        view = e_view_rect_view_get(hwc_window->below_transparent_view);
+        e_view_show(view);
+     }
 }
 
 static void
 _e_hwc_window_view_cb_hide(struct wl_listener *listener, void *data)
 {
    E_Hwc_Window *hwc_window;
+   E_View *view;
 
    hwc_window = wl_container_of(listener, hwc_window, hide_listener);
 
    hwc_window->evas_visible = EINA_FALSE;
 
    e_hwc_window_changed_set(hwc_window, E_HWC_WINS_CHANGED_WIN_VISIBLE);
+
+   if (hwc_window->below_transparent_view)
+     {
+        view = e_view_rect_view_get(hwc_window->below_transparent_view);
+        e_view_hide(view);
+     }
 }
 
 static void
@@ -692,6 +759,7 @@ _e_hwc_window_view_cb_move(struct wl_listener *listener, void *data)
    E_Client *subc;
    E_Hwc_Window_State state;
    E_Client *ec;
+   E_View *view;
 
    hwc_window = wl_container_of(listener, hwc_window, move_listener);
 
@@ -708,6 +776,13 @@ _e_hwc_window_view_cb_move(struct wl_listener *listener, void *data)
           e_hwc_window_changed_set(hwc_window, E_HWC_WINS_CHANGED_WIN_VISIBLE);
      }
 
+   if (hwc_window->below_transparent_view)
+     {
+        view = e_view_rect_view_get(hwc_window->below_transparent_view);
+        e_view_position_set(view, hwc_window->ec->x, hwc_window->ec->y);
+        _e_hwc_window_below_transparent_obj_map_apply(hwc_window);
+     }
+
    ec = hwc_window->ec;
    if (!ec) return;
 
@@ -750,16 +825,28 @@ _e_hwc_window_view_cb_resize(struct wl_listener *listener, void *data)
         if ((hwc_window->evas_visible) && (e_hwc_window_client_geometry_visible_get(hwc_window)))
           e_hwc_window_changed_set(hwc_window, E_HWC_WINS_CHANGED_WIN_VISIBLE);
      }
+
+   if (hwc_window->below_transparent_view)
+     _e_hwc_window_below_transparent_obj_map_apply(hwc_window);
 }
 
 static void
 _e_hwc_window_view_cb_restack(struct wl_listener *listener, void *data)
 {
+   E_View_Event_Callback_Data *callback_data = data;
    E_Hwc_Window *hwc_window;
+   E_View *view;
 
    hwc_window = wl_container_of(listener, hwc_window, restack_listener);
 
    e_hwc_window_changed_set(hwc_window, E_HWC_WINS_CHANGED_WIN_VISIBLE);
+
+   if (hwc_window->below_transparent_view)
+     {
+        view = e_view_rect_view_get(hwc_window->below_transparent_view);
+        e_view_reparent(view, e_view_parent_get(callback_data->view));
+        e_view_place_below(view, callback_data->view);
+     }
 }
 
 static void
@@ -3459,128 +3546,12 @@ e_hwc_window_presentation_callback_call(E_Hwc_Window *hwc_window)
    return EINA_TRUE;
 }
 
-static void
-_e_hwc_window_below_transparent_obj_map_apply(E_Hwc_Window *hwc_window)
-{
-   E_Map *map = NULL, *new_map = NULL;
-   int w, h;
-   Eina_Bool enable;
-   E_View *view;
-
-   EINA_SAFETY_ON_NULL_RETURN(hwc_window->below_transparent_view);
-
-   e_view_rect_size_get(hwc_window->below_transparent_view, &w, &h);
-   view = e_view_rect_view_get(hwc_window->below_transparent_view);
-
-   enable = e_client_transform_core_enable_get(hwc_window->ec);
-   if (enable)
-     map = e_view_client_map_get(e_client_view_get(hwc_window->ec));
-
-   if ((enable) && (map))
-     {
-        new_map = e_map_dup(map);
-        if (!new_map)
-          {
-             EHWERR("fail to dup e_map", hwc_window->ec, hwc_window->hwc, hwc_window);
-             e_map_free(map);
-             return;
-          }
-     }
-   else
-     {
-        new_map = e_map_new();
-        if (!new_map)
-          {
-             EHWERR("fail to new e_map", hwc_window->ec, hwc_window->hwc, hwc_window);
-             return;
-          }
-
-        e_map_util_points_populate_from_view_full(new_map, view, 0);
-        e_map_util_points_color_set(new_map, 255, 255, 255, 255);
-     }
-
-   e_map_point_image_uv_set(new_map, 0, 0, 0);
-   e_map_point_image_uv_set(new_map, 1, w, 0);
-   e_map_point_image_uv_set(new_map, 2, w, h);
-   e_map_point_image_uv_set(new_map, 3, 0, h);
-
-   e_view_map_set(view, new_map);
-   e_view_map_enable_set(view, true);
-
-   if (map) e_map_free(map);
-
-   e_map_free(new_map);
-}
-
-static void
-_e_hwc_window_below_transparent_view_cb_show(struct wl_listener *listener, void *data)
-{
-   E_Hwc_Window *hwc_window;
-   E_View *view;
-
-   hwc_window = wl_container_of(listener, hwc_window, transparent_show_listener);
-
-   view = e_view_rect_view_get(hwc_window->below_transparent_view);
-   e_view_show(view);
-}
-
-static void
-_e_hwc_window_below_transparent_view_cb_hide(struct wl_listener *listener, void *data)
-{
-   E_Hwc_Window *hwc_window;
-   E_View *view;
-
-   hwc_window = wl_container_of(listener, hwc_window, transparent_hide_listener);
-
-   view = e_view_rect_view_get(hwc_window->below_transparent_view);
-   e_view_hide(view);
-}
-
-static void
-_e_hwc_window_below_transparent_view_cb_move(struct wl_listener *listener, void *data)
-{
-   E_Hwc_Window *hwc_window;
-   E_View *view;
-
-   hwc_window = wl_container_of(listener, hwc_window, transparent_move_listener);
-
-   view = e_view_rect_view_get(hwc_window->below_transparent_view);
-   e_view_position_set(view, hwc_window->ec->x, hwc_window->ec->y);
-
-   _e_hwc_window_below_transparent_obj_map_apply(hwc_window);
-}
-
-static void
-_e_hwc_window_below_transparent_view_cb_resize(struct wl_listener *listener, void *data)
-{
-   E_Hwc_Window *hwc_window;
-
-   hwc_window = wl_container_of(listener, hwc_window, transparent_resize_listener);
-
-   _e_hwc_window_below_transparent_obj_map_apply(hwc_window);
-}
-
-static void
-_e_hwc_window_below_transparent_view_cb_restack(struct wl_listener *listener, void *data)
-{
-   E_Hwc_Window *hwc_window;
-   E_View *view, *ec_view;
-
-   hwc_window = wl_container_of(listener, hwc_window, transparent_restack_listener);
-
-   view = e_view_rect_view_get(hwc_window->below_transparent_view);
-   ec_view = e_view_client_view_get(e_client_view_get(hwc_window->ec));
-   e_view_reparent(view, e_view_parent_get(ec_view));
-   e_view_place_below(view, ec_view);
-}
-
 EINTERN void
 e_hwc_window_below_transparent_obj_set(E_Hwc_Window *hwc_window, Eina_Bool set)
 {
    E_View_Rect *below_transparent_view;
    const int color[4] = {0, 0, 0, 0};
    E_View *view, *ec_view;
-   E_View_Client *view_client;
 
    EINA_SAFETY_ON_NULL_RETURN(hwc_window);
 
@@ -3610,17 +3581,6 @@ e_hwc_window_below_transparent_obj_set(E_Hwc_Window *hwc_window, Eina_Bool set)
         if (e_view_visible_get(ec_view))
           e_view_show(view);
 
-        hwc_window->transparent_show_listener.notify = _e_hwc_window_below_transparent_view_cb_show;
-        e_view_event_listener_add(ec_view, E_VIEW_SHOW, &hwc_window->transparent_show_listener);
-        hwc_window->transparent_hide_listener.notify = _e_hwc_window_below_transparent_view_cb_hide;
-        e_view_event_listener_add(ec_view, E_VIEW_HIDE, &hwc_window->transparent_hide_listener);
-        hwc_window->transparent_move_listener.notify = _e_hwc_window_below_transparent_view_cb_move;
-        e_view_event_listener_add(ec_view, E_VIEW_MOVE, &hwc_window->transparent_move_listener);
-        hwc_window->transparent_resize_listener.notify = _e_hwc_window_below_transparent_view_cb_resize;
-        e_view_event_listener_add(ec_view, E_VIEW_RESIZE, &hwc_window->transparent_resize_listener);
-        hwc_window->transparent_restack_listener.notify = _e_hwc_window_below_transparent_view_cb_restack;
-        e_view_event_listener_add(ec_view, E_VIEW_RESTACK, &hwc_window->transparent_restack_listener);
-
         EHWINF("Set below_transparent_obj", hwc_window->ec, hwc_window->hwc, hwc_window);
      }
    else
@@ -3631,18 +3591,6 @@ e_hwc_window_below_transparent_obj_set(E_Hwc_Window *hwc_window, Eina_Bool set)
         e_view_destroy(view);
         hwc_window->below_transparent_view = NULL;
 
-        if (hwc_window->ec)
-          {
-             view_client = e_client_view_get(hwc_window->ec);
-             view = e_view_client_view_get(view_client);
-
-             e_view_event_listener_del(view, E_VIEW_SHOW, &hwc_window->transparent_show_listener);
-             e_view_event_listener_del(view, E_VIEW_HIDE, &hwc_window->transparent_hide_listener);
-             e_view_event_listener_del(view, E_VIEW_MOVE, &hwc_window->transparent_move_listener);
-             e_view_event_listener_del(view, E_VIEW_RESIZE, &hwc_window->transparent_resize_listener);
-             e_view_event_listener_del(view, E_VIEW_RESTACK, &hwc_window->transparent_restack_listener);
-          }
-
         EHWINF("Unset below_transparent_obj", hwc_window->ec, hwc_window->hwc, hwc_window);
      }
 }