diff --git a/src/wayland/protocols/output_configuration/handlers/cosmic.rs b/src/wayland/protocols/output_configuration/handlers/cosmic.rs index f36d002d..d7145f58 100644 --- a/src/wayland/protocols/output_configuration/handlers/cosmic.rs +++ b/src/wayland/protocols/output_configuration/handlers/cosmic.rs @@ -1,7 +1,7 @@ // SPDX-License-Identifier: GPL-3.0-only use smithay::{ - output::{Mode, Output}, + output::Mode, reexports::{ wayland_protocols_wlr::output_management::v1::server::{ zwlr_output_configuration_head_v1::{self, ZwlrOutputConfigurationHeadV1}, @@ -179,7 +179,9 @@ where } => { if let Ok(obj) = obj.upgrade() { if let Some(data) = obj.data::() { - if let Some(output) = mirroring.data::() { + if let Some(output) = + mirroring.data::().and_then(|x| x.upgrade()) + { let mut pending = data.lock().unwrap(); if pending.heads.iter().any(|(h, _)| *h == head) { obj.post_error( @@ -195,7 +197,7 @@ where if let Some(conf) = c.data::() { match conf.lock().unwrap().mirroring.as_ref() { Some(mirrored) => { - head.data::().is_some_and(|o| o == mirrored) // we are already a mirror target -> invalid + head.data::().is_some_and(|o| o == mirrored) // we are already a mirror target -> invalid || *h == mirroring // our target already mirrors -> invalid } None => false, diff --git a/src/wayland/protocols/output_configuration/handlers/wlr.rs b/src/wayland/protocols/output_configuration/handlers/wlr.rs index 1ac7ee19..55b5cfc0 100644 --- a/src/wayland/protocols/output_configuration/handlers/wlr.rs +++ b/src/wayland/protocols/output_configuration/handlers/wlr.rs @@ -234,7 +234,7 @@ where if pending.heads.iter().any(|(_, c)| match c { Some(conf) => { if let Some(output_conf) = conf.data::() { - if let Some(output) = head.data::() { + if let Some(output) = head.data::() { let pending_conf = output_conf.lock().unwrap(); pending_conf.mirroring.as_ref().is_some_and(|o| o == output) } else {