mirror of
https://gitlab.freedesktop.org/wlroots/wlroots.git
synced 2025-11-01 22:58:38 -04:00
scene_output_layout: Don't destroy output when output layout is destroyed
There were a couple of problems with this:
1. The behavior is unexpected. Typically objects in wlroots won't
also destroy objects that they depend on. For instance, wlr_scene_output
will not destroy the wlr_output when it's destroyed. It shouldn't be any
different for scene layouts.
2. This fixes a crash where because wlr_output_layout and wlr_scene_output
are both addons to wlr_output, we might get into a situation where
wl_list_for_each_safe might malfunction. See [1]
This means that the compositor needs to manually destroy the output
when they destroy the layout, hence ~breaking. Compositors can just
call `wlr_scene_output_destroy()` if they want to destroy both at the
same time.
[1] https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/4358#note_2106260
This reverts commit 1a731596c5.
Co-authored-by: Kirill Primak <vyivel@eclair.cafe>
This commit is contained in:
parent
5fb0007e02
commit
e1e911d425
2 changed files with 6 additions and 10 deletions
|
|
@ -28,7 +28,6 @@ static void scene_output_layout_output_destroy(
|
|||
wl_list_remove(&solo->layout_output_destroy.link);
|
||||
wl_list_remove(&solo->scene_output_destroy.link);
|
||||
wl_list_remove(&solo->link);
|
||||
wlr_scene_output_destroy(solo->scene_output);
|
||||
free(solo);
|
||||
}
|
||||
|
||||
|
|
@ -43,7 +42,6 @@ static void scene_output_layout_output_handle_scene_output_destroy(
|
|||
struct wl_listener *listener, void *data) {
|
||||
struct wlr_scene_output_layout_output *solo =
|
||||
wl_container_of(listener, solo, scene_output_destroy);
|
||||
solo->scene_output = NULL;
|
||||
scene_output_layout_output_destroy(solo);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue