various improvements to layer surface
- remove various useless assignments of layersurface->mon - styles changes - do not set wlr_layer_surface->output to NULL at destroy
This commit is contained in:
parent
0e993b5fb1
commit
2260519740
38
dwl.c
38
dwl.c
@ -783,25 +783,23 @@ commitlayersurfacenotify(struct wl_listener *listener, void *data)
|
|||||||
{
|
{
|
||||||
LayerSurface *layersurface = wl_container_of(listener, layersurface, surface_commit);
|
LayerSurface *layersurface = wl_container_of(listener, layersurface, surface_commit);
|
||||||
struct wlr_layer_surface_v1 *wlr_layer_surface = layersurface->layer_surface;
|
struct wlr_layer_surface_v1 *wlr_layer_surface = layersurface->layer_surface;
|
||||||
struct wlr_output *wlr_output = wlr_layer_surface->output;
|
|
||||||
|
|
||||||
if (!wlr_output || !(layersurface->mon = wlr_output->data))
|
if (!layersurface->mon)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
wlr_scene_node_reparent(layersurface->scene,
|
if (layers[wlr_layer_surface->current.layer] != layersurface->scene) {
|
||||||
layers[wlr_layer_surface->current.layer]);
|
wlr_scene_node_reparent(layersurface->scene,
|
||||||
|
layers[wlr_layer_surface->current.layer]);
|
||||||
|
wl_list_remove(&layersurface->link);
|
||||||
|
wl_list_insert(&layersurface->mon->layers[wlr_layer_surface->current.layer],
|
||||||
|
&layersurface->link);
|
||||||
|
}
|
||||||
|
|
||||||
if (wlr_layer_surface->current.committed == 0
|
if (wlr_layer_surface->current.committed == 0
|
||||||
&& layersurface->mapped == wlr_layer_surface->mapped)
|
&& layersurface->mapped == wlr_layer_surface->mapped)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
layersurface->mapped = wlr_layer_surface->mapped;
|
layersurface->mapped = wlr_layer_surface->mapped;
|
||||||
|
|
||||||
if (layers[wlr_layer_surface->current.layer] != layersurface->scene) {
|
|
||||||
wl_list_remove(&layersurface->link);
|
|
||||||
wl_list_insert(&layersurface->mon->layers[wlr_layer_surface->current.layer],
|
|
||||||
&layersurface->link);
|
|
||||||
}
|
|
||||||
arrangelayers(layersurface->mon);
|
arrangelayers(layersurface->mon);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -868,14 +866,13 @@ createlayersurface(struct wl_listener *listener, void *data)
|
|||||||
LayerSurface *layersurface;
|
LayerSurface *layersurface;
|
||||||
struct wlr_layer_surface_v1_state old_state;
|
struct wlr_layer_surface_v1_state old_state;
|
||||||
|
|
||||||
if (!wlr_layer_surface->output) {
|
if (!wlr_layer_surface->output)
|
||||||
wlr_layer_surface->output = selmon->wlr_output;
|
wlr_layer_surface->output = selmon->wlr_output;
|
||||||
}
|
|
||||||
|
|
||||||
layersurface = ecalloc(1, sizeof(LayerSurface));
|
layersurface = ecalloc(1, sizeof(LayerSurface));
|
||||||
layersurface->type = LayerShell;
|
layersurface->type = LayerShell;
|
||||||
LISTEN(&wlr_layer_surface->surface->events.commit,
|
LISTEN(&wlr_layer_surface->surface->events.commit,
|
||||||
&layersurface->surface_commit, commitlayersurfacenotify);
|
&layersurface->surface_commit, commitlayersurfacenotify);
|
||||||
LISTEN(&wlr_layer_surface->events.destroy, &layersurface->destroy,
|
LISTEN(&wlr_layer_surface->events.destroy, &layersurface->destroy,
|
||||||
destroylayersurfacenotify);
|
destroylayersurfacenotify);
|
||||||
LISTEN(&wlr_layer_surface->events.map, &layersurface->map,
|
LISTEN(&wlr_layer_surface->events.map, &layersurface->map,
|
||||||
@ -884,8 +881,8 @@ createlayersurface(struct wl_listener *listener, void *data)
|
|||||||
unmaplayersurfacenotify);
|
unmaplayersurfacenotify);
|
||||||
|
|
||||||
layersurface->layer_surface = wlr_layer_surface;
|
layersurface->layer_surface = wlr_layer_surface;
|
||||||
wlr_layer_surface->data = layersurface;
|
|
||||||
layersurface->mon = wlr_layer_surface->output->data;
|
layersurface->mon = wlr_layer_surface->output->data;
|
||||||
|
wlr_layer_surface->data = layersurface;
|
||||||
|
|
||||||
layersurface->scene = wlr_layer_surface->surface->data =
|
layersurface->scene = wlr_layer_surface->surface->data =
|
||||||
wlr_scene_subsurface_tree_create(layers[wlr_layer_surface->pending.layer],
|
wlr_scene_subsurface_tree_create(layers[wlr_layer_surface->pending.layer],
|
||||||
@ -1076,11 +1073,8 @@ destroylayersurfacenotify(struct wl_listener *listener, void *data)
|
|||||||
wl_list_remove(&layersurface->unmap.link);
|
wl_list_remove(&layersurface->unmap.link);
|
||||||
wl_list_remove(&layersurface->surface_commit.link);
|
wl_list_remove(&layersurface->surface_commit.link);
|
||||||
wlr_scene_node_destroy(layersurface->scene);
|
wlr_scene_node_destroy(layersurface->scene);
|
||||||
if (layersurface->layer_surface->output) {
|
if (layersurface->mon)
|
||||||
if ((layersurface->mon = layersurface->layer_surface->output->data))
|
arrangelayers(layersurface->mon);
|
||||||
arrangelayers(layersurface->mon);
|
|
||||||
layersurface->layer_surface->output = NULL;
|
|
||||||
}
|
|
||||||
free(layersurface);
|
free(layersurface);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1380,10 +1374,8 @@ killclient(const Arg *arg)
|
|||||||
void
|
void
|
||||||
maplayersurfacenotify(struct wl_listener *listener, void *data)
|
maplayersurfacenotify(struct wl_listener *listener, void *data)
|
||||||
{
|
{
|
||||||
LayerSurface *layersurface = wl_container_of(listener, layersurface, map);
|
LayerSurface *l = wl_container_of(listener, l, map);
|
||||||
layersurface->mon = layersurface->layer_surface->output->data;
|
wlr_surface_send_enter(l->layer_surface->surface, l->mon->wlr_output);
|
||||||
wlr_surface_send_enter(layersurface->layer_surface->surface,
|
|
||||||
layersurface->mon->wlr_output);
|
|
||||||
motionnotify(0);
|
motionnotify(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user