aboutsummaryrefslogtreecommitdiff
path: root/src/dbus
diff options
context:
space:
mode:
authorIvan Molodetskikh <yalterz@gmail.com>2024-07-04 13:49:33 +0400
committerIvan Molodetskikh <yalterz@gmail.com>2024-07-05 07:35:01 +0300
commitd2087a2cd9f30e40778861666370df56b532af63 (patch)
tree9948e7eb0a723907a76e533e8604eee918940348 /src/dbus
parentc681198179c3cf5e2e74d3705db2b689671e13f4 (diff)
downloadniri-d2087a2cd9f30e40778861666370df56b532af63.tar.gz
niri-d2087a2cd9f30e40778861666370df56b532af63.tar.bz2
niri-d2087a2cd9f30e40778861666370df56b532af63.zip
Add output ID tracking
Diffstat (limited to 'src/dbus')
-rw-r--r--src/dbus/mutter_display_config.rs7
-rw-r--r--src/dbus/mutter_screen_cast.rs6
2 files changed, 9 insertions, 4 deletions
diff --git a/src/dbus/mutter_display_config.rs b/src/dbus/mutter_display_config.rs
index 783c2499..146174f8 100644
--- a/src/dbus/mutter_display_config.rs
+++ b/src/dbus/mutter_display_config.rs
@@ -57,11 +57,12 @@ impl DisplayConfig {
.ipc_outputs
.lock()
.unwrap()
- .iter()
+ .values()
// Take only enabled outputs.
- .filter(|(_, output)| output.current_mode.is_some() && output.logical.is_some())
- .map(|(c, output)| {
+ .filter(|output| output.current_mode.is_some() && output.logical.is_some())
+ .map(|output| {
// Loosely matches the check in Mutter.
+ let c = &output.name;
let is_laptop_panel = matches!(c.get(..4), Some("eDP-" | "LVDS" | "DSI-"));
// FIXME: use proper serial when we have libdisplay-info.
diff --git a/src/dbus/mutter_screen_cast.rs b/src/dbus/mutter_screen_cast.rs
index 4b3c2fdd..0aba084e 100644
--- a/src/dbus/mutter_screen_cast.rs
+++ b/src/dbus/mutter_screen_cast.rs
@@ -191,7 +191,11 @@ impl Session {
) -> fdo::Result<OwnedObjectPath> {
debug!(connector, ?properties, "record_monitor");
- let Some(output) = self.ipc_outputs.lock().unwrap().get(connector).cloned() else {
+ let output = {
+ let ipc_outputs = self.ipc_outputs.lock().unwrap();
+ ipc_outputs.values().find(|o| o.name == connector).cloned()
+ };
+ let Some(output) = output else {
return Err(fdo::Error::Failed("no such monitor".to_owned()));
};