aboutsummaryrefslogtreecommitdiff
path: root/src
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 /src
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.
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);
}