autocommit 2022-02-05 02:07:07 CET
This commit is contained in:
parent
89bfd2ffcd
commit
2d8b3a200e
21 changed files with 328 additions and 87 deletions
|
|
@ -6,7 +6,7 @@ use crate::ifs::wl_compositor::WlCompositorError;
|
|||
use crate::ifs::wl_data_device::WlDataDeviceError;
|
||||
use crate::ifs::wl_data_device_manager::WlDataDeviceManagerError;
|
||||
use crate::ifs::wl_data_offer::WlDataOfferError;
|
||||
use crate::ifs::wl_data_source::WlDataSourceError;
|
||||
use crate::ifs::wl_data_source::{WlDataSourceError, WlDataSourceId};
|
||||
use crate::ifs::wl_display::WlDisplayError;
|
||||
use crate::ifs::wl_drm::WlDrmError;
|
||||
use crate::ifs::wl_output::WlOutputError;
|
||||
|
|
@ -61,6 +61,8 @@ pub enum ClientError {
|
|||
SurfaceDoesNotExist(WlSurfaceId),
|
||||
#[error("There is no xdg_surface with id {0}")]
|
||||
XdgSurfaceDoesNotExist(XdgSurfaceId),
|
||||
#[error("There is no wl_data_source with id {0}")]
|
||||
WlDataSourceDoesNotExist(WlDataSourceId),
|
||||
#[error("There is no xdg_toplevel with id {0}")]
|
||||
XdgToplevelDoesNotExist(XdgToplevelId),
|
||||
#[error("There is no xdg_positioner with id {0}")]
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ use crate::ifs::wl_compositor::WlCompositorObj;
|
|||
use crate::ifs::wl_data_device::WlDataDevice;
|
||||
use crate::ifs::wl_data_device_manager::WlDataDeviceManagerObj;
|
||||
use crate::ifs::wl_data_offer::WlDataOffer;
|
||||
use crate::ifs::wl_data_source::WlDataSource;
|
||||
use crate::ifs::wl_data_source::{WlDataSource, WlDataSourceId};
|
||||
use crate::ifs::wl_display::WlDisplay;
|
||||
use crate::ifs::wl_drm::WlDrmObj;
|
||||
use crate::ifs::wl_output::WlOutputObj;
|
||||
|
|
@ -42,6 +42,7 @@ use crate::ErrorFmt;
|
|||
use ahash::AHashMap;
|
||||
pub use error::ClientError;
|
||||
use std::cell::{Cell, RefCell, RefMut};
|
||||
use std::error::Error;
|
||||
use std::fmt::{Debug, Display, Formatter};
|
||||
use std::mem;
|
||||
use std::rc::Rc;
|
||||
|
|
@ -273,6 +274,22 @@ impl Client {
|
|||
Ok(res)
|
||||
}
|
||||
|
||||
pub fn error(&self, message: impl Error) {
|
||||
let msg = ErrorFmt(message).to_string();
|
||||
log::error!("Client {}: A fatal error occurred: {}", self.id.0, msg,);
|
||||
match self.display() {
|
||||
Ok(d) => self.fatal_event(d.implementation_error(msg)),
|
||||
Err(e) => {
|
||||
log::error!(
|
||||
"Could not retrieve display of client {}: {}",
|
||||
self.id,
|
||||
ErrorFmt(e),
|
||||
);
|
||||
self.state.clients.kill(self.id);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub fn protocol_error(&self, obj: &dyn Object, code: u32, message: String) {
|
||||
if let Ok(d) = self.display() {
|
||||
self.fatal_event(d.error(obj.id(), code, message));
|
||||
|
|
@ -343,6 +360,13 @@ impl Client {
|
|||
}
|
||||
}
|
||||
|
||||
pub fn get_wl_data_source(&self, id: WlDataSourceId) -> Result<Rc<WlDataSource>, ClientError> {
|
||||
match self.objects.wl_data_source.get(&id) {
|
||||
Some(r) => Ok(r),
|
||||
_ => Err(ClientError::WlDataSourceDoesNotExist(id)),
|
||||
}
|
||||
}
|
||||
|
||||
pub fn get_xdg_toplevel(&self, id: XdgToplevelId) -> Result<Rc<XdgToplevel>, ClientError> {
|
||||
match self.objects.xdg_toplevel.get(&id) {
|
||||
Some(r) => Ok(r),
|
||||
|
|
@ -440,7 +464,6 @@ simple_add_obj!(WlTouch);
|
|||
simple_add_obj!(WlDataDeviceManagerObj);
|
||||
simple_add_obj!(WlDataDevice);
|
||||
simple_add_obj!(WlDataOffer);
|
||||
simple_add_obj!(WlDataSource);
|
||||
simple_add_obj!(ZwpLinuxDmabufV1Obj);
|
||||
simple_add_obj!(ZwpLinuxBufferParamsV1);
|
||||
simple_add_obj!(WlDrmObj);
|
||||
|
|
@ -470,3 +493,4 @@ dedicated_add_obj!(WlBuffer, buffers);
|
|||
dedicated_add_obj!(WlSeatObj, seats);
|
||||
dedicated_add_obj!(XdgPositioner, xdg_positioners);
|
||||
dedicated_add_obj!(XdgToplevel, xdg_toplevel);
|
||||
dedicated_add_obj!(WlDataSource, wl_data_source);
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
use crate::client::{Client, ClientError};
|
||||
use crate::ifs::wl_buffer::{WlBuffer, WlBufferId};
|
||||
use crate::ifs::wl_data_source::{WlDataSource, WlDataSourceId};
|
||||
use crate::ifs::wl_display::WlDisplay;
|
||||
use crate::ifs::wl_region::{WlRegion, WlRegionId};
|
||||
use crate::ifs::wl_registry::{WlRegistry, WlRegistryId};
|
||||
|
|
@ -25,6 +26,7 @@ pub struct Objects {
|
|||
pub surfaces: CopyHashMap<WlSurfaceId, Rc<WlSurface>>,
|
||||
pub xdg_surfaces: CopyHashMap<XdgSurfaceId, Rc<XdgSurface>>,
|
||||
pub xdg_toplevel: CopyHashMap<XdgToplevelId, Rc<XdgToplevel>>,
|
||||
pub wl_data_source: CopyHashMap<WlDataSourceId, Rc<WlDataSource>>,
|
||||
pub xdg_positioners: CopyHashMap<XdgPositionerId, Rc<XdgPositioner>>,
|
||||
pub regions: CopyHashMap<WlRegionId, Rc<WlRegion>>,
|
||||
pub buffers: CopyHashMap<WlBufferId, Rc<WlBuffer>>,
|
||||
|
|
@ -45,6 +47,7 @@ impl Objects {
|
|||
surfaces: Default::default(),
|
||||
xdg_surfaces: Default::default(),
|
||||
xdg_toplevel: Default::default(),
|
||||
wl_data_source: Default::default(),
|
||||
xdg_positioners: Default::default(),
|
||||
regions: Default::default(),
|
||||
buffers: Default::default(),
|
||||
|
|
@ -141,8 +144,9 @@ impl Objects {
|
|||
return Err(ClientError::ServerIdOutOfBounds);
|
||||
}
|
||||
ids[pos] |= 1 << seg_offset;
|
||||
} else {
|
||||
client_data.event(client_data.display()?.delete_id(id));
|
||||
}
|
||||
client_data.event(client_data.display()?.delete_id(id));
|
||||
Ok(())
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue