Implement ext-session-lock-v1

This commit is contained in:
Daniel De Graaf 2022-03-08 21:14:26 -05:00 committed by Simon Ser
parent 70d30ac72b
commit 519038a7e9
11 changed files with 290 additions and 7 deletions

View file

@ -1056,6 +1056,41 @@ void output_render(struct sway_output *output, struct timespec *when,
wlr_renderer_clear(renderer, (float[]){1, 1, 0, 1});
}
if (server.session_lock.locked) {
float clear_color[] = {0.0f, 0.0f, 0.0f, 1.0f};
if (server.session_lock.lock == NULL) {
// abandoned lock -> red BG
clear_color[0] = 1.f;
}
int nrects;
pixman_box32_t *rects = pixman_region32_rectangles(damage, &nrects);
for (int i = 0; i < nrects; ++i) {
scissor_output(wlr_output, &rects[i]);
wlr_renderer_clear(renderer, clear_color);
}
if (server.session_lock.lock != NULL) {
struct render_data data = {
.damage = damage,
.alpha = 1.0f,
};
struct wlr_session_lock_surface_v1 *lock_surface;
wl_list_for_each(lock_surface, &server.session_lock.lock->surfaces, link) {
if (lock_surface->output != wlr_output) {
continue;
}
if (!lock_surface->mapped) {
continue;
}
output_surface_for_each_surface(output, lock_surface->surface,
0.0, 0.0, render_surface_iterator, &data);
}
}
goto renderer_end;
}
if (output_has_opaque_overlay_layer_surface(output)) {
goto render_overlay;
}