mirror of
https://github.com/swaywm/sway.git
synced 2026-04-22 06:46:27 -04:00
Implement ext-session-lock-v1
This commit is contained in:
parent
70d30ac72b
commit
519038a7e9
11 changed files with 290 additions and 7 deletions
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue