aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIvan Molodetskikh <yalterz@gmail.com>2023-09-19 16:46:13 +0400
committerIvan Molodetskikh <yalterz@gmail.com>2023-09-19 16:46:13 +0400
commit99b945c385250e24553d29bea36733b644a9024f (patch)
treea720f808aa543063ff2e8f2a1b6e8c662031e8b9
parent361b34f460027b71669f7094a7e9b8eb35779698 (diff)
downloadniri-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.
-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);
}