|
|
@ -360,23 +360,6 @@ static void handle_surface_commit(struct wl_listener *listener, void *data) {
|
|
|
|
transaction_commit_dirty();
|
|
|
|
transaction_commit_dirty();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
static void unmap(struct sway_layer_surface *sway_layer) {
|
|
|
|
|
|
|
|
struct sway_seat *seat;
|
|
|
|
|
|
|
|
wl_list_for_each(seat, &server.input->seats, link) {
|
|
|
|
|
|
|
|
if (seat->focused_layer == sway_layer->layer_surface) {
|
|
|
|
|
|
|
|
seat_set_focus_layer(seat, NULL);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
cursor_rebase_all();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
struct wlr_output *wlr_output = sway_layer->layer_surface->output;
|
|
|
|
|
|
|
|
sway_assert(wlr_output, "wlr_layer_surface_v1 has null output");
|
|
|
|
|
|
|
|
struct sway_output *output = wlr_output->data;
|
|
|
|
|
|
|
|
output_damage_surface(output, sway_layer->geo.x, sway_layer->geo.y,
|
|
|
|
|
|
|
|
sway_layer->layer_surface->surface, true);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static void layer_subsurface_destroy(struct sway_layer_subsurface *subsurface);
|
|
|
|
static void layer_subsurface_destroy(struct sway_layer_subsurface *subsurface);
|
|
|
|
|
|
|
|
|
|
|
|
static void handle_destroy(struct wl_listener *listener, void *data) {
|
|
|
|
static void handle_destroy(struct wl_listener *listener, void *data) {
|
|
|
@ -384,9 +367,6 @@ static void handle_destroy(struct wl_listener *listener, void *data) {
|
|
|
|
wl_container_of(listener, sway_layer, destroy);
|
|
|
|
wl_container_of(listener, sway_layer, destroy);
|
|
|
|
sway_log(SWAY_DEBUG, "Layer surface destroyed (%s)",
|
|
|
|
sway_log(SWAY_DEBUG, "Layer surface destroyed (%s)",
|
|
|
|
sway_layer->layer_surface->namespace);
|
|
|
|
sway_layer->layer_surface->namespace);
|
|
|
|
if (sway_layer->layer_surface->surface->mapped) {
|
|
|
|
|
|
|
|
unmap(sway_layer);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
struct sway_layer_subsurface *subsurface, *subsurface_tmp;
|
|
|
|
struct sway_layer_subsurface *subsurface, *subsurface_tmp;
|
|
|
|
wl_list_for_each_safe(subsurface, subsurface_tmp, &sway_layer->subsurfaces, link) {
|
|
|
|
wl_list_for_each_safe(subsurface, subsurface_tmp, &sway_layer->subsurfaces, link) {
|
|
|
@ -426,7 +406,20 @@ static void handle_map(struct wl_listener *listener, void *data) {
|
|
|
|
static void handle_unmap(struct wl_listener *listener, void *data) {
|
|
|
|
static void handle_unmap(struct wl_listener *listener, void *data) {
|
|
|
|
struct sway_layer_surface *sway_layer = wl_container_of(
|
|
|
|
struct sway_layer_surface *sway_layer = wl_container_of(
|
|
|
|
listener, sway_layer, unmap);
|
|
|
|
listener, sway_layer, unmap);
|
|
|
|
unmap(sway_layer);
|
|
|
|
struct sway_seat *seat;
|
|
|
|
|
|
|
|
wl_list_for_each(seat, &server.input->seats, link) {
|
|
|
|
|
|
|
|
if (seat->focused_layer == sway_layer->layer_surface) {
|
|
|
|
|
|
|
|
seat_set_focus_layer(seat, NULL);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
cursor_rebase_all();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
struct wlr_output *wlr_output = sway_layer->layer_surface->output;
|
|
|
|
|
|
|
|
sway_assert(wlr_output, "wlr_layer_surface_v1 has null output");
|
|
|
|
|
|
|
|
struct sway_output *output = wlr_output->data;
|
|
|
|
|
|
|
|
output_damage_surface(output, sway_layer->geo.x, sway_layer->geo.y,
|
|
|
|
|
|
|
|
sway_layer->layer_surface->surface, true);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
static void subsurface_damage(struct sway_layer_subsurface *subsurface,
|
|
|
|
static void subsurface_damage(struct sway_layer_subsurface *subsurface,
|
|
|
|