1
0
Fork 0
forked from wry/wry

autocommit 2022-02-11 02:28:11 CET

This commit is contained in:
Julian Orth 2022-02-11 02:28:11 +01:00
parent 83c3fb99f9
commit 9b8e1ac29f
63 changed files with 690 additions and 122 deletions

View file

@ -47,7 +47,7 @@ pub trait Vtable: Sized {
dd: &Rc<Self::Device>,
data: OfferData<Self>,
id: ObjectId,
) -> Self::Offer;
) -> Rc<Self::Offer>;
fn send_selection(dd: &Self::Device, offer: Self::OfferId);
fn send_cancelled(source: &Self::Source);
fn get_offer_id(offer: &Self::Offer) -> Self::OfferId;
@ -215,7 +215,7 @@ pub fn offer_source_to<T: Vtable>(src: &Rc<T::Source>, client: &Rc<Client>) {
client: client.clone(),
shared: shared.clone(),
};
let offer = Rc::new(T::create_offer(client, dd, offer_data, id));
let offer = T::create_offer(client, dd, offer_data, id);
data.offers.insert(id.into(), offer.clone());
let mt = data.mime_types.borrow_mut();
T::send_offer(dd, &offer);

View file

@ -7,6 +7,8 @@ use crate::ifs::ipc::{
break_device_loops, destroy_device, DeviceData, OfferData, Role, SourceData, Vtable,
};
use crate::ifs::wl_seat::{WlSeat, WlSeatError, WlSeatGlobal};
use crate::ifs::wl_surface::{SurfaceRole, WlSurfaceError};
use crate::leaks::Tracker;
use crate::object::{Object, ObjectId};
use crate::utils::buffd::MsgParser;
use crate::utils::buffd::MsgParserError;
@ -15,7 +17,6 @@ use crate::wire::{WlDataDeviceId, WlDataOfferId, WlSurfaceId};
use std::rc::Rc;
use thiserror::Error;
use uapi::OwnedFd;
use crate::ifs::wl_surface::{SurfaceRole, WlSurfaceError};
#[allow(dead_code)]
const ROLE: u32 = 0;
@ -25,6 +26,7 @@ pub struct WlDataDevice {
pub manager: Rc<WlDataDeviceManager>,
pub seat: Rc<WlSeat>,
pub data: DeviceData<WlDataDevice>,
pub tracker: Tracker<Self>,
}
impl WlDataDevice {
@ -34,6 +36,7 @@ impl WlDataDevice {
manager: manager.clone(),
seat: seat.clone(),
data: Default::default(),
tracker: Default::default(),
}
}
@ -153,13 +156,16 @@ impl Vtable for WlDataDevice {
device: &Rc<WlDataDevice>,
offer_data: OfferData<Self>,
id: ObjectId,
) -> Self::Offer {
WlDataOffer {
) -> Rc<Self::Offer> {
let rc = Rc::new(WlDataOffer {
id: id.into(),
client: client.clone(),
device: device.clone(),
data: offer_data,
}
tracker: Default::default(),
});
track!(client, rc);
rc
}
fn send_selection(dd: &Self::Device, offer: Self::OfferId) {

View file

@ -2,6 +2,7 @@ use crate::client::{Client, ClientError};
use crate::globals::{Global, GlobalName};
use crate::ifs::ipc::wl_data_device::WlDataDevice;
use crate::ifs::ipc::wl_data_source::WlDataSource;
use crate::leaks::Tracker;
use crate::object::Object;
use crate::utils::buffd::MsgParser;
use crate::utils::buffd::MsgParserError;
@ -27,6 +28,7 @@ pub struct WlDataDeviceManager {
pub id: WlDataDeviceManagerId,
pub client: Rc<Client>,
pub version: u32,
tracker: Tracker<Self>,
}
impl WlDataDeviceManagerGlobal {
@ -44,7 +46,9 @@ impl WlDataDeviceManagerGlobal {
id,
client: client.clone(),
version,
tracker: Default::default(),
});
track!(client, obj);
client.add_client_obj(&obj)?;
Ok(())
}
@ -54,6 +58,7 @@ impl WlDataDeviceManager {
fn create_data_source(&self, parser: MsgParser<'_, '_>) -> Result<(), CreateDataSourceError> {
let req: CreateDataSource = self.client.parse(self, parser)?;
let res = Rc::new(WlDataSource::new(req.id, &self.client));
track!(self.client, res);
self.client.add_client_obj(&res)?;
Ok(())
}
@ -65,6 +70,7 @@ impl WlDataDeviceManager {
let req: GetDataDevice = self.client.parse(&**self, parser)?;
let seat = self.client.lookup(req.seat)?;
let dev = Rc::new(WlDataDevice::new(req.id, self, &seat));
track!(self.client, dev);
seat.add_data_device(&dev);
self.client.add_client_obj(&dev)?;
Ok(())

View file

@ -5,6 +5,7 @@ use crate::ifs::ipc::{
break_offer_loops, destroy_offer, receive, OfferData, Role, OFFER_STATE_ACCEPTED,
OFFER_STATE_DROPPED, OFFER_STATE_FINISHED, SOURCE_STATE_FINISHED,
};
use crate::leaks::Tracker;
use crate::object::Object;
use crate::utils::bitflags::BitflagsExt;
use crate::utils::buffd::MsgParser;
@ -28,6 +29,7 @@ pub struct WlDataOffer {
pub client: Rc<Client>,
pub device: Rc<WlDataDevice>,
pub data: OfferData<WlDataDevice>,
pub tracker: Tracker<Self>,
}
impl WlDataOffer {

View file

@ -6,6 +6,7 @@ use crate::ifs::ipc::{
add_mime_type, break_source_loops, cancel_offers, destroy_source, SharedState, SourceData,
OFFER_STATE_ACCEPTED, OFFER_STATE_DROPPED,
};
use crate::leaks::Tracker;
use crate::object::Object;
use crate::utils::bitflags::BitflagsExt;
use crate::utils::buffd::MsgParser;
@ -24,12 +25,14 @@ const INVALID_SOURCE: u32 = 1;
pub struct WlDataSource {
pub id: WlDataSourceId,
pub data: SourceData<WlDataDevice>,
pub tracker: Tracker<Self>,
}
impl WlDataSource {
pub fn new(id: WlDataSourceId, client: &Rc<Client>) -> Self {
Self {
id,
tracker: Default::default(),
data: SourceData::new(client),
}
}

View file

@ -2,6 +2,7 @@ use crate::client::{Client, ClientError};
use crate::globals::{Global, GlobalName};
use crate::ifs::ipc::zwp_primary_selection_device_v1::ZwpPrimarySelectionDeviceV1;
use crate::ifs::ipc::zwp_primary_selection_source_v1::ZwpPrimarySelectionSourceV1;
use crate::leaks::Tracker;
use crate::object::Object;
use crate::utils::buffd::MsgParser;
use crate::utils::buffd::MsgParserError;
@ -18,6 +19,7 @@ pub struct ZwpPrimarySelectionDeviceManagerV1 {
pub id: ZwpPrimarySelectionDeviceManagerV1Id,
pub client: Rc<Client>,
pub version: u32,
pub tracker: Tracker<Self>,
}
impl ZwpPrimarySelectionDeviceManagerV1Global {
@ -35,7 +37,9 @@ impl ZwpPrimarySelectionDeviceManagerV1Global {
id,
client: client.clone(),
version,
tracker: Default::default(),
});
track!(client, obj);
client.add_client_obj(&obj)?;
Ok(())
}
@ -45,6 +49,7 @@ impl ZwpPrimarySelectionDeviceManagerV1 {
fn create_source(&self, parser: MsgParser<'_, '_>) -> Result<(), CreateSourceError> {
let req: CreateSource = self.client.parse(self, parser)?;
let res = Rc::new(ZwpPrimarySelectionSourceV1::new(req.id, &self.client));
track!(self.client, res);
self.client.add_client_obj(&res)?;
Ok(())
}
@ -53,6 +58,7 @@ impl ZwpPrimarySelectionDeviceManagerV1 {
let req: GetDevice = self.client.parse(&**self, parser)?;
let seat = self.client.lookup(req.seat)?;
let dev = Rc::new(ZwpPrimarySelectionDeviceV1::new(req.id, self, &seat));
track!(self.client, dev);
seat.add_primary_selection_device(&dev);
self.client.add_client_obj(&dev)?;
Ok(())

View file

@ -6,6 +6,7 @@ use crate::ifs::ipc::{
break_device_loops, destroy_device, DeviceData, OfferData, Role, SourceData, Vtable,
};
use crate::ifs::wl_seat::{WlSeat, WlSeatError, WlSeatGlobal};
use crate::leaks::Tracker;
use crate::object::{Object, ObjectId};
use crate::utils::buffd::{MsgParser, MsgParserError};
use crate::wire::zwp_primary_selection_device_v1::*;
@ -19,6 +20,7 @@ pub struct ZwpPrimarySelectionDeviceV1 {
pub manager: Rc<ZwpPrimarySelectionDeviceManagerV1>,
seat: Rc<WlSeat>,
data: DeviceData<Self>,
pub tracker: Tracker<Self>,
}
impl ZwpPrimarySelectionDeviceV1 {
@ -32,6 +34,7 @@ impl ZwpPrimarySelectionDeviceV1 {
manager: manager.clone(),
seat: seat.clone(),
data: DeviceData::default(),
tracker: Default::default(),
}
}
@ -104,12 +107,15 @@ impl Vtable for ZwpPrimarySelectionDeviceV1 {
_device: &Rc<ZwpPrimarySelectionDeviceV1>,
offer_data: OfferData<Self>,
id: ObjectId,
) -> Self::Offer {
ZwpPrimarySelectionOfferV1 {
) -> Rc<Self::Offer> {
let rc = Rc::new(ZwpPrimarySelectionOfferV1 {
id: id.into(),
client: client.clone(),
offer_data,
}
tracker: Default::default(),
});
track!(client, rc);
rc
}
fn send_selection(dd: &Self::Device, offer: Self::OfferId) {

View file

@ -1,6 +1,7 @@
use crate::client::{Client, ClientError};
use crate::ifs::ipc::zwp_primary_selection_device_v1::ZwpPrimarySelectionDeviceV1;
use crate::ifs::ipc::{break_offer_loops, destroy_offer, receive, OfferData};
use crate::leaks::Tracker;
use crate::object::Object;
use crate::utils::buffd::{MsgParser, MsgParserError};
use crate::wire::zwp_primary_selection_offer_v1::*;
@ -12,6 +13,7 @@ pub struct ZwpPrimarySelectionOfferV1 {
pub id: ZwpPrimarySelectionOfferV1Id,
pub client: Rc<Client>,
pub offer_data: OfferData<ZwpPrimarySelectionDeviceV1>,
pub tracker: Tracker<Self>,
}
impl ZwpPrimarySelectionOfferV1 {

View file

@ -1,6 +1,7 @@
use crate::client::{Client, ClientError};
use crate::ifs::ipc::zwp_primary_selection_device_v1::ZwpPrimarySelectionDeviceV1;
use crate::ifs::ipc::{add_mime_type, break_source_loops, destroy_source, SourceData};
use crate::leaks::Tracker;
use crate::object::Object;
use crate::utils::buffd::{MsgParser, MsgParserError};
use crate::wire::zwp_primary_selection_source_v1::*;
@ -12,6 +13,7 @@ use uapi::OwnedFd;
pub struct ZwpPrimarySelectionSourceV1 {
pub id: ZwpPrimarySelectionSourceV1Id,
pub data: SourceData<ZwpPrimarySelectionDeviceV1>,
pub tracker: Tracker<Self>,
}
impl ZwpPrimarySelectionSourceV1 {
@ -19,6 +21,7 @@ impl ZwpPrimarySelectionSourceV1 {
Self {
id,
data: SourceData::new(client),
tracker: Default::default(),
}
}