mirror of
https://github.com/swaywm/sway.git
synced 2025-03-04 06:34:44 +01:00
desktop/idle_inhibit: remove event listeners on destroy
This fixes a crash in wlroots listener checks. See #8509.
This commit is contained in:
parent
eb043295bc
commit
86bbedcce3
2 changed files with 12 additions and 0 deletions
|
@ -13,6 +13,7 @@ enum sway_idle_inhibit_mode {
|
||||||
struct sway_idle_inhibit_manager_v1 {
|
struct sway_idle_inhibit_manager_v1 {
|
||||||
struct wlr_idle_inhibit_manager_v1 *wlr_manager;
|
struct wlr_idle_inhibit_manager_v1 *wlr_manager;
|
||||||
struct wl_listener new_idle_inhibitor_v1;
|
struct wl_listener new_idle_inhibitor_v1;
|
||||||
|
struct wl_listener manager_destroy;
|
||||||
struct wl_list inhibitors;
|
struct wl_list inhibitors;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -44,6 +44,14 @@ void handle_idle_inhibitor_v1(struct wl_listener *listener, void *data) {
|
||||||
sway_idle_inhibit_v1_check_active();
|
sway_idle_inhibit_v1_check_active();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void handle_manager_destroy(struct wl_listener *listener, void *data) {
|
||||||
|
struct sway_idle_inhibit_manager_v1 *manager =
|
||||||
|
wl_container_of(listener, manager, manager_destroy);
|
||||||
|
|
||||||
|
wl_list_remove(&manager->manager_destroy.link);
|
||||||
|
wl_list_remove(&manager->new_idle_inhibitor_v1.link);
|
||||||
|
}
|
||||||
|
|
||||||
void sway_idle_inhibit_v1_user_inhibitor_register(struct sway_view *view,
|
void sway_idle_inhibit_v1_user_inhibitor_register(struct sway_view *view,
|
||||||
enum sway_idle_inhibit_mode mode) {
|
enum sway_idle_inhibit_mode mode) {
|
||||||
struct sway_idle_inhibit_manager_v1 *manager = &server.idle_inhibit_manager_v1;
|
struct sway_idle_inhibit_manager_v1 *manager = &server.idle_inhibit_manager_v1;
|
||||||
|
@ -153,6 +161,9 @@ bool sway_idle_inhibit_manager_v1_init(void) {
|
||||||
wl_signal_add(&manager->wlr_manager->events.new_inhibitor,
|
wl_signal_add(&manager->wlr_manager->events.new_inhibitor,
|
||||||
&manager->new_idle_inhibitor_v1);
|
&manager->new_idle_inhibitor_v1);
|
||||||
manager->new_idle_inhibitor_v1.notify = handle_idle_inhibitor_v1;
|
manager->new_idle_inhibitor_v1.notify = handle_idle_inhibitor_v1;
|
||||||
|
wl_signal_add(&manager->wlr_manager->events.destroy,
|
||||||
|
&manager->manager_destroy);
|
||||||
|
manager->manager_destroy.notify = handle_manager_destroy;
|
||||||
wl_list_init(&manager->inhibitors);
|
wl_list_init(&manager->inhibitors);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|
Loading…
Add table
Reference in a new issue