e_compositor: Add e_surface_role_set 29/313429/1
authorSeunghun Lee <shiin.lee@samsung.com>
Tue, 21 May 2024 05:22:15 +0000 (14:22 +0900)
committerTizen Window System <tizen.windowsystem@gmail.com>
Wed, 26 Jun 2024 00:34:33 +0000 (09:34 +0900)
Change-Id: I6ec401a91031df7993a4b314f236b1017b05c519

src/bin/server/e_compositor.c
src/bin/server/e_compositor_intern.h

index e0c69a3..9de382e 100644 (file)
@@ -435,6 +435,34 @@ e_surface_viewport_changed_get(E_Surface *surface)
    return surface->base.scaler.buffer_viewport.changed;
 }
 
+EINTERN Eina_Bool
+e_surface_role_set(E_Surface *surface, const char *role_name, struct wl_resource *error_resource, uint32_t error_code)
+{
+   EINA_SAFETY_ON_NULL_RETURN_VAL(surface, EINA_FALSE);
+   EINA_SAFETY_ON_NULL_RETURN_VAL(role_name, EINA_FALSE);
+
+   if ((surface->base.role_name == NULL) ||
+       (surface->base.role_name == role_name) ||
+       (strcmp(surface->base.role_name, role_name) == 0))
+     {
+        surface->base.role_name = role_name;
+        return EINA_TRUE;
+     }
+
+   if (error_resource)
+     {
+        wl_resource_post_error(error_resource, error_code,
+                               "Cannot assign role %s to wl_surface@%d,"
+                               " already has role %s\n",
+                               role_name,
+                               surface->base.wl_surface ?
+                               wl_resource_get_id(surface->base.wl_surface) : -1,
+                               surface->base.role_name);
+     }
+
+   return EINA_FALSE;
+}
+
 EINTERN E_Subsurface *
 e_subsurface_from_surface(E_Surface *surface)
 {
index c3567e9..1c539fe 100644 (file)
@@ -16,6 +16,7 @@ EINTERN E_Surface *e_surface_from_resource(struct wl_resource *surface_resource)
 EINTERN void e_surface_destroy_listener_add(E_Surface *surface, struct wl_listener *listener);
 EINTERN void e_surface_parent_destroy_listener_add(E_Surface *surface, struct wl_listener *listener);
 EINTERN struct wl_listener *e_surface_destroy_listener_get(E_Surface *surface, wl_notify_func_t notify);
+EINTERN Eina_Bool e_surface_role_set(E_Surface *surface, const char *role_name, struct wl_resource *error_resource, uint32_t error_code);
 EINTERN struct wl_resource *e_surface_viewporter_resource_get(E_Surface *surface);
 EINTERN Eina_Bool e_surface_viewporter_resource_set(E_Surface *surface, struct wl_resource *viewporter);
 EINTERN void e_surface_viewporter_resource_unset(E_Surface *surface);