compositor: Add missing state initialization 85/324585/1
authorSeunghun Lee <shiin.lee@samsung.com>
Wed, 21 May 2025 03:28:29 +0000 (12:28 +0900)
committerTizen Window System <tizen.windowsystem@gmail.com>
Wed, 21 May 2025 05:55:45 +0000 (14:55 +0900)
This patch adds missing state initialization and deinitialization.

Change-Id: I67bcff2c340c2d9abf2123670fe0fc66fba4a453

src/bin/server/e_compositor.c

index 55091970fd5c7a51398cedc4b8ec8c1a0080171d..ba6aa8f1df133bbbc130189a4d660b944920bff9 100644 (file)
@@ -961,6 +961,20 @@ _e_surface_buffer_viewport_state_init(E_Comp_Wl_Buffer_Viewport *vp)
    vp->surface.width = -1;
 }
 
+static void
+_e_surface_state_init(E_Surface_State *state)
+{
+   state->committed = E_SURFACE_STATE_CLEAN;
+   e_presentation_time_container_init(&state->presentation_container);
+   _e_surface_buffer_viewport_state_init(&state->viewport);
+}
+
+static void
+_e_surface_state_finish(E_Surface_State *state)
+{
+   e_presentation_time_container_finish(&state->presentation_container);
+}
+
 static E_Surface *
 _e_surface_create(struct ds_surface *ds_surface)
 {
@@ -987,6 +1001,9 @@ _e_surface_create(struct ds_surface *ds_surface)
 
    wl_list_init(&surface->frames);
 
+   _e_surface_state_init(&surface->pending);
+   _e_surface_state_init(&surface->current);
+
    e_comp_wl_surface_state_init(&surface->base.pending);
 
    /* set initial client data properties */
@@ -994,7 +1011,6 @@ _e_surface_create(struct ds_surface *ds_surface)
 
    /* set initial value of scaler */
    _e_surface_buffer_viewport_state_init(&surface->base.scaler.buffer_viewport);
-   _e_surface_buffer_viewport_state_init(&surface->pending.viewport);
 
    e_presentation_time_container_init(&surface->base.presentation_container);
 
@@ -1075,6 +1091,8 @@ e_surface_destroy(E_Surface *surface)
 
    surface->ec->comp_data = NULL;
 
+   _e_surface_state_finish(&surface->pending);
+   _e_surface_state_finish(&surface->current);
    wl_list_remove(&surface->link);
    free(surface);
 }
@@ -1620,6 +1638,8 @@ _e_subsurface_create(struct ds_subsurface *ds_subsurface, E_Surface *parent_surf
    wl_signal_init(&sub->events.destroy);
    wl_signal_init(&sub->events.reposition);
 
+   _e_surface_state_init(&sub->cached);
+
    sub->ds_subsurface = ds_subsurface;
    sub->destroy.notify = _e_subsurface_cb_destroy;
    wl_signal_add(&ds_subsurface->events.destroy, &sub->destroy);
@@ -1655,6 +1675,7 @@ _e_subsurface_destroy(E_Subsurface *sub)
 
    e_comp_wl_subsurface_data_finish(&sub->base);
    sub->surface->ec->comp_data->sub.data = NULL;
+   _e_surface_state_finish(&sub->cached);
    wl_list_remove(&sub->request_move.link);
    wl_list_remove(&sub->parent_surface_destroy.link);
    wl_list_remove(&sub->surface_destroy.link);