Files
absinthe/src/layer-surface.c
T
2026-05-16 21:59:36 +07:00

54 lines
1.6 KiB
C

#include <wlr/types/wlr_layer_shell_v1.h>
#include "focus.h"
#include "layer.h"
#include "types.h"
void layer_surface_map(struct wl_listener *listener, void *data)
{
UNUSED(listener);
UNUSED(data);
}
void layer_surface_unmap(struct wl_listener *listener, void *data)
{
UNUSED(data);
absn_layer_surface *layer_surface = wl_container_of(listener, layer_surface, unmap);
if (layer_surface->wlr->surface == layer_surface->server->seat->keyboard_state.focused_surface)
focus_toplevel(focus_get_topmost(layer_surface->server));
}
void layer_surface_commit(struct wl_listener *listener, void *data)
{
UNUSED(data);
absn_layer_surface *layer_surface = wl_container_of(listener, layer_surface, commit);
struct wlr_layer_surface_v1 *surface = layer_surface->wlr;
wlr_layer_surface_v1_configure(surface, surface->pending.desired_width, surface->pending.desired_height);
layer_arrange(layer_surface->output);
}
void layer_surface_new_popup(struct wl_listener *listener, void *data)
{
UNUSED(listener);
UNUSED(data);
}
void layer_surface_destroy(struct wl_listener *listener, void *data)
{
UNUSED(data);
absn_layer_surface *layer_surface = wl_container_of(listener, layer_surface, destroy);
wl_list_remove(&layer_surface->link);
wl_list_remove(&layer_surface->map.link);
wl_list_remove(&layer_surface->unmap.link);
wl_list_remove(&layer_surface->commit.link);
wl_list_remove(&layer_surface->new_popup.link);
wl_list_remove(&layer_surface->destroy.link);
wlr_scene_node_destroy(&layer_surface->scene_tree->node);
free(layer_surface);
}