aboutsummaryrefslogtreecommitdiff
path: root/src/niri.rs
diff options
context:
space:
mode:
authorIvan Molodetskikh <yalterz@gmail.com>2024-01-23 12:02:52 +0400
committerIvan Molodetskikh <yalterz@gmail.com>2024-01-23 12:02:52 +0400
commitab9706cb30c26dafe46c807f0cf073e594c84ef0 (patch)
treed31171e10e37ae4b75e8a32a2e9b91bf8f3fbbd7 /src/niri.rs
parent05f2a3709b3447ac4d362980b166c3351a7129b2 (diff)
downloadniri-ab9706cb30c26dafe46c807f0cf073e594c84ef0.tar.gz
niri-ab9706cb30c26dafe46c807f0cf073e594c84ef0.tar.bz2
niri-ab9706cb30c26dafe46c807f0cf073e594c84ef0.zip
screencast: Emit MonitorsChanged
Diffstat (limited to 'src/niri.rs')
-rw-r--r--src/niri.rs38
1 files changed, 38 insertions, 0 deletions
diff --git a/src/niri.rs b/src/niri.rs
index 3e22a7ab..e275c1ae 100644
--- a/src/niri.rs
+++ b/src/niri.rs
@@ -2759,6 +2759,44 @@ impl Niri {
constraint.activate();
});
}
+
+ #[cfg(feature = "dbus")]
+ pub fn on_enabled_outputs_changed(&self) {
+ let _span = tracy_client::span!("Niri::on_enabled_outputs_changed");
+
+ let Some(dbus) = &self.dbus else { return };
+ let Some(conn_display_config) = dbus.conn_display_config.clone() else {
+ return;
+ };
+
+ let res = thread::Builder::new()
+ .name("DisplayConfig MonitorsChanged Emitter".to_owned())
+ .spawn(move || {
+ use crate::dbus::mutter_display_config::DisplayConfig;
+ let _span = tracy_client::span!("MonitorsChanged");
+ let iface = match conn_display_config
+ .object_server()
+ .interface::<_, DisplayConfig>("/org/gnome/Mutter/DisplayConfig")
+ {
+ Ok(iface) => iface,
+ Err(err) => {
+ warn!("error getting DisplayConfig interface: {err:?}");
+ return;
+ }
+ };
+
+ async_io::block_on(async move {
+ if let Err(err) = DisplayConfig::monitors_changed(iface.signal_context()).await
+ {
+ warn!("error emitting MonitorsChanged: {err:?}");
+ }
+ });
+ });
+
+ if let Err(err) = res {
+ warn!("error spawning a thread to send MonitorsChanged: {err:?}");
+ }
+ }
}
pub struct ClientState {