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
impl X11Connection
Sourcepub fn open() -> Result<Self, X11Error>
pub fn open() -> Result<Self, X11Error>
Open a fresh connection to the display named by $DISPLAY.
pub fn conn(&self) -> &RustConnection
pub fn root(&self) -> Window
pub fn atoms(&self) -> &Atoms
pub fn flush(&self) -> Result<(), X11Error>
Sourcepub fn get_property_full(
&self,
window: Window,
property: Atom,
type_: Atom,
) -> Result<Option<PropertyValue>, X11Error>
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.
Sourcepub fn get_property_and_delete(
&self,
window: Window,
property: Atom,
) -> Result<Option<PropertyValue>, X11Error>
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.
Sourcepub fn set_property32(
&self,
window: Window,
property: Atom,
type_: Atom,
data: &[u32],
) -> Result<(), X11Error>
pub fn set_property32( &self, window: Window, property: Atom, type_: Atom, data: &[u32], ) -> Result<(), X11Error>
Write a 32-bit property.
Sourcepub fn set_property8(
&self,
window: Window,
property: Atom,
type_: Atom,
data: &[u8],
) -> Result<(), X11Error>
pub fn set_property8( &self, window: Window, property: Atom, type_: Atom, data: &[u8], ) -> Result<(), X11Error>
Write an 8-bit property.
Sourcepub fn fetch_timestamp(&self, window: Window) -> Result<Timestamp, X11Error>
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.
Sourcepub fn next_event(&self) -> Result<Event, X11Error>
pub fn next_event(&self) -> Result<Event, X11Error>
Next event, draining anything Self::fetch_timestamp pushed back
first. Blocks.
Sourcepub fn poll_event(&self) -> Result<Option<Event>, X11Error>
pub fn poll_event(&self) -> Result<Option<Event>, X11Error>
Next event if one is already available, else None. Never blocks.
Sourcepub fn send_client_message(
&self,
destination: Window,
window_field: Window,
type_: Atom,
data: [u32; 5],
mask: EventMask,
) -> Result<(), X11Error>
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§
impl !Freeze for X11Connection
impl !RefUnwindSafe for X11Connection
impl !Sync for X11Connection
impl Send for X11Connection
impl Unpin for X11Connection
impl UnsafeUnpin for X11Connection
impl UnwindSafe for X11Connection
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
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
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>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
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)
fn as_any(&self) -> &(dyn Any + 'static)
&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)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.