Struct wayland_protocols::xdg::toplevel_drag::v1::client::xdg_toplevel_drag_manager_v1::XdgToplevelDragManagerV1
source · pub struct XdgToplevelDragManagerV1 {
id: ObjectId,
version: u32,
data: Option<Arc<dyn ObjectData>>,
backend: WeakBackend,
}
Expand description
Move a window during a drag
This protocol enhances normal drag and drop with the ability to move a window at the same time. This allows having detachable parts of a window that when dragged out of it become a new window and can be dragged over an existing window to be reattached.
A typical workflow would be when the user starts dragging on top of a detachable part of a window, the client would create a wl_data_source and a xdg_toplevel_drag_v1 object and start the drag as normal via wl_data_device.start_drag. Once the client determines that the detachable window contents should be detached from the originating window, it creates a new xdg_toplevel with these contents and issues a xdg_toplevel_drag_v1.attach request before mapping it. From now on the new window is moved by the compositor during the drag as if the client called xdg_toplevel.move.
Dragging an existing window is similar. The client creates a xdg_toplevel_drag_v1 object and attaches the existing toplevel before starting the drag.
Clients use the existing drag and drop mechanism to detect when a window can be docked or undocked. If the client wants to snap a window into a parent window it should delete or unmap the dragged top-level. If the contents should be detached again it attaches a new toplevel as described above. If a drag operation is cancelled without being dropped, clients should revert to the previous state, deleting any newly created windows as appropriate. When a drag operation ends as indicated by wl_data_source.dnd_drop_performed the dragged toplevel window’s final position is determined as if a xdg_toplevel_move operation ended.
Warning! The protocol described in this file is currently in the testing phase. Backward compatible changes may be added together with the corresponding interface version bump. Backward incompatible changes can only be done by creating a new major version of the extension.
This interface has no events.
Fields§
§id: ObjectId
§version: u32
§data: Option<Arc<dyn ObjectData>>
§backend: WeakBackend
Implementations§
source§impl XdgToplevelDragManagerV1
impl XdgToplevelDragManagerV1
sourcepub fn destroy(&self)
pub fn destroy(&self)
destroy the xdg_toplevel_drag_manager_v1 object
Destroy this xdg_toplevel_drag_manager_v1 object. Other objects, including xdg_toplevel_drag_v1 objects created by this factory, are not affected by this request.
sourcepub fn get_xdg_toplevel_drag<U: Send + Sync + 'static, D: Dispatch<XdgToplevelDragV1, U> + 'static>(
&self,
data_source: &WlDataSource,
qh: &QueueHandle<D>,
udata: U,
) -> XdgToplevelDragV1
pub fn get_xdg_toplevel_drag<U: Send + Sync + 'static, D: Dispatch<XdgToplevelDragV1, U> + 'static>( &self, data_source: &WlDataSource, qh: &QueueHandle<D>, udata: U, ) -> XdgToplevelDragV1
get an xdg_toplevel_drag for a wl_data_source
Create an xdg_toplevel_drag for a drag and drop operation that is going to be started with data_source.
This request can only be made on sources used in drag-and-drop, so it must be performed before wl_data_device.start_drag. Attempting to use the source other than for drag-and-drop such as in wl_data_device.set_selection will raise an invalid_source error.
Destroying data_source while a toplevel is attached to the xdg_toplevel_drag is undefined.
Trait Implementations§
source§impl Borrow<ObjectId> for XdgToplevelDragManagerV1
impl Borrow<ObjectId> for XdgToplevelDragManagerV1
source§impl Clone for XdgToplevelDragManagerV1
impl Clone for XdgToplevelDragManagerV1
source§fn clone(&self) -> XdgToplevelDragManagerV1
fn clone(&self) -> XdgToplevelDragManagerV1
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moresource§impl Debug for XdgToplevelDragManagerV1
impl Debug for XdgToplevelDragManagerV1
source§impl Hash for XdgToplevelDragManagerV1
impl Hash for XdgToplevelDragManagerV1
source§impl PartialEq<Weak<XdgToplevelDragManagerV1>> for XdgToplevelDragManagerV1
impl PartialEq<Weak<XdgToplevelDragManagerV1>> for XdgToplevelDragManagerV1
source§impl PartialEq for XdgToplevelDragManagerV1
impl PartialEq for XdgToplevelDragManagerV1
source§fn eq(&self, other: &XdgToplevelDragManagerV1) -> bool
fn eq(&self, other: &XdgToplevelDragManagerV1) -> bool
self
and other
values to be equal, and is used
by ==
.source§impl Proxy for XdgToplevelDragManagerV1
impl Proxy for XdgToplevelDragManagerV1
source§fn data<U: Send + Sync + 'static>(&self) -> Option<&U>
fn data<U: Send + Sync + 'static>(&self) -> Option<&U>
source§fn object_data(&self) -> Option<&Arc<dyn ObjectData>>
fn object_data(&self) -> Option<&Arc<dyn ObjectData>>
source§fn backend(&self) -> &WeakBackend
fn backend(&self) -> &WeakBackend
source§fn send_request(&self, req: Self::Request<'_>) -> Result<(), InvalidId>
fn send_request(&self, req: Self::Request<'_>) -> Result<(), InvalidId>
source§fn send_constructor<I: Proxy>(
&self,
req: Self::Request<'_>,
data: Arc<dyn ObjectData>,
) -> Result<I, InvalidId>
fn send_constructor<I: Proxy>( &self, req: Self::Request<'_>, data: Arc<dyn ObjectData>, ) -> Result<I, InvalidId>
source§fn from_id(conn: &Connection, id: ObjectId) -> Result<Self, InvalidId>
fn from_id(conn: &Connection, id: ObjectId) -> Result<Self, InvalidId>
source§fn inert(backend: WeakBackend) -> Self
fn inert(backend: WeakBackend) -> Self
source§fn parse_event(
conn: &Connection,
msg: Message<ObjectId, OwnedFd>,
) -> Result<(Self, Self::Event), DispatchError>
fn parse_event( conn: &Connection, msg: Message<ObjectId, OwnedFd>, ) -> Result<(Self, Self::Event), DispatchError>
source§fn write_request<'a>(
&self,
conn: &Connection,
msg: Self::Request<'a>,
) -> Result<(Message<ObjectId, BorrowedFd<'a>>, Option<(&'static Interface, u32)>), InvalidId>
fn write_request<'a>( &self, conn: &Connection, msg: Self::Request<'a>, ) -> Result<(Message<ObjectId, BorrowedFd<'a>>, Option<(&'static Interface, u32)>), InvalidId>
impl Eq for XdgToplevelDragManagerV1
Auto Trait Implementations§
impl Freeze for XdgToplevelDragManagerV1
impl !RefUnwindSafe for XdgToplevelDragManagerV1
impl Send for XdgToplevelDragManagerV1
impl Sync for XdgToplevelDragManagerV1
impl Unpin for XdgToplevelDragManagerV1
impl !UnwindSafe for XdgToplevelDragManagerV1
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> 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.