1
0
Fork 0
forked from wry/wry

metal: don't treat disabled connectors as disconnected

This commit is contained in:
Julian Orth 2025-07-12 12:02:27 +02:00
parent 7ab99bb840
commit ef2b719e77
3 changed files with 12 additions and 10 deletions

View file

@ -1013,7 +1013,6 @@ impl MetalDeviceTransactionWithChange {
mem::swap(o, &mut plane.new); mem::swap(o, &mut plane.new);
} }
for (_, connector) in &mut slf.connectors { for (_, connector) in &mut slf.connectors {
let is_enabled;
let is_connected; let is_connected;
let is_non_desktop; let is_non_desktop;
{ {
@ -1021,7 +1020,6 @@ impl MetalDeviceTransactionWithChange {
mem::swap(&mut dd.drm_state, &mut connector.new); mem::swap(&mut dd.drm_state, &mut connector.new);
mem::swap(&mut *dd.persistent.state.borrow_mut(), &mut connector.state); mem::swap(&mut *dd.persistent.state.borrow_mut(), &mut connector.state);
dd.update_cached_fields(&slf.dev.dev); dd.update_cached_fields(&slf.dev.dev);
is_enabled = dd.persistent.state.borrow().enabled;
is_non_desktop = dd.non_desktop_effective; is_non_desktop = dd.non_desktop_effective;
is_connected = dd.connection == ConnectorStatus::Connected; is_connected = dd.connection == ConnectorStatus::Connected;
} }
@ -1052,7 +1050,7 @@ impl MetalDeviceTransactionWithChange {
connector.obj.send_connected(); connector.obj.send_connected();
} }
} }
} else if is_enabled && is_connected && is_non_desktop { } else if is_connected && is_non_desktop {
match connector.obj.frontend_state.get() { match connector.obj.frontend_state.get() {
FrontState::Removed FrontState::Removed
| FrontState::Unavailable | FrontState::Unavailable

View file

@ -388,7 +388,8 @@ impl ConnectorDisplayData {
fn update_non_desktop_effective(&mut self) { fn update_non_desktop_effective(&mut self) {
let state = &*self.persistent.state.borrow(); let state = &*self.persistent.state.borrow();
self.non_desktop_effective = state.non_desktop_override.unwrap_or(self.non_desktop); self.non_desktop_effective =
!state.enabled || state.non_desktop_override.unwrap_or(self.non_desktop);
} }
pub fn update_cached_fields(&mut self, dev: &MetalDrmDevice) { pub fn update_cached_fields(&mut self, dev: &MetalDrmDevice) {
@ -668,8 +669,8 @@ impl MetalConnector {
} }
fn connected(&self) -> bool { fn connected(&self) -> bool {
let dd = self.display.borrow_mut(); let dd = self.display.borrow();
dd.persistent.state.borrow().enabled && dd.connection == ConnectorStatus::Connected dd.connection == ConnectorStatus::Connected
} }
pub fn update_drm_feedback(&self) { pub fn update_drm_feedback(&self) {

View file

@ -853,10 +853,11 @@ impl Randr {
fn print_connector(&self, connector: &Connector, modes: bool, formats: bool) { fn print_connector(&self, connector: &Connector, modes: bool, formats: bool) {
println!(" {}:", connector.name); println!(" {}:", connector.name);
if !connector.enabled {
println!(" disabled");
}
let Some(o) = &connector.output else { let Some(o) = &connector.output else {
if !connector.enabled { if connector.enabled {
println!(" disabled");
} else {
println!(" disconnected"); println!(" disconnected");
} }
return; return;
@ -869,7 +870,9 @@ impl Randr {
o.width_mm, o.height_mm o.width_mm, o.height_mm
); );
if o.non_desktop { if o.non_desktop {
println!(" non-desktop"); if connector.enabled {
println!(" non-desktop");
}
return; return;
} }
println!(" VRR capable: {}", o.vrr_capable); println!(" VRR capable: {}", o.vrr_capable);