Merge pull request #890 from agx/layer-shell-empty-output-crash

layer-shell: Fix crash when cursor is intially outside any output
This commit is contained in:
Drew DeVault 2018-04-26 14:31:35 +02:00 committed by GitHub
commit 93ebd33aa8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 15 additions and 3 deletions

View File

@ -395,8 +395,18 @@ void handle_layer_shell_surface(struct wl_listener *listener, void *data) {
wlr_output_layout_output_at(desktop->layout, wlr_output_layout_output_at(desktop->layout,
seat->cursor->cursor->x, seat->cursor->cursor->x,
seat->cursor->cursor->y); seat->cursor->cursor->y);
assert(output); // And this one if (!output) {
wlr_log(L_ERROR, "Couldn't find output at (%.0f,%.0f)",
seat->cursor->cursor->x,
seat->cursor->cursor->y);
output = wlr_output_layout_get_center_output(desktop->layout);
}
if (output) {
layer_surface->output = output; layer_surface->output = output;
} else {
wlr_layer_surface_close(layer_surface);
return;
}
} }
roots_surface->surface_commit.notify = handle_surface_commit; roots_surface->surface_commit.notify = handle_surface_commit;

View File

@ -288,7 +288,9 @@ static void handle_surface_committed(struct wlr_surface *wlr_surface,
surface->added = true; surface->added = true;
wlr_signal_emit_safe(&surface->shell->events.new_surface, wlr_signal_emit_safe(&surface->shell->events.new_surface,
surface); surface);
assert(surface->output); // either the compositor found a suitable output or it must
// have closed the surface
assert(surface->output || surface->closed);
} }
if (surface->configured && wlr_surface_has_buffer(surface->surface) && if (surface->configured && wlr_surface_has_buffer(surface->surface) &&
!surface->mapped) { !surface->mapped) {