Add wlr_surface_is_subsurface and wlr_subsurface_from_surface

This commit is contained in:
emersion 2018-04-05 13:58:41 -04:00
parent b6482bacf4
commit aced024819
No known key found for this signature in database
GPG key ID: 0FDE7BE0E88F5E48
2 changed files with 21 additions and 1 deletions

View file

@ -4,6 +4,8 @@
#include <wayland-server.h> #include <wayland-server.h>
#include <wlr/render/wlr_renderer.h> #include <wlr/render/wlr_renderer.h>
struct wlr_surface;
struct wlr_compositor { struct wlr_compositor {
struct wl_global *wl_global; struct wl_global *wl_global;
struct wl_list wl_resources; struct wl_list wl_resources;
@ -22,4 +24,8 @@ void wlr_compositor_destroy(struct wlr_compositor *wlr_compositor);
struct wlr_compositor *wlr_compositor_create(struct wl_display *display, struct wlr_compositor *wlr_compositor_create(struct wl_display *display,
struct wlr_renderer *renderer); struct wlr_renderer *renderer);
bool wlr_surface_is_subsurface(struct wlr_surface *surface);
struct wlr_subsurface *wlr_subsurface_from_surface(struct wlr_surface *surface);
#endif #endif

View file

@ -7,6 +7,18 @@
#include <wlr/util/log.h> #include <wlr/util/log.h>
#include "util/signal.h" #include "util/signal.h"
static const char *subsurface_role = "wl_subsurface";
bool wlr_surface_is_subsurface(struct wlr_surface *surface) {
return strcmp(surface->role, subsurface_role) == 0;
}
struct wlr_subsurface *wlr_subsurface_from_surface(
struct wlr_surface *surface) {
assert(wlr_surface_is_subsurface(surface));
return (struct wlr_subsurface *)surface->role_data;
}
static const struct wl_compositor_interface wl_compositor_impl; static const struct wl_compositor_interface wl_compositor_impl;
static struct wlr_compositor *compositor_from_resource(struct wl_resource *resource) { static struct wlr_compositor *compositor_from_resource(struct wl_resource *resource) {
@ -134,7 +146,7 @@ static void subcompositor_get_subsurface(struct wl_client *client,
return; return;
} }
if (wlr_surface_set_role(surface, "wl_subsurface", resource, if (wlr_surface_set_role(surface, subsurface_role, resource,
WL_SUBCOMPOSITOR_ERROR_BAD_SURFACE) < 0) { WL_SUBCOMPOSITOR_ERROR_BAD_SURFACE) < 0) {
return; return;
} }
@ -144,6 +156,8 @@ static void subcompositor_get_subsurface(struct wl_client *client,
wl_resource_post_no_memory(resource); wl_resource_post_no_memory(resource);
return; return;
} }
surface->role_data = surface->subsurface;
} }