Skip to main content

X11Connection

Struct X11Connection 

Source
pub struct X11Connection { /* private fields */ }
Expand description

Our own connection to the X server, with atoms and an event pushback queue.

Not Sync: it holds a pushback buffer behind a RefCell and is used from a single thread (the per-window DnD thread, or transiently the main thread for the EWMH probe).

Implementations§

Source§

impl X11Connection

Source

pub fn open() -> Result<Self, X11Error>

Open a fresh connection to the display named by $DISPLAY.

Source

pub fn conn(&self) -> &RustConnection

Source

pub fn root(&self) -> Window

Source

pub fn atoms(&self) -> &Atoms

Source

pub fn flush(&self) -> Result<(), X11Error>

Source

pub fn get_property_full( &self, window: Window, property: Atom, type_: Atom, ) -> Result<Option<PropertyValue>, X11Error>

Read a whole property, following bytes_after until the server has no more to give.

A single GetProperty is capped by long_length; properties that exceed it (a long text/uri-list, a big _NET_SUPPORTED) come back truncated with bytes_after > 0. Reading only the first chunk is a classic source of “the last few files vanished” bugs.

Source

pub fn get_property_and_delete( &self, window: Window, property: Atom, ) -> Result<Option<PropertyValue>, X11Error>

Read a property and delete it in the same request — the ICCCM idiom for selection transfers. Deleting is what tells an INCR sender we are ready for the next chunk, so the read and the delete must be atomic.

Source

pub fn set_property32( &self, window: Window, property: Atom, type_: Atom, data: &[u32], ) -> Result<(), X11Error>

Write a 32-bit property.

Source

pub fn set_property8( &self, window: Window, property: Atom, type_: Atom, data: &[u8], ) -> Result<(), X11Error>

Write an 8-bit property.

Source

pub fn fetch_timestamp(&self, window: Window) -> Result<Timestamp, X11Error>

Obtain a real server timestamp.

The ICCCM-sanctioned trick: append zero bytes to a property on a window we own, which changes nothing but still makes the server emit a PropertyNotify stamped with the current time. CurrentTime is not a substitute — XDND and selection ownership both need a comparable timestamp so a stale request can be told from a fresh one.

window must have PROPERTY_CHANGE selected. Events seen while waiting are pushed back for the caller’s loop, in order.

Source

pub fn next_event(&self) -> Result<Event, X11Error>

Next event, draining anything Self::fetch_timestamp pushed back first. Blocks.

Source

pub fn poll_event(&self) -> Result<Option<Event>, X11Error>

Next event if one is already available, else None. Never blocks.

Source

pub fn send_client_message( &self, destination: Window, window_field: Window, type_: Atom, data: [u32; 5], mask: EventMask, ) -> Result<(), X11Error>

Send a 32-bit ClientMessage.

XDND and _NET_WM_MOVERESIZE both specify propagate = false. The event mask differs: XDND messages go to a specific client with an empty mask (the X protocol then delivers to that window’s creator), whereas root-window messages must carry the substructure masks so the window manager sees them.

Auto Trait Implementations§

Blanket Implementations§

Source§

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

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

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

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

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

Source§

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

Mutably borrows from an owned value. Read more
Source§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> Downcast for T
where T: Any,

Source§

fn into_any(self: Box<T>) -> Box<dyn Any>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
Source§

fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
Source§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &Any’s vtable from &Trait’s.
Source§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &mut Any’s vtable from &mut Trait’s.
Source§

impl<T> Downcast<T> for T

Source§

fn downcast(&self) -> &T

Source§

impl<T> From<T> for T

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 T
where U: From<T>,

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<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

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

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

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

Source§

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

The type returned in the event of a conversion error.
Source§

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

Performs the conversion.
Source§

impl<T> Upcast<T> for T

Source§

fn upcast(&self) -> Option<&T>

Source§

impl<T> WasmNotSend for T
where T: Send,

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