Move init/finish implementation of E_Comp_Wl_Subsurf_Data 19/316219/1
authorSeunghun Lee <shiin.lee@samsung.com>
Fri, 9 Aug 2024 03:40:51 +0000 (12:40 +0900)
committerTizen Window System <tizen.windowsystem@gmail.com>
Fri, 16 Aug 2024 04:45:16 +0000 (13:45 +0900)
This patch moves init and finish implementation of
E_Comp_Wl_Subsurf_Data from e_comp_wl to e_comp_wl_subsurface.

Change-Id: Id755d3bdb796f56d6bac815baa55415f8d033ded

src/bin/server/e_comp_wl.c
src/bin/server/e_comp_wl_intern.h
src/bin/server/e_comp_wl_subsurface.c
src/bin/server/e_comp_wl_subsurface_intern.h
src/bin/server/e_compositor.c

index a2df06703ab34fc58a6fa55b9f77e3b87534eee8..09a0acf5886f9021d45b9ad918804880ff115c5e 100644 (file)
@@ -6253,114 +6253,6 @@ e_comp_wl_client_surface_pending_commit(E_Client *ec)
    _e_comp_wl_hook_call(E_COMP_WL_HOOK_CLIENT_SURFACE_COMMIT, ec);
 }
 
-static void
-_e_comp_wl_client_subsurface_set(E_Client *ec, E_Comp_Wl_Subsurf_Data *sub)
-{
-   e_comp_wl_client_surface_set(ec, ec->comp_data->wl_surface);
-   ec->comp_data->sub.data = sub;
-
-   /* set subsurface client properties */
-   ec->borderless = EINA_TRUE;
-   ec->argb = EINA_TRUE;
-   ELOGF("SUBSURFACE", "Set argb:%d", ec, ec->argb);
-   ec->lock_border = EINA_TRUE;
-   ec->lock_focus_in = ec->lock_focus_out = EINA_TRUE;
-   ec->netwm.state.skip_taskbar = EINA_TRUE;
-   ec->netwm.state.skip_pager = EINA_TRUE;
-   ec->border_size = 0;
-   ec->lock_user_location = 0;
-   ec->lock_client_location = 0;
-   ec->lock_user_size = 0;
-   ec->lock_client_size = 0;
-   ec->lock_client_stacking = 0;
-   ec->lock_user_maximize = 0;
-   ec->lock_client_maximize = 0;
-   ec->changes.need_maximize = 0;
-   ec->maximized = E_MAXIMIZE_NONE;
-   EC_CHANGED(ec);
-
-   ec->new_client = ec->netwm.ping = EINA_TRUE;
-   e_comp->new_clients++;
-   e_client_unignore(ec);
-}
-
-static void
-_e_comp_wl_client_subsurface_parent_set(E_Client *ec, E_Client *parent)
-{
-   E_Comp_Wl_Subsurf_Data *sub = ec->comp_data->sub.data;
-   E_Layer layer;
-
-   ELOGF("COMP", "         |subsurface_parent:%p", ec, parent);
-
-   sub->parent = parent;
-
-   if (parent->frame)
-     {
-        layer = e_client_layer_get(parent);
-        if (layer > E_LAYER_BOTTOM)
-          e_client_layer_set(ec, layer);
-     }
-
-   if (parent->comp_data)
-     {
-        /* append this client to the parents subsurface list */
-        parent->comp_data->sub.list_pending =
-           eina_list_append(parent->comp_data->sub.list_pending, ec);
-        parent->comp_data->sub.list_changed = EINA_TRUE;
-     }
-}
-
-EINTERN void
-e_comp_wl_client_subsurface_parent_unset(E_Client *ec)
-{
-   E_Comp_Wl_Subsurf_Data *sub = ec->comp_data->sub.data;
-   E_Client *parent = sub->parent;
-
-   parent->comp_data->sub.list =
-      eina_list_remove(parent->comp_data->sub.list, ec);
-   parent->comp_data->sub.list_pending =
-      eina_list_remove(parent->comp_data->sub.list_pending, ec);
-   parent->comp_data->sub.below_list =
-      eina_list_remove(parent->comp_data->sub.below_list, ec);
-   parent->comp_data->sub.below_list_pending =
-      eina_list_remove(parent->comp_data->sub.below_list_pending, ec);
-
-   sub->parent = NULL;
-}
-
-EINTERN void
-e_comp_wl_client_subsurface_init(E_Client *ec, struct wl_resource *subsurface_resource, E_Comp_Wl_Subsurf_Data *sub, E_Client *parent, E_Client *offscreen_parent)
-{
-   sub->resource = subsurface_resource;
-   sub->cached_buffer_ref.buffer = NULL;
-   sub->synchronized = EINA_TRUE;
-   sub->parent = parent;
-   sub->remote_surface.offscreen_parent = offscreen_parent;
-   if (offscreen_parent)
-     ELOGF("SUBSURFACE", "         |offscreen_parent:%p", ec, offscreen_parent);
-
-   _e_comp_wl_surface_state_init(&sub->cached, ec->w, ec->h);
-
-   _e_comp_wl_client_subsurface_set(ec, sub);
-   _e_comp_wl_client_subsurface_parent_set(ec, parent);
-
-   e_comp_wl_hook_call(E_COMP_WL_HOOK_SUBSURFACE_CREATE, ec);
-}
-
-EINTERN void
-e_comp_wl_client_subsurface_finish(E_Client *ec)
-{
-   E_Comp_Wl_Subsurf_Data *sub = ec->comp_data->sub.data;
-
-   if (sub->parent)
-     e_comp_wl_client_subsurface_parent_unset(ec);
-
-   e_comp_wl_surface_state_finish(&sub->cached);
-   e_comp_wl_buffer_reference(&sub->cached_buffer_ref, NULL);
-
-   ec->comp_data->sub.data = NULL;
-}
-
 EINTERN void
 e_comp_wl_client_evas_init(E_Client *ec)
 {
index 75007cff9df4c67e5572191c4a3ca1c47ea94778..d8480f782af231679662cf82238b24831aeef9cd 100644 (file)
@@ -97,9 +97,6 @@ EINTERN void e_comp_wl_client_surface_pending_frame_callback_add(E_Client *ec, s
 EINTERN void e_comp_wl_client_surface_frame_callback_remove(E_Client *ec, struct wl_resource *callback_resource);
 EINTERN void e_comp_wl_client_surface_pending_commit(E_Client *ec);
 
-EINTERN void      e_comp_wl_client_subsurface_init(E_Client *ec, struct wl_resource *subsurface_resource, E_Comp_Wl_Subsurf_Data *sub, E_Client *parent, E_Client *offscreen_parent);
-EINTERN void      e_comp_wl_client_subsurface_finish(E_Client *ec);
-EINTERN void      e_comp_wl_client_subsurface_parent_unset(E_Client *ec);
 EINTERN Eina_Bool e_comp_wl_client_subsurface_cyclic_reference_check(E_Client *ec, E_Client *parent);
 EINTERN void      e_comp_wl_client_subsurface_commit_to_cache(E_Client *ec);
 EINTERN void      e_comp_wl_client_subsurface_commit_from_cache(E_Client *ec);
index b636d6622eef4909f29783f447dc3015881fa9ff..ea1c5a0a6b4ba24caf4ebebefb72cf138c561d29 100644 (file)
@@ -28,6 +28,141 @@ static void       _e_comp_wl_subsurface_commit_to_cache(E_Client *ec);
 static void       _e_comp_wl_subsurface_commit_from_cache(E_Client *ec);
 static void       _e_comp_wl_subsurface_stack_update(E_Client *ec);
 
+static void
+_e_comp_wl_client_subsurface_set(E_Client *ec, E_Comp_Wl_Subsurf_Data *sdata)
+{
+   e_comp_wl_client_surface_set(ec, ec->comp_data->wl_surface);
+   ec->comp_data->sub.data = sdata;
+
+   /* set subsurface client properties */
+   ec->borderless = EINA_TRUE;
+   ec->argb = EINA_TRUE;
+   ELOGF("SUBSURFACE", "Set argb:%d", ec, ec->argb);
+   ec->lock_border = EINA_TRUE;
+   ec->lock_focus_in = ec->lock_focus_out = EINA_TRUE;
+   ec->netwm.state.skip_taskbar = EINA_TRUE;
+   ec->netwm.state.skip_pager = EINA_TRUE;
+   ec->border_size = 0;
+   ec->lock_user_location = 0;
+   ec->lock_client_location = 0;
+   ec->lock_user_size = 0;
+   ec->lock_client_size = 0;
+   ec->lock_client_stacking = 0;
+   ec->lock_user_maximize = 0;
+   ec->lock_client_maximize = 0;
+   ec->changes.need_maximize = 0;
+   ec->maximized = E_MAXIMIZE_NONE;
+   EC_CHANGED(ec);
+
+   ec->new_client = ec->netwm.ping = EINA_TRUE;
+   e_comp->new_clients++;
+   e_client_unignore(ec);
+}
+
+static void
+_e_comp_wl_client_subsurface_parent_set(E_Client *ec, E_Client *parent)
+{
+   E_Comp_Wl_Subsurf_Data *sdata = ec->comp_data->sub.data;
+   E_Layer layer;
+
+   ELOGF("COMP", "         |subsurface_parent:%p", ec, parent);
+
+   sdata->parent = parent;
+
+   if (parent->frame)
+     {
+        layer = e_client_layer_get(parent);
+        if (layer > E_LAYER_BOTTOM)
+          e_client_layer_set(ec, layer);
+     }
+
+   if (parent->comp_data)
+     {
+        /* append this client to the parents subsurface list */
+        parent->comp_data->sub.list_pending =
+           eina_list_append(parent->comp_data->sub.list_pending, ec);
+        parent->comp_data->sub.list_changed = EINA_TRUE;
+     }
+}
+
+static void
+_subsurface_data_parent_unset(E_Comp_Wl_Subsurf_Data *sdata)
+{
+   E_Client *parent = sdata->parent;
+   Eina_List *l;
+   E_Client *subc;
+
+   if (!parent)
+     return;
+
+   EINA_LIST_FOREACH(parent->comp_data->sub.list_pending, l, subc)
+     {
+        if (subc->comp_data->sub.data == sdata)
+          {
+             parent->comp_data->sub.list_pending = eina_list_remove_list(parent->comp_data->sub.list_pending, l);
+             break;
+          }
+     }
+   EINA_LIST_FOREACH(parent->comp_data->sub.list, l, subc)
+     {
+        if (subc->comp_data->sub.data == sdata)
+          {
+             parent->comp_data->sub.list = eina_list_remove_list(parent->comp_data->sub.list, l);
+             break;
+          }
+     }
+   EINA_LIST_FOREACH(parent->comp_data->sub.below_list_pending, l, subc)
+     {
+        if (subc->comp_data->sub.data == sdata)
+          {
+             parent->comp_data->sub.below_list_pending = eina_list_remove_list(parent->comp_data->sub.below_list_pending, l);
+             break;
+          }
+     }
+   EINA_LIST_FOREACH(parent->comp_data->sub.below_list, l, subc)
+     {
+        if (subc->comp_data->sub.data == sdata)
+          {
+             parent->comp_data->sub.below_list = eina_list_remove_list(parent->comp_data->sub.below_list, l);
+             break;
+          }
+     }
+
+   sdata->parent = NULL;
+}
+
+EINTERN void
+e_comp_wl_subsurface_data_init(E_Comp_Wl_Subsurf_Data *sdata, E_Client *ec, E_Client *parent, E_Client *offscreen_parent)
+{
+   sdata->cached_buffer_ref.buffer = NULL;
+   sdata->synchronized = EINA_TRUE;
+   sdata->parent = parent;
+   sdata->remote_surface.offscreen_parent = offscreen_parent;
+   if (offscreen_parent)
+     ELOGF("SUBSURFACE", "         |offscreen_parent:%p", ec, offscreen_parent);
+
+   e_comp_wl_surface_state_init(&sdata->cached, ec->w, ec->h);
+
+   _e_comp_wl_client_subsurface_set(ec, sdata);
+   _e_comp_wl_client_subsurface_parent_set(ec, parent);
+
+   e_comp_wl_hook_call(E_COMP_WL_HOOK_SUBSURFACE_CREATE, ec);
+}
+
+EINTERN void
+e_comp_wl_subsurface_data_finish(E_Comp_Wl_Subsurf_Data *sdata)
+{
+   _subsurface_data_parent_unset(sdata);
+   e_comp_wl_surface_state_finish(&sdata->cached);
+   e_comp_wl_buffer_reference(&sdata->cached_buffer_ref, NULL);
+}
+
+EINTERN void
+e_comp_wl_subsurface_data_parent_unset(E_Comp_Wl_Subsurf_Data *sdata)
+{
+   _subsurface_data_parent_unset(sdata);
+}
+
 EINTERN void
 e_comp_wl_client_subsurface_commit_to_cache(E_Client *ec)
 {
index e396e37418f7c9c1eecf6ad4d9f0122095196cab..34b15b184633be3eea5f1340a7664b94fa1e99fe 100644 (file)
@@ -18,6 +18,10 @@ EINTERN void          e_comp_wl_subsurfaces_shutdown(void);
 EINTERN void          e_comp_wl_subsurface_resource_stand_alone_mode_set(struct wl_resource *subsurface_resource);
 EINTERN void          e_comp_wl_subsurface_resource_place_below_parent(struct wl_resource *subsurface_resource);
 
+EINTERN void e_comp_wl_subsurface_data_init(E_Comp_Wl_Subsurf_Data *sdata, E_Client *ec, E_Client *parent, E_Client *offscreen_parent);
+EINTERN void e_comp_wl_subsurface_data_finish(E_Comp_Wl_Subsurf_Data *sdata);
+EINTERN void e_comp_wl_subsurface_data_parent_unset(E_Comp_Wl_Subsurf_Data *sdata);
+
 EINTERN Eina_Bool     e_comp_wl_subsurface_add(struct wl_resource *resource, uint32_t id, struct wl_resource *surface_resource, struct wl_resource *parent_resource);
 EINTERN Eina_Bool     e_comp_wl_subsurface_order_commit(E_Client *ec);
 EINTERN Eina_Bool     e_comp_wl_subsurface_commit(E_Client *ec);
index 9ce89e6a35074ad129a40d6aa9bdc9eaeaebcccc..24be0bc9b92268b755bea0336bffe720e15cfa35 100644 (file)
@@ -213,7 +213,7 @@ e_subsurface_internal_create(E_Surface *surface, E_Subsurface *parent_subsurface
    sub->parent_surface_destroy.notify = _e_subsurface_cb_parent_surface_destroy;
    wl_signal_add(&sub->parent->events.destroy, &sub->parent_surface_destroy);
 
-   e_comp_wl_client_subsurface_init(surface->ec, NULL, &sub->base, sub->parent->ec, NULL);
+   e_comp_wl_subsurface_data_init(&sub->base, surface->ec, sub->parent->ec, NULL);
 
    _e_subsurface_view_init(&sub->view, sub);
 
@@ -230,7 +230,8 @@ e_subsurface_internal_destroy(E_Subsurface *sub)
    ELOGF("SUBSURFACE", "Destroy internal subsurface", sub->surface->ec);
 
    _e_subsurface_view_finish(&sub->view);
-   e_comp_wl_client_subsurface_finish(sub->surface->ec);
+   e_comp_wl_subsurface_data_finish(&sub->base);
+   sub->surface->ec->comp_data->sub.data = NULL;
    wl_list_remove(&sub->parent_surface_destroy.link);
    free(sub);
 }
@@ -1650,11 +1651,8 @@ _e_subsurface_create(struct ds_subsurface *ds_subsurface, E_Surface *parent_surf
    sub->parent_surface_destroy.notify = _e_subsurface_cb_parent_surface_destroy;
    wl_signal_add(&parent_surface->base.destroy_signal, &sub->parent_surface_destroy);
 
-   e_comp_wl_client_subsurface_init(surface->ec,
-                                    ds_subsurface->resource,
-                                    &sub->base,
-                                    epc,
-                                    offscreen_parent);
+   e_comp_wl_subsurface_data_init(&sub->base, surface->ec, epc, offscreen_parent);
+   sub->base.resource = ds_subsurface->resource;
 
    _e_subsurface_view_init(&sub->view, sub);
 
@@ -1672,7 +1670,8 @@ _e_subsurface_destroy(E_Subsurface *sub)
 
    _e_subsurface_view_finish(&sub->view);
 
-   e_comp_wl_client_subsurface_finish(sub->surface->ec);
+   e_comp_wl_subsurface_data_finish(&sub->base);
+   sub->surface->ec->comp_data->sub.data = NULL;
    wl_list_remove(&sub->request_move.link);
    wl_list_remove(&sub->parent_surface_destroy.link);
    wl_list_remove(&sub->surface_destroy.link);
@@ -1826,7 +1825,7 @@ _e_subsurface_cb_parent_surface_destroy(struct wl_listener *listener, void *data
 
    sub->parent = NULL;
 
-   e_comp_wl_client_subsurface_parent_unset(sub->surface->ec);
+   e_comp_wl_subsurface_data_parent_unset(&sub->base);
 }
 
 static void