diff options
| author | Ivan Molodetskikh <yalterz@gmail.com> | 2023-09-19 16:46:13 +0400 |
|---|---|---|
| committer | Ivan Molodetskikh <yalterz@gmail.com> | 2023-09-19 16:46:13 +0400 |
| commit | 99b945c385250e24553d29bea36733b644a9024f (patch) | |
| tree | a720f808aa543063ff2e8f2a1b6e8c662031e8b9 /src | |
| parent | 361b34f460027b71669f7094a7e9b8eb35779698 (diff) | |
| download | niri-99b945c385250e24553d29bea36733b644a9024f.tar.gz niri-99b945c385250e24553d29bea36733b644a9024f.tar.bz2 niri-99b945c385250e24553d29bea36733b644a9024f.zip | |
Allow replacement of screencast and displayconfig dbus
This way the session can start with those dbus services registered, but
then for debugging they can be subsequently replaced anyway.
Diffstat (limited to 'src')
| -rw-r--r-- | src/niri.rs | 65 |
1 files changed, 40 insertions, 25 deletions
diff --git a/src/niri.rs b/src/niri.rs index 6bad55fc..651b9075 100644 --- a/src/niri.rs +++ b/src/niri.rs @@ -57,6 +57,7 @@ use smithay::wayland::shm::ShmState; use smithay::wayland::socket::ListeningSocketSource; use smithay::wayland::tablet_manager::TabletManagerState; use time::OffsetDateTime; +use zbus::fdo::RequestNameFlags; use crate::backend::{Backend, Tty, Winit}; use crate::config::Config; @@ -384,7 +385,7 @@ impl Niri { } // Set up zbus, make sure it happens before anything might want it. - let mut conn = zbus::blocking::ConnectionBuilder::session() + let conn = zbus::blocking::ConnectionBuilder::session() .unwrap() .name("org.gnome.Mutter.ServiceChannel") .unwrap() @@ -392,24 +393,31 @@ impl Niri { "/org/gnome/Mutter/ServiceChannel", ServiceChannel::new(display_handle.clone()), ) + .unwrap() + .build() .unwrap(); - if pipewire.is_some() && !config_.debug.screen_cast_in_non_session_instances { - conn = conn - .name("org.gnome.Mutter.ScreenCast") - .unwrap() - .serve_at("/org/gnome/Mutter/ScreenCast", screen_cast.clone()) - .unwrap() - .name("org.gnome.Mutter.DisplayConfig") - .unwrap() - .serve_at( + if pipewire.is_some() { + let server = conn.object_server(); + server + .at("/org/gnome/Mutter/ScreenCast", screen_cast.clone()) + .unwrap(); + server + .at( "/org/gnome/Mutter/DisplayConfig", DisplayConfig::new(backend.connectors()), ) .unwrap(); + + let flags = RequestNameFlags::AllowReplacement + | RequestNameFlags::ReplaceExisting + | RequestNameFlags::DoNotQueue; + conn.request_name_with_flags("org.gnome.Mutter.ScreenCast", flags) + .unwrap(); + conn.request_name_with_flags("org.gnome.Mutter.DisplayConfig", flags) + .unwrap(); } - let conn = conn.build().unwrap(); zbus_conn = Some(conn); // Notify systemd we're ready. @@ -443,21 +451,28 @@ impl Niri { } } } else if pipewire.is_some() && config_.debug.screen_cast_in_non_session_instances { - let conn = zbus::blocking::ConnectionBuilder::session() - .unwrap() - .name("org.gnome.Mutter.ScreenCast") - .unwrap() - .serve_at("/org/gnome/Mutter/ScreenCast", screen_cast.clone()) - .unwrap() - .name("org.gnome.Mutter.DisplayConfig") - .unwrap() - .serve_at( - "/org/gnome/Mutter/DisplayConfig", - DisplayConfig::new(backend.connectors()), - ) - .unwrap() - .build() + let conn = zbus::blocking::Connection::session().unwrap(); + { + let server = conn.object_server(); + server + .at("/org/gnome/Mutter/ScreenCast", screen_cast.clone()) + .unwrap(); + server + .at( + "/org/gnome/Mutter/DisplayConfig", + DisplayConfig::new(backend.connectors()), + ) + .unwrap(); + } + + let flags = RequestNameFlags::AllowReplacement + | RequestNameFlags::ReplaceExisting + | RequestNameFlags::DoNotQueue; + conn.request_name_with_flags("org.gnome.Mutter.ScreenCast", flags) + .unwrap(); + conn.request_name_with_flags("org.gnome.Mutter.DisplayConfig", flags) .unwrap(); + zbus_conn = Some(conn); } |
