use {
crate::client::Client,
crate::object::{NewObjectExt, ObjectRef, RequestReceiver},
crate::seat::Seat,
anyhow::Error,
wayland_server_protocol::{
WlDataDevice, WlDataDeviceManager, WlDataDeviceManagerRequest, WlDataDeviceRequest,
WlDataSource, WlDataSourceRequest,
},
};
pub struct DataDeviceManager;
impl DataDeviceManager {
pub fn new() -> Self {
DataDeviceManager
}
}
impl RequestReceiver<WlDataDeviceManager> for DataDeviceManager {
fn receive(
_this: ObjectRef<Self>,
request: WlDataDeviceManagerRequest,
client: &mut Client,
) -> Result<(), Error> {
match request {
WlDataDeviceManagerRequest::CreateDataSource { id } => {
id.implement(client, DataSource)?;
}
WlDataDeviceManagerRequest::GetDataDevice { id, seat } => {
id.implement(client, DataDevice(seat.into()))?;
}
}
Ok(())
}
}
struct DataSource;
impl RequestReceiver<WlDataSource> for DataSource {
fn receive(
this: ObjectRef<Self>,
request: WlDataSourceRequest,
client: &mut Client,
) -> Result<(), Error> {
match request {
WlDataSourceRequest::Destroy => {
client.delete_id(this.id())?;
}
WlDataSourceRequest::Offer { .. } => {}
WlDataSourceRequest::SetActions { .. } => {}
}
Ok(())
}
}
#[allow(dead_code)] struct DataDevice(ObjectRef<Seat>);
impl RequestReceiver<WlDataDevice> for DataDevice {
fn receive(
this: ObjectRef<Self>,
request: WlDataDeviceRequest,
client: &mut Client,
) -> Result<(), Error> {
match request {
WlDataDeviceRequest::Release => {
client.delete_id(this.id())?;
}
WlDataDeviceRequest::StartDrag { .. } => {}
WlDataDeviceRequest::SetSelection { .. } => {}
}
Ok(())
}
}