diff options
| author | Ivan Molodetskikh <yalterz@gmail.com> | 2024-01-23 12:02:52 +0400 |
|---|---|---|
| committer | Ivan Molodetskikh <yalterz@gmail.com> | 2024-01-23 12:02:52 +0400 |
| commit | ab9706cb30c26dafe46c807f0cf073e594c84ef0 (patch) | |
| tree | d31171e10e37ae4b75e8a32a2e9b91bf8f3fbbd7 /src/niri.rs | |
| parent | 05f2a3709b3447ac4d362980b166c3351a7129b2 (diff) | |
| download | niri-ab9706cb30c26dafe46c807f0cf073e594c84ef0.tar.gz niri-ab9706cb30c26dafe46c807f0cf073e594c84ef0.tar.bz2 niri-ab9706cb30c26dafe46c807f0cf073e594c84ef0.zip | |
screencast: Emit MonitorsChanged
Diffstat (limited to 'src/niri.rs')
| -rw-r--r-- | src/niri.rs | 38 |
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 { |
