From 7251c8c2f45023333169e76085bf770aa3f17c79 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joel=20K=C3=B6per?= Date: Thu, 6 Nov 2025 20:24:38 +0100 Subject: [PATCH] fix(displays): disable display when disabling mirroring on a projected display --- cosmic-settings/src/pages/display/mod.rs | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/cosmic-settings/src/pages/display/mod.rs b/cosmic-settings/src/pages/display/mod.rs index c54f01d..9101251 100644 --- a/cosmic-settings/src/pages/display/mod.rs +++ b/cosmic-settings/src/pages/display/mod.rs @@ -16,6 +16,7 @@ use cosmic_randr_shell::{ AdaptiveSyncAvailability, AdaptiveSyncState, List, Output, OutputKey, Transform, }; use cosmic_settings_page::{self as page, Section, section}; +use indexmap::Equivalent; use slab::Slab; use slotmap::{Key, SecondaryMap, SlotMap}; use std::sync::atomic::{AtomicBool, Ordering}; @@ -548,7 +549,25 @@ impl Page { Message::DisplayToggle(enable) => return self.toggle_display(enable), Message::Mirroring(mirroring) => match mirroring { - Mirroring::Disable => return self.toggle_display(true), + Mirroring::Disable => { + for k in self.mirror_map.keys() { + if k.equivalent(&self.active_display) { + return self.toggle_display(true); + } + + if let Some(v) = self.mirror_map.get(k) { + if v.equivalent(&self.active_display) { + if let Some(output) = self.list.outputs.get(k) { + return self.exec_randr(output, Randr::Toggle(true)); + } else { + return Task::none(); + } + } + } + } + + return Task::none(); + } Mirroring::Mirror(from_display) => { let Some(output) = self.list.outputs.get(self.active_display) else {