diff options
| author | Ivan Molodetskikh <yalterz@gmail.com> | 2025-01-04 18:02:38 +0300 |
|---|---|---|
| committer | Ivan Molodetskikh <yalterz@gmail.com> | 2025-01-04 18:03:08 +0300 |
| commit | dca0364f4c4893b2e062f643105869ec16f71f89 (patch) | |
| tree | 0c580b961a1d5a113364a643a9242b63c2f6bba4 /src/backend | |
| parent | 37771259d930baf8550c2e240815c9ff87928412 (diff) | |
| download | niri-dca0364f4c4893b2e062f643105869ec16f71f89.tar.gz niri-dca0364f4c4893b2e062f643105869ec16f71f89.tar.bz2 niri-dca0364f4c4893b2e062f643105869ec16f71f89.zip | |
Unname connector if a duplicate is detected
Diffstat (limited to 'src/backend')
| -rw-r--r-- | src/backend/tty.rs | 23 |
1 files changed, 22 insertions, 1 deletions
diff --git a/src/backend/tty.rs b/src/backend/tty.rs index 60dc50ba..1a11839d 100644 --- a/src/backend/tty.rs +++ b/src/backend/tty.rs @@ -649,13 +649,34 @@ impl Tty { crtc: Some(crtc), } => { let connector_name = format_connector_name(&connector); - let name = make_output_name(&device.drm, connector.handle(), connector_name); + let mut name = + make_output_name(&device.drm, connector.handle(), connector_name); debug!( "new connector: {} \"{}\"", &name.connector, name.format_make_model_serial(), ); + // Make/model/serial can match exactly between different physical monitors. This + // doesn't happen often, but our Layout does not support such duplicates and + // will panic. + // + // As a workaround, search for duplicates, and unname the current connector if + // one is found. Connector names are always unique. + let formatted = name.format_make_model_serial_or_connector(); + for info in device.known_crtcs.values() { + if info.name.matches(&formatted) { + warn!("connector make/model/serial duplicates existing, unnaming"); + name = OutputName { + connector: name.connector, + make: None, + model: None, + serial: None, + }; + break; + } + } + // Assign an id to this crtc. let id = OutputId::next(); device.known_crtcs.insert(crtc, CrtcInfo { id, name }); |
