pub struct Subsurface<S: Shell> { /* private fields */ }
Expand description

The wl_subsurface role.

Note about cache and pending states

A surface normally has a pending and a current state. Changes are applied to the pending state first, then commited to the current state when wl_surface.commit is called.

Subsurfaces has one more state - the cached state. This state exists if the subsurface is in synchronized mode. In sync mode, commit applies pending state to a cached state, and the cached state is applied to current state when the parent calls commit, if the partent is desynced; otherwise the cached state becomes part of the parent’s cached state.

We can see this as a tree of surface states, rooted at a “top-level” surface, such as a surface with the xdg_toplevel role. The root’s current state references the children’s current states, and the children’s current states in turn reference the grand-children’s, so on and so forth. When a synced child commits, its current state updates, but it doesn’t update its parent’s reference to its current state. So the parent still references the previous state, until the parent also commits.

A complication is when a child is destroyed, either by destroying the surface or deactivating its role, it’s immediately removed, without going through the pending or the cached state. We can detect this by checking if the role object is active, while going through the tree of surfaces.

Implementations§

source§

impl<S: Shell> Subsurface<S>

source

pub fn attach( parent: Rc<Surface<S>>, surface: Rc<Surface<S>>, shell: &mut S ) -> bool

Attach a surface to a parent surface, and add the subsurface role to id.

source

pub fn parent(&self) -> &Weak<Surface<S>>

Returns a weak reference to the parent surface.

Trait Implementations§

source§

impl<S: Shell> Clone for Subsurface<S>

source§

fn clone(&self) -> Self

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl<S> Debug for Subsurface<S>where S: Debug + Shell,

source§

fn fmt(&self, __f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<S: Shell> Role<S> for Subsurface<S>

source§

fn name(&self) -> &'static str

The name of the interface of this role.
source§

fn is_active(&self) -> bool

Returns true if the role is active. Read more
source§

fn deactivate(&mut self, shell: &mut S)

Deactivate the role.
source§

fn provide<'a>(&'a self, demand: &mut Demand<'a>)

Provides type based access to member variables of this role.
source§

fn provide_mut<'a>(&'a mut self, demand: &mut Demand<'a>)

Provides type based access to member variables of this role.
source§

fn post_commit(&mut self, shell: &mut S, surface: &Surface<S>)

Called after the pending state becomes the current state, in Surface::commit
source§

fn pre_commit( &mut self, _shell: &mut S, _surfacee: &Surface<S> ) -> Result<(), &'static str>

Called before the pending state becomes the current state, in Surface::commit. If an error is returned, the commit will be stopped.

Auto Trait Implementations§

§

impl<S> !RefUnwindSafe for Subsurface<S>

§

impl<S> !Send for Subsurface<S>

§

impl<S> !Sync for Subsurface<S>

§

impl<S> Unpin for Subsurface<S>where <S as Shell>::Token: Unpin,

§

impl<S> !UnwindSafe for Subsurface<S>

Blanket Implementations§

source§

impl<T> Any for Twhere T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Az for T

source§

fn az<Dst>(self) -> Dstwhere T: Cast<Dst>,

Casts the value.
source§

impl<T> Borrow<T> for Twhere T: ?Sized,

const: unstable · source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere T: ?Sized,

const: unstable · source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<Src, Dst> CastFrom<Src> for Dstwhere Src: Cast<Dst>,

source§

fn cast_from(src: Src) -> Dst

Casts the value.
source§

impl<T> CheckedAs for T

source§

fn checked_as<Dst>(self) -> Option<Dst>where T: CheckedCast<Dst>,

Casts the value.
source§

impl<Src, Dst> CheckedCastFrom<Src> for Dstwhere Src: CheckedCast<Dst>,

source§

fn checked_cast_from(src: Src) -> Option<Dst>

Casts the value.
source§

impl<T> DynClone for Twhere T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

source§

impl<T> From<T> for T

const: unstable · source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere U: From<T>,

const: unstable · source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<Src, Dst> LosslessTryInto<Dst> for Srcwhere Dst: LosslessTryFrom<Src>,

source§

fn lossless_try_into(self) -> Option<Dst>

Performs the conversion.
source§

impl<Src, Dst> LossyInto<Dst> for Srcwhere Dst: LossyFrom<Src>,

source§

fn lossy_into(self) -> Dst

Performs the conversion.
source§

impl<T> OverflowingAs for T

source§

fn overflowing_as<Dst>(self) -> (Dst, bool)where T: OverflowingCast<Dst>,

Casts the value.
source§

impl<Src, Dst> OverflowingCastFrom<Src> for Dstwhere Src: OverflowingCast<Dst>,

source§

fn overflowing_cast_from(src: Src) -> (Dst, bool)

Casts the value.
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
source§

impl<T> SaturatingAs for T

source§

fn saturating_as<Dst>(self) -> Dstwhere T: SaturatingCast<Dst>,

Casts the value.
source§

impl<Src, Dst> SaturatingCastFrom<Src> for Dstwhere Src: SaturatingCast<Dst>,

source§

fn saturating_cast_from(src: Src) -> Dst

Casts the value.
source§

impl<T> ToOwned for Twhere T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T, U> TryFrom<U> for Twhere U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
const: unstable · source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
const: unstable · source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<T> UnwrappedAs for T

source§

fn unwrapped_as<Dst>(self) -> Dstwhere T: UnwrappedCast<Dst>,

Casts the value.
source§

impl<Src, Dst> UnwrappedCastFrom<Src> for Dstwhere Src: UnwrappedCast<Dst>,

source§

fn unwrapped_cast_from(src: Src) -> Dst

Casts the value.
source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
source§

impl<T> WrappingAs for T

source§

fn wrapping_as<Dst>(self) -> Dstwhere T: WrappingCast<Dst>,

Casts the value.
source§

impl<Src, Dst> WrappingCastFrom<Src> for Dstwhere Src: WrappingCast<Dst>,

source§

fn wrapping_cast_from(src: Src) -> Dst

Casts the value.