layer_surface
instead of wlr_layer_surface
and scene_layer
whenever a wlr_scene_tree is related to layer surfaces
RLFTJX3XEX5I2N5JDVBBYRN4INKH7MQGKC5SNJ4QFR243TRYKDXQC
OY5A3YOGYG5YL6N6TN23MX2FUNNO37NPC3EVHI5ZIVWU7PEJ4GZQC
FDYFRVFUHGSJGJADBI2ZYK3Z267B743K3ECC2YLDAJHLL6JSDCPAC
WUDWDK2NHZOCYXL47W4MVORSJGSFFDTX77GGUI6ZUKTANMXO4NDQC
KBUAWXU4LRZ6KIJBCQTB323GIM5FUMFF6EZBEHM7S6TN47NOYQPAC
E7Z3BN6ENCQFHULDS2A4YRPPKIFKJFUKK7FHYSQCYBBNCZC6HT2QC
M7QE4HK3R5GUCJO64CHIRXFGNATUF4O2DSTZYS6UI4U23CQFU2UQC
65Z3JJ5JKJELZEI3CKQ7Q3TIQVSSH66CJJQUJUZIQYPSJ67ETHJQC
VCNLR5X75OAXVKPZQHF5RUZ7BONBUC6RPGO2NZEUD3FZ7TEVL66AC
DADSQJFKYX6U5JOHSHJWWDSUFC7ZWSZVHFMEKPZEXKPELMEQBL2QC
7B74AT3BXYB7PVW4F6SGQNPMHOU5TEV5TZ54CG6VSQI46XSEKWXQC
3C2GQZEGV3UP22LMLNH4RBI5MXXTV447DBIOVMBPE7T6QZKINYXQC
T65KVJWUY3RYRWBFG5DP4V4NID4VO3MM6IOFYPM2IJKR6NCD7YDQC
VAB2INZYCWFZNUZFYFTVJAPBORPDF3XS47YVOKZIJA23WDHVAVGQC
BFWKVWAIUKHCZVRA62GW6QZUEUKQLW365HUWIVKTEIPJNJSOZBAQC
A7352YC3UYSPZMWFOCK6ZBWS3D5LLBKXAKZBWATPYIYA27COQWJQC
7ATQKTE47BQ5QI66Z5VS2BSPGBQFUN3ZJUDC6NLMH7WCZAH437HAC
OOK6V7XAN2JATIPAI4YNE7PUSA5NTJYEYFTAVQ5Q2BBDBTHE6UCQC
DW7VJBQRTDYTT5YCBH2MUZYMNXZOM7H4PU7HQBTMDFM3RFVKAOQAC
GBPNNVSTRYC5VBC46GLT5YXUTF5BVIBHORH2EIJFZJ7E6D6SUDDAC
JTZBFGPCDJDJWECXH2LLXY3SUAQNCP45HLJQKG3V7XGTPLD634WAC
2MNEWEUDXLYJSIGGRQF55ZYEJCOC7TQ7IHV3SJC5A7NAQ5X5NA7AC
TOFCZFUYVBVEBHMKVG6G5MKCAEF2QCQ4GKMKGQUSJRLGLDZEJF4QC
CFF6MYUDSO3VVMMCGJR7RPDBSLKDVR3AROFY5ZE33VG52ER2WYWAC
WRXZXFDNBE3RXUV7VRWD54QHRWMSVHPKE4NKDOIFQLD6WZ73MQPAC
NWKV3CJZDJGETIBG7P2QHOQVHSEK5J2YZAYKL4OVWZEIWHK6LINAC
24ZMBWYLMODPBAVLT4XNOSETHQXVLXNASYXUIGG2435IT7WIZC5AC
3HPB5ODTWGOTRGDML5LCC4AZVICLRBRBTTPUAWMNU5NBMQ76P5QAC
YEHKNAGHE3ETYE5A25SSFTEM565LOM3BX3TN3QDQLLTVQMAJJ5XQC
5CZ5FAO42JN4HNYZZBFI7DOE7GQDSLLFDNJNYAZVYS7YMTT3HEYAC
BZ3O64R2O6IPKBT2U3OIJFSNNHG2PEASPL7AFOTBHRIWA57U4E5AC
MJZ6RCUUOK7R2RMXPXMLRWBAEM6234D2IS7RGPHAE5UN2S64GLGAC
FYDLLRIKT6KKP7RO33MOK6PUO25JQZIRP7WKVNLVHFX2KPOHQKYAC
7IMYSKQFQPSZFD4KEJYCBTBZOBHNYLFYGXIKEX2EKA5HQCGT6M3AC
FBQVZZRREDB25JOCCUYA26ZRGBQWFEIK4SU4EXLC5TVFFBBSFJOAC
34TOMU43GSVTGKBSPBPRFLQYCJZ35HV2BNHKUAJ6CPE4XZLADCLQC
65EUVCVN2KFRX4U6SASDU6GMUT2TKDQUGQQAE6V7OQKFERN3RSEQC
EQRGODLKSVSPFSUZU7BV5ER72U4QS4ATSBKV544XXQVKKTOSC7EAC
RYEGK6T65T2JERD364BNLAFJO2KERYHN52HB6EKRPOY3G6VCJSEQC
SD5WQI5HDQYZKW67M2QOHKLEDL23WIQN22MAABS2ORQDLIJS5GWQC
wl_list_for_each(layersurface, list, link) {
struct wlr_layer_surface_v1 *wlr_layer_surface = layersurface->layer_surface;
struct wlr_layer_surface_v1_state *state = &wlr_layer_surface->current;
wl_list_for_each(l, list, link) {
struct wlr_layer_surface_v1 *layer_surface = l->layer_surface;
struct wlr_layer_surface_v1_state *state = &layer_surface->current;
wlr_scene_layer_surface_v1_configure(layersurface->scene_layer, &full_area, usable_area);
wlr_scene_node_set_position(&layersurface->popups->node,
layersurface->scene->node.x, layersurface->scene->node.y);
layersurface->geom.x = layersurface->scene->node.x;
layersurface->geom.y = layersurface->scene->node.y;
wlr_scene_layer_surface_v1_configure(l->scene_layer, &full_area, usable_area);
wlr_scene_node_set_position(&l->popups->node, l->scene->node.x, l->scene->node.y);
l->geom.x = l->scene->node.x;
l->geom.y = l->scene->node.y;
wl_list_for_each_reverse(layersurface,
&m->layers[layers_above_shell[i]], link) {
if (!locked && layersurface->layer_surface->current.keyboard_interactive
&& layersurface->mapped) {
wl_list_for_each_reverse(l, &m->layers[layers_above_shell[i]], link) {
if (!locked && l->layer_surface->current.keyboard_interactive && l->mapped) {
LayerSurface *layersurface = wl_container_of(listener, layersurface, surface_commit);
struct wlr_layer_surface_v1 *wlr_layer_surface = layersurface->layer_surface;
struct wlr_scene_tree *layer = layers[layermap[wlr_layer_surface->current.layer]];
LayerSurface *l = wl_container_of(listener, l, surface_commit);
struct wlr_layer_surface_v1 *layer_surface = l->layer_surface;
struct wlr_scene_tree *scene_layer = layers[layermap[layer_surface->current.layer]];
if (layer != layersurface->scene->node.parent) {
wlr_scene_node_reparent(&layersurface->scene->node, layer);
wl_list_remove(&layersurface->link);
wl_list_insert(&layersurface->mon->layers[wlr_layer_surface->current.layer],
&layersurface->link);
wlr_scene_node_reparent(&layersurface->popups->node, (wlr_layer_surface->current.layer
< ZWLR_LAYER_SHELL_V1_LAYER_TOP ? layers[LyrTop] : layer));
if (scene_layer != l->scene->node.parent) {
wlr_scene_node_reparent(&l->scene->node, scene_layer);
wl_list_remove(&l->link);
wl_list_insert(&l->mon->layers[layer_surface->current.layer], &l->link);
wlr_scene_node_reparent(&l->popups->node, (layer_surface->current.layer
< ZWLR_LAYER_SHELL_V1_LAYER_TOP ? layers[LyrTop] : scene_layer));
struct wlr_layer_surface_v1 *wlr_layer_surface = data;
LayerSurface *layersurface;
struct wlr_layer_surface_v1 *layer_surface = data;
LayerSurface *l;
struct wlr_surface *surface = layer_surface->surface;
struct wlr_scene_tree *scene_layer = layers[layermap[layer_surface->pending.layer]];
if (!wlr_layer_surface->output
&& !(wlr_layer_surface->output = selmon ? selmon->wlr_output : NULL)) {
wlr_layer_surface_v1_destroy(wlr_layer_surface);
if (!layer_surface->output
&& !(layer_surface->output = selmon ? selmon->wlr_output : NULL)) {
wlr_layer_surface_v1_destroy(layer_surface);
layersurface = wlr_layer_surface->data = ecalloc(1, sizeof(*layersurface));
layersurface->type = LayerShell;
LISTEN(&wlr_layer_surface->surface->events.commit,
&layersurface->surface_commit, commitlayersurfacenotify);
LISTEN(&wlr_layer_surface->events.destroy, &layersurface->destroy,
destroylayersurfacenotify);
LISTEN(&wlr_layer_surface->surface->events.map, &layersurface->map,
maplayersurfacenotify);
LISTEN(&wlr_layer_surface->surface->events.unmap, &layersurface->unmap,
unmaplayersurfacenotify);
l = layer_surface->data = ecalloc(1, sizeof(*l));
l->type = LayerShell;
LISTEN(&surface->events.commit, &l->surface_commit, commitlayersurfacenotify);
LISTEN(&surface->events.map, &l->map, maplayersurfacenotify);
LISTEN(&surface->events.unmap, &l->unmap, unmaplayersurfacenotify);
LISTEN(&layer_surface->events.destroy, &l->destroy, destroylayersurfacenotify);
layersurface->layer_surface = wlr_layer_surface;
layersurface->mon = wlr_layer_surface->output->data;
layersurface->scene_layer = wlr_scene_layer_surface_v1_create(l, wlr_layer_surface);
layersurface->scene = layersurface->scene_layer->tree;
layersurface->popups = wlr_layer_surface->surface->data = wlr_scene_tree_create(l);
l->layer_surface = layer_surface;
l->mon = layer_surface->output->data;
l->scene_layer = wlr_scene_layer_surface_v1_create(scene_layer, layer_surface);
l->scene = l->scene_layer->tree;
l->popups = surface->data = wlr_scene_tree_create(scene_layer);
l->scene->node.data = l;
wl_list_insert(&layersurface->mon->layers[wlr_layer_surface->pending.layer],
&layersurface->link);
wlr_surface_send_enter(wlr_layer_surface->surface, wlr_layer_surface->output);
wl_list_insert(&l->mon->layers[layer_surface->pending.layer],&l->link);
wlr_surface_send_enter(surface, layer_surface->output);
old_state = wlr_layer_surface->current;
wlr_layer_surface->current = wlr_layer_surface->pending;
layersurface->mapped = 1;
arrangelayers(layersurface->mon);
wlr_layer_surface->current = old_state;
old_state = layer_surface->current;
layer_surface->current = layer_surface->pending;
l->mapped = 1;
arrangelayers(l->mon);
layer_surface->current = old_state;
wl_list_remove(&layersurface->link);
wl_list_remove(&layersurface->destroy.link);
wl_list_remove(&layersurface->map.link);
wl_list_remove(&layersurface->unmap.link);
wl_list_remove(&layersurface->surface_commit.link);
wlr_scene_node_destroy(&layersurface->scene->node);
wlr_scene_node_destroy(&layersurface->popups->node);
free(layersurface);
wl_list_remove(&l->link);
wl_list_remove(&l->destroy.link);
wl_list_remove(&l->map.link);
wl_list_remove(&l->unmap.link);
wl_list_remove(&l->surface_commit.link);
wlr_scene_node_destroy(&l->scene->node);
wlr_scene_node_destroy(&l->popups->node);
free(l);
if (layersurface->layer_surface->output
&& (layersurface->mon = layersurface->layer_surface->output->data))
arrangelayers(layersurface->mon);
if (layersurface->layer_surface->surface ==
seat->keyboard_state.focused_surface)
if (l->layer_surface->output && (l->mon = l->layer_surface->output->data))
arrangelayers(l->mon);
if (l->layer_surface->surface == seat->keyboard_state.focused_surface)