aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/niri.rs65
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);
}