pub struct MutterState { /* private fields */ }Expand description
Shared mutter-backend state consumed by waydriver-input-mutter and
waydriver-capture-mutter.
Invariant: while any Arc<MutterState> exists, the underlying D-Bus
connection and the mutter child process must remain alive. See the
module docs for details.
Fields are private — all access goes through the accessor methods
below. Sibling crates (waydriver-input-mutter,
waydriver-capture-mutter) that previously read fields directly
now call state.conn(), state.rd_session_path(), etc. The
shape of the underlying storage (e.g. how active_stream_path is
guarded) is therefore an implementation detail that can change
without breaking those callers — the contract lives entirely in
the method signatures.
Implementations§
Source§impl MutterState
impl MutterState
Sourcepub fn conn(&self) -> &Connection
pub fn conn(&self) -> &Connection
Persistent connection to mutter’s private D-Bus.
Both sibling backends (waydriver-input-mutter,
waydriver-capture-mutter) issue all their RemoteDesktop and
ScreenCast method calls through this connection.
Sourcepub fn rd_session_path(&self) -> &str
pub fn rd_session_path(&self) -> &str
RemoteDesktop session object path. Used by
waydriver-input-mutter as the path argument on every
pointer / keyboard Notify* D-Bus call.
Sourcepub fn rd_session_id(&self) -> &str
pub fn rd_session_id(&self) -> &str
RemoteDesktop session id, read from the SessionId property on
the RD session. waydriver-capture-mutter passes this as the
remote-desktop-session-id option to
ScreenCast.CreateSession so mutter links the two; the link is
required for NotifyPointerMotionAbsolute to be accepted.
Sourcepub fn runtime_dir(&self) -> &Path
pub fn runtime_dir(&self) -> &Path
Per-session XDG_RUNTIME_DIR. waydriver-capture-mutter joins
this with pipewire-0 to locate the PipeWire socket.
Sourcepub fn rd_started_lock(&self) -> Result<MutexGuard<'_, bool>>
pub fn rd_started_lock(&self) -> Result<MutexGuard<'_, bool>>
Lock the “RD-started” flag.
Acquires the underlying mutex and returns the guard so the
caller can perform a check-and-set under one critical section
(the capture backend defers RD.Session.Start until the first
linked ScreenCast.CreateSession succeeds — that’s a load,
some D-Bus work, and a store; splitting the read and write
would race). Error::Process if the mutex is poisoned.
Sourcepub fn active_stream_path_lock(&self) -> Result<MutexGuard<'_, Option<String>>>
pub fn active_stream_path_lock(&self) -> Result<MutexGuard<'_, Option<String>>>
Lock the active ScreenCast Stream object path.
Set by waydriver-capture-mutter in start_stream, cleared in
stop_stream. waydriver-input-mutter reads it to route
NotifyPointerMotionAbsolute at the correct monitor. None
inside the guard means no stream is open — absolute pointer
motion will error.
Auto Trait Implementations§
impl Freeze for MutterState
impl !RefUnwindSafe for MutterState
impl Send for MutterState
impl Sync for MutterState
impl Unpin for MutterState
impl UnsafeUnpin for MutterState
impl !UnwindSafe for MutterState
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more