Make output name matching case-insensitive

This commit is contained in:
Ivan Molodetskikh
2024-05-05 12:55:57 +04:00
parent ea59091869
commit 96823eea38
4 changed files with 23 additions and 8 deletions
+3 -3
View File
@@ -714,7 +714,7 @@ impl Tty {
.borrow() .borrow()
.outputs .outputs
.iter() .iter()
.find(|o| o.name == output_name) .find(|o| o.name.eq_ignore_ascii_case(&output_name))
.cloned() .cloned()
.unwrap_or_default(); .unwrap_or_default();
@@ -1574,7 +1574,7 @@ impl Tty {
.borrow() .borrow()
.outputs .outputs
.iter() .iter()
.find(|o| o.name == surface.name) .find(|o| o.name.eq_ignore_ascii_case(&surface.name))
.cloned() .cloned()
.unwrap_or_default(); .unwrap_or_default();
if config.off { if config.off {
@@ -1704,7 +1704,7 @@ impl Tty {
.borrow() .borrow()
.outputs .outputs
.iter() .iter()
.find(|o| o.name == output_name) .find(|o| o.name.eq_ignore_ascii_case(&output_name))
.cloned() .cloned()
.unwrap_or_default(); .unwrap_or_default();
+4 -1
View File
@@ -171,7 +171,10 @@ fn process(ctx: &ClientCtx, request: Request) -> Reply {
} }
Request::Output { output, action } => { Request::Output { output, action } => {
let ipc_outputs = ctx.ipc_outputs.lock().unwrap(); let ipc_outputs = ctx.ipc_outputs.lock().unwrap();
let response = if ipc_outputs.contains_key(&output) { let found = ipc_outputs
.keys()
.any(|name| name.eq_ignore_ascii_case(&output));
let response = if found {
OutputConfigChanged::Applied OutputConfigChanged::Applied
} else { } else {
OutputConfigChanged::OutputWasMissing OutputConfigChanged::OutputWasMissing
+14 -4
View File
@@ -1012,7 +1012,10 @@ impl State {
for output in self.niri.global_space.outputs() { for output in self.niri.global_space.outputs() {
let name = output.name(); let name = output.name();
let config = self.niri.config.borrow_mut(); let config = self.niri.config.borrow_mut();
let config = config.outputs.iter().find(|o| o.name == name); let config = config
.outputs
.iter()
.find(|o| o.name.eq_ignore_ascii_case(&name));
let scale = config.and_then(|c| c.scale).unwrap_or_else(|| { let scale = config.and_then(|c| c.scale).unwrap_or_else(|| {
let size_mm = output.physical_properties().size; let size_mm = output.physical_properties().size;
@@ -1058,7 +1061,11 @@ impl State {
pub fn apply_transient_output_config(&mut self, name: &str, action: niri_ipc::OutputAction) { pub fn apply_transient_output_config(&mut self, name: &str, action: niri_ipc::OutputAction) {
{ {
let mut config = self.niri.config.borrow_mut(); let mut config = self.niri.config.borrow_mut();
let config = if let Some(config) = config.outputs.iter_mut().find(|o| o.name == name) { let config = if let Some(config) = config
.outputs
.iter_mut()
.find(|o| o.name.eq_ignore_ascii_case(name))
{
config config
} else { } else {
config.outputs.push(niri_config::Output { config.outputs.push(niri_config::Output {
@@ -1564,7 +1571,7 @@ impl Niri {
let config = config let config = config
.outputs .outputs
.iter() .iter()
.find(|o| o.name == name) .find(|o| o.name.eq_ignore_ascii_case(&name))
.and_then(|c| c.position); .and_then(|c| c.position);
outputs.push(Data { outputs.push(Data {
@@ -1670,7 +1677,10 @@ impl Niri {
let name = output.name(); let name = output.name();
let config = self.config.borrow(); let config = self.config.borrow();
let c = config.outputs.iter().find(|o| o.name == name); let c = config
.outputs
.iter()
.find(|o| o.name.eq_ignore_ascii_case(&name));
let scale = c.and_then(|c| c.scale).unwrap_or_else(|| { let scale = c.and_then(|c| c.scale).unwrap_or_else(|| {
let size_mm = output.physical_properties().size; let size_mm = output.physical_properties().size;
let resolution = output.current_mode().unwrap().size; let resolution = output.current_mode().unwrap().size;
+2
View File
@@ -24,6 +24,8 @@ Outputs are matched by connector name (i.e. `eDP-1`, `HDMI-A-1`) which you can f
Usually, the built-in monitor in laptops will be called `eDP-1`. Usually, the built-in monitor in laptops will be called `eDP-1`.
Matching by output manufacturer and model is planned, but blocked on Smithay adopting libdisplay-info instead of edid-rs. Matching by output manufacturer and model is planned, but blocked on Smithay adopting libdisplay-info instead of edid-rs.
<sup>Since: 0.1.6</sup> The output name is case-insensitive.
### `off` ### `off`
This flag turns off that output entirely. This flag turns off that output entirely.