From 3336f1ab6a4133c2036a701674f0edf679cd58f4 Mon Sep 17 00:00:00 2001 From: Julian Orth Date: Sat, 8 Jan 2022 19:02:11 +0100 Subject: [PATCH] autocommit 2022-01-08 19:02:10 CET --- Cargo.toml | 1 - build.rs | 2 +- src/async_engine.rs | 6 +-- src/backends/xorg/mod.rs | 4 +- src/client/mod.rs | 25 ++++++------ src/client/tasks.rs | 16 ++++---- src/clientmem.rs | 4 +- src/globals.rs | 13 +++++-- src/ifs/mod.rs | 2 +- src/ifs/wl_buffer/mod.rs | 1 + src/ifs/wl_data_device/mod.rs | 3 +- src/ifs/wl_data_device/types.rs | 2 +- src/ifs/wl_data_device_manager/mod.rs | 16 +++++--- src/ifs/wl_data_device_manager/types.rs | 2 +- src/ifs/wl_data_offer/mod.rs | 12 ++++-- src/ifs/wl_data_offer/types.rs | 36 +++++++++-------- src/ifs/wl_data_source/mod.rs | 6 ++- src/ifs/wl_display/mod.rs | 5 ++- src/ifs/wl_output/mod.rs | 39 ++++++++++++------- src/ifs/wl_seat/mod.rs | 14 +++---- src/ifs/wl_seat/wl_keyboard/mod.rs | 9 +++-- src/ifs/wl_seat/wl_pointer/mod.rs | 15 ++++--- src/ifs/wl_seat/wl_touch/mod.rs | 21 ++++++---- src/ifs/wl_subcompositor/mod.rs | 3 +- src/ifs/wl_surface/mod.rs | 15 ++++--- src/ifs/wl_surface/wl_subsurface/mod.rs | 5 ++- src/ifs/wl_surface/xdg_surface/mod.rs | 17 ++++---- .../wl_surface/xdg_surface/xdg_popup/mod.rs | 3 +- .../xdg_surface/xdg_toplevel/mod.rs | 24 ++++++++---- src/ifs/xdg_positioner/mod.rs | 2 +- src/ifs/xdg_wm_base/mod.rs | 15 ++++--- src/main.rs | 13 +++++-- src/pixman/mod.rs | 2 + src/utils/buffd/parser.rs | 2 +- src/utils/errorfmt.rs | 21 ++++++++++ src/utils/mod.rs | 1 + src/wheel.rs | 2 +- 37 files changed, 243 insertions(+), 136 deletions(-) create mode 100644 src/utils/errorfmt.rs diff --git a/Cargo.toml b/Cargo.toml index 2766e011..ad750985 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -12,7 +12,6 @@ panic = "abort" [dependencies] uapi = "0.2.4" thiserror = "1.0.30" -anyhow = "1.0.52" ahash = "0.7.6" log = "0.4.14" env_logger = "0.9.0" diff --git a/build.rs b/build.rs index cdbaf049..5ec33e93 100644 --- a/build.rs +++ b/build.rs @@ -33,7 +33,7 @@ fn get_target() -> repc::Target { repc::TARGET_MAP .iter() .cloned() - .find(|t| t.0 == &rustc_target) + .find(|t| t.0 == rustc_target) .unwrap() .1 } diff --git a/src/async_engine.rs b/src/async_engine.rs index 1ca9b4a5..dbd831db 100644 --- a/src/async_engine.rs +++ b/src/async_engine.rs @@ -214,7 +214,7 @@ mod task { Poll::Pending } else if task.state & EMPTIED == 0 { task.state |= EMPTIED; - Poll::Ready(ptr::read(&mut *task.data.result)) + Poll::Ready(ptr::read(&*task.data.result)) } else { panic!("Future polled after it has already been emptied"); } @@ -292,7 +292,7 @@ mod task { } let f = Box::into_raw(f); SpawnedFuture { - vtable: &SpawnedFutureVTableProxy::::VTABLE, + vtable: SpawnedFutureVTableProxy::::VTABLE, data: f as _, } } @@ -365,7 +365,7 @@ mod task { unsafe fn run(&mut self) { if self.state & CANCELLED == 0 { self.inc_ref_count(); - let raw_waker = RawWaker::new(self as *const _ as _, &Self::VTABLE); + let raw_waker = RawWaker::new(self as *const _ as _, Self::VTABLE); let waker = Waker::from_raw(raw_waker); let mut ctx = Context::from_waker(&waker); diff --git a/src/backends/xorg/mod.rs b/src/backends/xorg/mod.rs index e5220a1e..080b514b 100644 --- a/src/backends/xorg/mod.rs +++ b/src/backends/xorg/mod.rs @@ -706,7 +706,9 @@ impl XorgBackend { let client = &buffer.client; log::error!("Could not access client {} memory: {:#}", client.id, e); if let Ok(d) = client.display() { - client.fatal_event(d.implementation_error(format!("Could not access memory: {:#}", e))); + client.fatal_event( + d.implementation_error(format!("Could not access memory: {:#}", e)), + ); } else { self.state.clients.kill(client.id); } diff --git a/src/client/mod.rs b/src/client/mod.rs index 83b2d638..72e663f4 100644 --- a/src/client/mod.rs +++ b/src/client/mod.rs @@ -3,6 +3,10 @@ use crate::client::objects::Objects; use crate::ifs::wl_buffer::{WlBuffer, WlBufferError, WlBufferId}; use crate::ifs::wl_callback::WlCallback; use crate::ifs::wl_compositor::{WlCompositorError, WlCompositorObj}; +use crate::ifs::wl_data_device::{WlDataDevice, WlDataDeviceError}; +use crate::ifs::wl_data_device_manager::{WlDataDeviceManagerError, WlDataDeviceManagerObj}; +use crate::ifs::wl_data_offer::{WlDataOffer, WlDataOfferError}; +use crate::ifs::wl_data_source::{WlDataSource, WlDataSourceError}; use crate::ifs::wl_display::{WlDisplay, WlDisplayError}; use crate::ifs::wl_output::{WlOutputError, WlOutputObj}; use crate::ifs::wl_region::{WlRegion, WlRegionError, WlRegionId}; @@ -27,8 +31,8 @@ use crate::utils::buffd::{BufFdError, MsgFormatter, MsgParser, MsgParserError}; use crate::utils::numcell::NumCell; use crate::utils::oneshot::{oneshot, OneshotTx}; use crate::utils::queue::AsyncQueue; +use crate::ErrorFmt; use ahash::AHashMap; -use anyhow::anyhow; use std::cell::{Cell, RefCell, RefMut}; use std::fmt::{Debug, Display, Formatter}; use std::future::Future; @@ -36,10 +40,6 @@ use std::mem; use std::rc::Rc; use thiserror::Error; use uapi::{c, OwnedFd}; -use crate::ifs::wl_data_device::{WlDataDevice, WlDataDeviceError}; -use crate::ifs::wl_data_device_manager::{WlDataDeviceManagerError, WlDataDeviceManagerObj}; -use crate::ifs::wl_data_offer::{WlDataOffer, WlDataOfferError}; -use crate::ifs::wl_data_source::{WlDataSourceError, WlDataSource}; mod objects; mod tasks; @@ -161,17 +161,18 @@ efrom!(ClientError, WlSeatError, WlSeatError); efrom!(ClientError, WlTouchError, WlTouchError); efrom!(ClientError, WlPointerError, WlPointerError); efrom!(ClientError, WlKeyboardError, WlKeyboardError); -efrom!(ClientError, WlDataDeviceManagerError, WlDataDeviceManagerError); +efrom!( + ClientError, + WlDataDeviceManagerError, + WlDataDeviceManagerError +); efrom!(ClientError, WlDataDeviceError, WlDataDeviceError); efrom!(ClientError, WlDataSourceError, WlDataSourceError); efrom!(ClientError, WlDataOfferError, WlDataOfferError); impl ClientError { fn peer_closed(&self) -> bool { - match self { - ClientError::Io(BufFdError::Closed) => true, - _ => false, - } + matches!(self, ClientError::Io(BufFdError::Closed)) } } @@ -354,9 +355,9 @@ impl Client { Ok(d) => self.fatal_event(d.invalid_request(obj, request)), Err(e) => { log::error!( - "Could not retrieve display of client {}: {:#}", + "Could not retrieve display of client {}: {}", self.id, - anyhow!(e) + ErrorFmt(e), ); self.state.clients.kill(self.id); } diff --git a/src/client/tasks.rs b/src/client/tasks.rs index 86554e37..e8650a0f 100644 --- a/src/client/tasks.rs +++ b/src/client/tasks.rs @@ -3,7 +3,7 @@ use crate::object::ObjectId; use crate::utils::buffd::{BufFdIn, BufFdOut, MsgFormatter, MsgParser}; use crate::utils::oneshot::OneshotRx; use crate::utils::vec_ext::VecExt; -use anyhow::anyhow; +use crate::ErrorFmt; use futures::{select, FutureExt}; use std::mem; use std::rc::Rc; @@ -28,7 +28,7 @@ pub async fn client(data: Rc, shutdown: OneshotRx<()>) { log::error!("Could not shut down client {} within 5 seconds", data.id.0); } Err(e) => { - log::error!("Could not create a timeout: {:#}", anyhow!(e)); + log::error!("Could not create a timeout: {}", ErrorFmt(e)); } } data.state.clients.kill(data.id); @@ -39,11 +39,11 @@ async fn dispatch_fr(data: Rc) { let mut fr = data.dispatch_frame_requests.pop().await; loop { if let Err(e) = data.event(fr.done()).await { - log::error!("Could not dispatch frame event: {:#}", anyhow!(e)); + log::error!("Could not dispatch frame event: {}", ErrorFmt(e)); return; } if let Err(e) = data.remove_obj(&*fr).await { - log::error!("Could not remove frame object: {:#}", anyhow!(e)); + log::error!("Could not remove frame object: {}", ErrorFmt(e)); return; } fr = match data.dispatch_frame_requests.try_pop() { @@ -52,7 +52,7 @@ async fn dispatch_fr(data: Rc) { }; } if let Err(e) = data.event2(WlEvent::Flush).await { - log::error!("Could not dispatch frame event: {:#}", anyhow!(e)); + log::error!("Could not dispatch frame event: {}", ErrorFmt(e)); return; } } @@ -109,14 +109,14 @@ async fn receive(data: Rc) { log::info!("Client {} terminated the connection", data.id.0); data.state.clients.kill(data.id); } else { - let e = anyhow!(e); + let e = ErrorFmt(e); log::error!( - "An error occurred while trying to handle a message from client {}: {:#}", + "An error occurred while trying to handle a message from client {}: {}", data.id.0, e ); if !data.shutdown_sent.get() { - data.fatal_event(display.implementation_error(format!("{:#}", e))); + data.fatal_event(display.implementation_error(e.to_string())); } } } diff --git a/src/clientmem.rs b/src/clientmem.rs index 768ec965..8f4140bf 100644 --- a/src/clientmem.rs +++ b/src/clientmem.rs @@ -1,9 +1,9 @@ use crate::pixman::PixmanMemory; use std::cell::{Cell, UnsafeCell}; use std::mem::MaybeUninit; +use std::ptr; use std::rc::Rc; use std::sync::atomic::{compiler_fence, Ordering}; -use std::{mem, ptr}; use thiserror::Error; use uapi::c; use uapi::c::raise; @@ -156,7 +156,7 @@ pub fn init() -> Result<(), ClientMemError> { unsafe { let mut action: c::sigaction = MaybeUninit::zeroed().assume_init(); action.sa_sigaction = - mem::transmute(sigbus as unsafe extern "C" fn(i32, &c::siginfo_t, *mut c::c_void)); + sigbus as unsafe extern "C" fn(i32, &c::siginfo_t, *mut c::c_void) as _; action.sa_flags = c::SA_NODEFER | c::SA_SIGINFO; let res = c::sigaction(c::SIGBUS, &action, ptr::null_mut()); match uapi::map_err!(res) { diff --git a/src/globals.rs b/src/globals.rs index 81363cf5..3df09bc3 100644 --- a/src/globals.rs +++ b/src/globals.rs @@ -1,5 +1,6 @@ use crate::client::{Client, ClientError, DynEventFormatter, WlEvent}; use crate::ifs::wl_compositor::WlCompositorError; +use crate::ifs::wl_data_device_manager::WlDataDeviceManagerError; use crate::ifs::wl_output::{WlOutputError, WlOutputGlobal}; use crate::ifs::wl_registry::WlRegistry; use crate::ifs::wl_seat::{WlSeatError, WlSeatGlobal}; @@ -8,14 +9,16 @@ use crate::ifs::wl_subcompositor::WlSubcompositorError; use crate::ifs::xdg_wm_base::XdgWmBaseError; use crate::object::{Interface, ObjectId}; use crate::utils::copyhashmap::CopyHashMap; -use crate::{NumCell, State, WlCompositorGlobal, WlDataDeviceManagerGlobal, WlShmGlobal, WlSubcompositorGlobal, XdgWmBaseGlobal}; +use crate::{ + NumCell, State, WlCompositorGlobal, WlDataDeviceManagerGlobal, WlShmGlobal, + WlSubcompositorGlobal, XdgWmBaseGlobal, +}; use ahash::AHashSet; use std::fmt::{Display, Formatter}; use std::future::Future; use std::pin::Pin; use std::rc::Rc; use thiserror::Error; -use crate::ifs::wl_data_device_manager::WlDataDeviceManagerError; #[derive(Debug, Error)] pub enum GlobalError { @@ -47,7 +50,11 @@ efrom!(GlobalError, WlSubcompositorError, WlSubcompositorError); efrom!(GlobalError, XdgWmBaseError, XdgWmBaseError); efrom!(GlobalError, WlOutputError, WlOutputError); efrom!(GlobalError, WlSeatError, WlSeatError); -efrom!(GlobalError, WlDataDeviceManagerError, WlDataDeviceManagerError); +efrom!( + GlobalError, + WlDataDeviceManagerError, + WlDataDeviceManagerError +); #[derive(Copy, Clone, Debug, Eq, PartialEq, Hash)] pub struct GlobalName(u32); diff --git a/src/ifs/mod.rs b/src/ifs/mod.rs index a452e148..ec8d0e17 100644 --- a/src/ifs/mod.rs +++ b/src/ifs/mod.rs @@ -3,6 +3,7 @@ pub mod wl_callback; pub mod wl_compositor; pub mod wl_data_device; pub mod wl_data_device_manager; +pub mod wl_data_offer; pub mod wl_data_source; pub mod wl_display; pub mod wl_output; @@ -15,4 +16,3 @@ pub mod wl_subcompositor; pub mod wl_surface; pub mod xdg_positioner; pub mod xdg_wm_base; -pub mod wl_data_offer; diff --git a/src/ifs/wl_buffer/mod.rs b/src/ifs/wl_buffer/mod.rs index 262f2a75..fd3a0d48 100644 --- a/src/ifs/wl_buffer/mod.rs +++ b/src/ifs/wl_buffer/mod.rs @@ -30,6 +30,7 @@ pub struct WlBuffer { } impl WlBuffer { + #[allow(clippy::too_many_arguments)] pub fn new( id: WlBufferId, client: &Rc, diff --git a/src/ifs/wl_data_device/mod.rs b/src/ifs/wl_data_device/mod.rs index 6c12a26b..f11b8f63 100644 --- a/src/ifs/wl_data_device/mod.rs +++ b/src/ifs/wl_data_device/mod.rs @@ -17,7 +17,8 @@ const MOTION: u32 = 4; const DROP: u32 = 5; const SELECTION: u32 = 5; -#[allow(dead_code)] const ROLE: u32 = 0; +#[allow(dead_code)] +const ROLE: u32 = 0; id!(WlDataDeviceId); diff --git a/src/ifs/wl_data_device/types.rs b/src/ifs/wl_data_device/types.rs index da5f00c2..0e63dae3 100644 --- a/src/ifs/wl_data_device/types.rs +++ b/src/ifs/wl_data_device/types.rs @@ -1,6 +1,7 @@ use crate::client::{ClientError, EventFormatter, RequestParser}; use crate::fixed::Fixed; use crate::ifs::wl_data_device::{WlDataDevice, DATA_OFFER, DROP, ENTER, LEAVE, MOTION, SELECTION}; +use crate::ifs::wl_data_offer::WlDataOfferId; use crate::ifs::wl_data_source::WlDataSourceId; use crate::ifs::wl_surface::WlSurfaceId; use crate::object::Object; @@ -8,7 +9,6 @@ use crate::utils::buffd::{MsgFormatter, MsgParser, MsgParserError}; use std::fmt::{Debug, Formatter}; use std::rc::Rc; use thiserror::Error; -use crate::ifs::wl_data_offer::WlDataOfferId; #[derive(Debug, Error)] pub enum WlDataDeviceError { diff --git a/src/ifs/wl_data_device_manager/mod.rs b/src/ifs/wl_data_device_manager/mod.rs index 0c6b5b1a..1cb59c74 100644 --- a/src/ifs/wl_data_device_manager/mod.rs +++ b/src/ifs/wl_data_device_manager/mod.rs @@ -2,20 +2,24 @@ mod types; use crate::client::{AddObj, Client}; use crate::globals::{Global, GlobalName}; +use crate::ifs::wl_data_device::WlDataDevice; +use crate::ifs::wl_data_source::WlDataSource; use crate::object::{Interface, Object, ObjectId}; use crate::utils::buffd::MsgParser; use std::rc::Rc; pub use types::*; -use crate::ifs::wl_data_device::WlDataDevice; -use crate::ifs::wl_data_source::WlDataSource; const CREATE_DATA_SOURCE: u32 = 0; const GET_DATA_DEVICE: u32 = 1; -#[allow(dead_code)] const DND_NONE: u32 = 0; -#[allow(dead_code)] const DND_COPY: u32 = 1; -#[allow(dead_code)] const DND_MOVE: u32 = 2; -#[allow(dead_code)] const DND_ASK: u32 = 4; +#[allow(dead_code)] +const DND_NONE: u32 = 0; +#[allow(dead_code)] +const DND_COPY: u32 = 1; +#[allow(dead_code)] +const DND_MOVE: u32 = 2; +#[allow(dead_code)] +const DND_ASK: u32 = 4; id!(WlDataDeviceManagerId); diff --git a/src/ifs/wl_data_device_manager/types.rs b/src/ifs/wl_data_device_manager/types.rs index 1b156e8d..2940b36d 100644 --- a/src/ifs/wl_data_device_manager/types.rs +++ b/src/ifs/wl_data_device_manager/types.rs @@ -1,10 +1,10 @@ use crate::client::{ClientError, RequestParser}; +use crate::ifs::wl_data_device::WlDataDeviceId; use crate::ifs::wl_data_source::WlDataSourceId; use crate::ifs::wl_seat::WlSeatId; use crate::utils::buffd::{MsgParser, MsgParserError}; use std::fmt::{Debug, Formatter}; use thiserror::Error; -use crate::ifs::wl_data_device::WlDataDeviceId; #[derive(Debug, Error)] pub enum WlDataDeviceManagerError { diff --git a/src/ifs/wl_data_offer/mod.rs b/src/ifs/wl_data_offer/mod.rs index f4496c23..7d127557 100644 --- a/src/ifs/wl_data_offer/mod.rs +++ b/src/ifs/wl_data_offer/mod.rs @@ -16,10 +16,14 @@ const OFFER: u32 = 0; const SOURCE_ACTIONS: u32 = 1; const ACTION: u32 = 2; -#[allow(dead_code)] const INVALID_FINISH: u32 = 0; -#[allow(dead_code)] const INVALID_ACTION_MASK: u32 = 1; -#[allow(dead_code)] const INVALID_ACTION: u32 = 2; -#[allow(dead_code)] const INVALID_OFFER: u32 = 3; +#[allow(dead_code)] +const INVALID_FINISH: u32 = 0; +#[allow(dead_code)] +const INVALID_ACTION_MASK: u32 = 1; +#[allow(dead_code)] +const INVALID_ACTION: u32 = 2; +#[allow(dead_code)] +const INVALID_OFFER: u32 = 3; id!(WlDataOfferId); diff --git a/src/ifs/wl_data_offer/types.rs b/src/ifs/wl_data_offer/types.rs index 3cebee57..6b80c825 100644 --- a/src/ifs/wl_data_offer/types.rs +++ b/src/ifs/wl_data_offer/types.rs @@ -1,4 +1,5 @@ use crate::client::{ClientError, EventFormatter, RequestParser}; +use crate::ifs::wl_data_offer::{WlDataOffer, ACTION, OFFER, SOURCE_ACTIONS}; use crate::object::Object; use crate::utils::buffd::{MsgFormatter, MsgParser, MsgParserError}; use bstr::{BStr, BString}; @@ -6,7 +7,6 @@ use std::fmt::{Debug, Formatter}; use std::rc::Rc; use thiserror::Error; use uapi::OwnedFd; -use crate::ifs::wl_data_offer::{ACTION, OFFER, SOURCE_ACTIONS, WlDataOffer}; #[derive(Debug, Error)] pub enum WlDataOfferError { @@ -89,7 +89,11 @@ impl<'a> RequestParser<'a> for Accept<'a> { } impl Debug for Accept<'_> { fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { - write!(f, "accept(serial: {}, mime_type: {:?})", self.serial, self.mime_type) + write!( + f, + "accept(serial: {}, mime_type: {:?})", + self.serial, self.mime_type + ) } } @@ -107,7 +111,12 @@ impl<'a> RequestParser<'a> for Receive<'a> { } impl Debug for Receive<'_> { fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { - write!(f, "receive(mime_type: {:?}, fd: {})", self.mime_type, self.fd.raw()) + write!( + f, + "receive(mime_type: {:?}, fd: {})", + self.mime_type, + self.fd.raw() + ) } } @@ -149,7 +158,11 @@ impl<'a> RequestParser<'a> for SetActions { } impl Debug for SetActions { fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { - write!(f, "set_actions(dnd_actions: {}, preferred_action: {})", self.dnd_actions, self.preferred_action) + write!( + f, + "set_actions(dnd_actions: {}, preferred_action: {})", + self.dnd_actions, self.preferred_action + ) } } @@ -186,11 +199,7 @@ impl EventFormatter for SourceActions { } impl Debug for SourceActions { fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { - write!( - f, - "source_actions(source_actions: {})", - self.source_actions, - ) + write!(f, "source_actions(source_actions: {})", self.source_actions,) } } @@ -200,8 +209,7 @@ pub(super) struct Action { } impl EventFormatter for Action { fn format(self: Box, fmt: &mut MsgFormatter<'_>) { - fmt.header(self.obj.id, ACTION) - .uint(self.dnd_action); + fmt.header(self.obj.id, ACTION).uint(self.dnd_action); } fn obj(&self) -> &dyn Object { &*self.obj @@ -209,10 +217,6 @@ impl EventFormatter for Action { } impl Debug for Action { fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { - write!( - f, - "action(dnd_action: {})", - self.dnd_action, - ) + write!(f, "action(dnd_action: {})", self.dnd_action,) } } diff --git a/src/ifs/wl_data_source/mod.rs b/src/ifs/wl_data_source/mod.rs index e96c5ec9..a914d22a 100644 --- a/src/ifs/wl_data_source/mod.rs +++ b/src/ifs/wl_data_source/mod.rs @@ -17,8 +17,10 @@ const DND_DROP_PERFORMED: u32 = 4; const DND_FINISHED: u32 = 5; const ACTION: u32 = 5; -#[allow(dead_code)] const INVALID_ACTION_MASK: u32 = 0; -#[allow(dead_code)] const INVALID_SOURCE: u32 = 1; +#[allow(dead_code)] +const INVALID_ACTION_MASK: u32 = 0; +#[allow(dead_code)] +const INVALID_SOURCE: u32 = 1; id!(WlDataSourceId); diff --git a/src/ifs/wl_display/mod.rs b/src/ifs/wl_display/mod.rs index 2fd310e7..4f58d989 100644 --- a/src/ifs/wl_display/mod.rs +++ b/src/ifs/wl_display/mod.rs @@ -16,7 +16,8 @@ const DELETE_ID: u32 = 1; const INVALID_OBJECT: u32 = 0; const INVALID_METHOD: u32 = 1; -#[allow(dead_code)] const NO_MEMORY: u32 = 2; +#[allow(dead_code)] +const NO_MEMORY: u32 = 2; const IMPLEMENTATION: u32 = 3; pub struct WlDisplay { @@ -45,7 +46,7 @@ impl WlDisplay { async fn sync(&self, parser: MsgParser<'_, '_>) -> Result<(), SyncError> { let sync: Sync = self.client.parse(self, parser)?; - let cb = Rc::new(WlCallback::new(sync.callback.into())); + let cb = Rc::new(WlCallback::new(sync.callback)); self.client.add_client_obj(&cb)?; self.client.event(cb.done()).await?; self.client.remove_obj(&*cb).await?; diff --git a/src/ifs/wl_output/mod.rs b/src/ifs/wl_output/mod.rs index 4a9275bc..8df11623 100644 --- a/src/ifs/wl_output/mod.rs +++ b/src/ifs/wl_output/mod.rs @@ -22,23 +22,36 @@ const DONE: u32 = 2; const SCALE: u32 = 3; const SP_UNKNOWN: i32 = 0; -#[allow(dead_code)] const SP_NONE: i32 = 1; -#[allow(dead_code)] const SP_HORIZONTAL_RGB: i32 = 2; -#[allow(dead_code)] const SP_HORIZONTAL_BGR: i32 = 3; -#[allow(dead_code)] const SP_VERTICAL_RGB: i32 = 4; -#[allow(dead_code)] const SP_VERTICAL_BGR: i32 = 5; +#[allow(dead_code)] +const SP_NONE: i32 = 1; +#[allow(dead_code)] +const SP_HORIZONTAL_RGB: i32 = 2; +#[allow(dead_code)] +const SP_HORIZONTAL_BGR: i32 = 3; +#[allow(dead_code)] +const SP_VERTICAL_RGB: i32 = 4; +#[allow(dead_code)] +const SP_VERTICAL_BGR: i32 = 5; const TF_NORMAL: i32 = 0; -#[allow(dead_code)] const TF_90: i32 = 1; -#[allow(dead_code)] const TF_180: i32 = 2; -#[allow(dead_code)] const TF_270: i32 = 3; -#[allow(dead_code)] const TF_FLIPPED: i32 = 4; -#[allow(dead_code)] const TF_FLIPPED_90: i32 = 5; -#[allow(dead_code)] const TF_FLIPPED_180: i32 = 6; -#[allow(dead_code)] const TF_FLIPPED_270: i32 = 7; +#[allow(dead_code)] +const TF_90: i32 = 1; +#[allow(dead_code)] +const TF_180: i32 = 2; +#[allow(dead_code)] +const TF_270: i32 = 3; +#[allow(dead_code)] +const TF_FLIPPED: i32 = 4; +#[allow(dead_code)] +const TF_FLIPPED_90: i32 = 5; +#[allow(dead_code)] +const TF_FLIPPED_180: i32 = 6; +#[allow(dead_code)] +const TF_FLIPPED_270: i32 = 7; const MODE_CURRENT: u32 = 1; -#[allow(dead_code)] const MODE_PREFERRED: u32 = 2; +#[allow(dead_code)] +const MODE_PREFERRED: u32 = 2; pub struct WlOutputGlobal { name: GlobalName, diff --git a/src/ifs/wl_seat/mod.rs b/src/ifs/wl_seat/mod.rs index c1913c37..4063052c 100644 --- a/src/ifs/wl_seat/mod.rs +++ b/src/ifs/wl_seat/mod.rs @@ -36,9 +36,11 @@ const NAME: u32 = 1; const POINTER: u32 = 1; const KEYBOARD: u32 = 2; -#[allow(dead_code)] const TOUCH: u32 = 4; +#[allow(dead_code)] +const TOUCH: u32 = 4; -#[allow(dead_code)] const MISSING_CAPABILITY: u32 = 0; +#[allow(dead_code)] +const MISSING_CAPABILITY: u32 = 0; pub struct WlSeatGlobal { name: GlobalName, @@ -178,10 +180,10 @@ impl WlSeatGlobal { x += Fixed::from_int(ee.x1); y += Fixed::from_int(ee.y1); if enter { - self.tl_pointer_event(&tl, |p| p.enter(0, tl.surface.surface.surface.id, x, y)) + self.tl_pointer_event(tl, |p| p.enter(0, tl.surface.surface.surface.id, x, y)) .await; } - self.tl_pointer_event(&tl, |p| p.motion(0, x, y)).await; + self.tl_pointer_event(tl, |p| p.motion(0, x, y)).await; } } @@ -237,9 +239,7 @@ impl WlSeatGlobal { client.event(obj.capabilities()).await?; { let mut bindings = self.bindings.borrow_mut(); - let bindings = bindings - .entry(client.id) - .or_insert_with(|| Default::default()); + let bindings = bindings.entry(client.id).or_insert_with(Default::default); bindings.insert(id, obj.clone()); } Ok(()) diff --git a/src/ifs/wl_seat/wl_keyboard/mod.rs b/src/ifs/wl_seat/wl_keyboard/mod.rs index a84dcd8a..d1285a32 100644 --- a/src/ifs/wl_seat/wl_keyboard/mod.rs +++ b/src/ifs/wl_seat/wl_keyboard/mod.rs @@ -18,11 +18,14 @@ const KEY: u32 = 3; const MODIFIERS: u32 = 4; const REPEAT_INFO: u32 = 5; -#[allow(dead_code)] const NO_KEYMAP: u32 = 0; +#[allow(dead_code)] +const NO_KEYMAP: u32 = 0; pub(super) const XKB_V1: u32 = 1; -#[allow(dead_code)] const RELEASED: u32 = 0; -#[allow(dead_code)] const PRESSED: u32 = 1; +#[allow(dead_code)] +const RELEASED: u32 = 0; +#[allow(dead_code)] +const PRESSED: u32 = 1; id!(WlKeyboardId); diff --git a/src/ifs/wl_seat/wl_pointer/mod.rs b/src/ifs/wl_seat/wl_pointer/mod.rs index f70a58f7..d1651cc5 100644 --- a/src/ifs/wl_seat/wl_pointer/mod.rs +++ b/src/ifs/wl_seat/wl_pointer/mod.rs @@ -22,7 +22,8 @@ const AXIS_SOURCE: u32 = 6; const AXIS_STOP: u32 = 7; const AXIS_DISCRETE: u32 = 8; -#[allow(dead_code)] const ROLE: u32 = 0; +#[allow(dead_code)] +const ROLE: u32 = 0; pub(super) const RELEASED: u32 = 0; pub(super) const PRESSED: u32 = 1; @@ -30,10 +31,14 @@ pub(super) const PRESSED: u32 = 1; pub(super) const VERTICAL_SCROLL: u32 = 0; pub(super) const HORIZONTAL_SCROLL: u32 = 1; -#[allow(dead_code)] const WHEEL: u32 = 0; -#[allow(dead_code)] const FINGER: u32 = 1; -#[allow(dead_code)] const CONTINUOUS: u32 = 2; -#[allow(dead_code)] const WHEEL_TILT: u32 = 3; +#[allow(dead_code)] +const WHEEL: u32 = 0; +#[allow(dead_code)] +const FINGER: u32 = 1; +#[allow(dead_code)] +const CONTINUOUS: u32 = 2; +#[allow(dead_code)] +const WHEEL_TILT: u32 = 3; id!(WlPointerId); diff --git a/src/ifs/wl_seat/wl_touch/mod.rs b/src/ifs/wl_seat/wl_touch/mod.rs index 31f80777..ed10934e 100644 --- a/src/ifs/wl_seat/wl_touch/mod.rs +++ b/src/ifs/wl_seat/wl_touch/mod.rs @@ -9,13 +9,20 @@ pub use types::*; const RELEASE: u32 = 0; -#[allow(dead_code)] const DOWN: u32 = 0; -#[allow(dead_code)] const UP: u32 = 1; -#[allow(dead_code)] const MOTION: u32 = 2; -#[allow(dead_code)] const FRAME: u32 = 3; -#[allow(dead_code)] const CANCEL: u32 = 4; -#[allow(dead_code)] const SHAPE: u32 = 5; -#[allow(dead_code)] const ORIENTATION: u32 = 6; +#[allow(dead_code)] +const DOWN: u32 = 0; +#[allow(dead_code)] +const UP: u32 = 1; +#[allow(dead_code)] +const MOTION: u32 = 2; +#[allow(dead_code)] +const FRAME: u32 = 3; +#[allow(dead_code)] +const CANCEL: u32 = 4; +#[allow(dead_code)] +const SHAPE: u32 = 5; +#[allow(dead_code)] +const ORIENTATION: u32 = 6; id!(WlTouchId); diff --git a/src/ifs/wl_subcompositor/mod.rs b/src/ifs/wl_subcompositor/mod.rs index 60b9ef29..975f2643 100644 --- a/src/ifs/wl_subcompositor/mod.rs +++ b/src/ifs/wl_subcompositor/mod.rs @@ -11,7 +11,8 @@ pub use types::*; const DESTROY: u32 = 0; const GET_SUBSURFACE: u32 = 1; -#[allow(dead_code)] const BAD_SURFACE: u32 = 0; +#[allow(dead_code)] +const BAD_SURFACE: u32 = 0; id!(WlSubcompositorId); diff --git a/src/ifs/wl_surface/mod.rs b/src/ifs/wl_surface/mod.rs index 246ac005..d97b10f2 100644 --- a/src/ifs/wl_surface/mod.rs +++ b/src/ifs/wl_surface/mod.rs @@ -33,12 +33,17 @@ const SET_BUFFER_TRANSFORM: u32 = 7; const SET_BUFFER_SCALE: u32 = 8; const DAMAGE_BUFFER: u32 = 9; -#[allow(dead_code)] const ENTER: u32 = 0; -#[allow(dead_code)] const LEAVE: u32 = 1; +#[allow(dead_code)] +const ENTER: u32 = 0; +#[allow(dead_code)] +const LEAVE: u32 = 1; -#[allow(dead_code)] const INVALID_SCALE: u32 = 0; -#[allow(dead_code)] const INVALID_TRANSFORM: u32 = 1; -#[allow(dead_code)] const INVALID_SIZE: u32 = 2; +#[allow(dead_code)] +const INVALID_SCALE: u32 = 0; +#[allow(dead_code)] +const INVALID_TRANSFORM: u32 = 1; +#[allow(dead_code)] +const INVALID_SIZE: u32 = 2; id!(WlSurfaceId); diff --git a/src/ifs/wl_surface/wl_subsurface/mod.rs b/src/ifs/wl_surface/wl_subsurface/mod.rs index 83dcd608..89c2d280 100644 --- a/src/ifs/wl_surface/wl_subsurface/mod.rs +++ b/src/ifs/wl_surface/wl_subsurface/mod.rs @@ -17,7 +17,8 @@ const PLACE_BELOW: u32 = 3; const SET_SYNC: u32 = 4; const SET_DESYNC: u32 = 5; -#[allow(dead_code)] const BAD_SURFACE: u32 = 0; +#[allow(dead_code)] +const BAD_SURFACE: u32 = 0; const MAX_SUBSURFACE_DEPTH: u32 = 100; @@ -108,7 +109,7 @@ impl WlSubsurface { } let node = { let mut data = self.parent.children.borrow_mut(); - let data = data.get_or_insert_with(|| Default::default()); + let data = data.get_or_insert_with(Default::default); data.subsurfaces .insert(self.surface.id, self.surface.clone()); data.above.add_first(StackElement { diff --git a/src/ifs/wl_surface/xdg_surface/mod.rs b/src/ifs/wl_surface/xdg_surface/mod.rs index 87c27c51..09141e76 100644 --- a/src/ifs/wl_surface/xdg_surface/mod.rs +++ b/src/ifs/wl_surface/xdg_surface/mod.rs @@ -24,9 +24,11 @@ const ACK_CONFIGURE: u32 = 4; const CONFIGURE: u32 = 0; -#[allow(dead_code)] const NOT_CONSTRUCTED: u32 = 1; +#[allow(dead_code)] +const NOT_CONSTRUCTED: u32 = 1; const ALREADY_CONSTRUCTED: u32 = 2; -#[allow(dead_code)] const UNCONFIGURED_BUFFER: u32 = 3; +#[allow(dead_code)] +const UNCONFIGURED_BUFFER: u32 = 3; id!(XdgSurfaceId); @@ -37,11 +39,7 @@ pub struct XdgSurface { } impl XdgSurface { - pub fn new( - wm_base: &Rc, - id: XdgSurfaceId, - surface: &Rc, - ) -> Self { + pub fn new(wm_base: &Rc, id: XdgSurfaceId, surface: &Rc) -> Self { Self { id, base: wm_base.clone(), @@ -167,7 +165,10 @@ impl XdgSurface { xdg.popups.set(self.surface.id, popup.clone()); } } - data.role_data = XdgSurfaceRoleData::Popup(XdgPopupData { _popup: popup, parent }); + data.role_data = XdgSurfaceRoleData::Popup(XdgPopupData { + _popup: popup, + parent, + }); } Ok(()) } diff --git a/src/ifs/wl_surface/xdg_surface/xdg_popup/mod.rs b/src/ifs/wl_surface/xdg_surface/xdg_popup/mod.rs index 7dd3bb48..63ed3ae6 100644 --- a/src/ifs/wl_surface/xdg_surface/xdg_popup/mod.rs +++ b/src/ifs/wl_surface/xdg_surface/xdg_popup/mod.rs @@ -15,7 +15,8 @@ const CONFIGURE: u32 = 0; const POPUP_DONE: u32 = 1; const REPOSITIONED: u32 = 2; -#[allow(dead_code)] const INVALID_GRAB: u32 = 1; +#[allow(dead_code)] +const INVALID_GRAB: u32 = 1; id!(XdgPopupId); diff --git a/src/ifs/wl_surface/xdg_surface/xdg_toplevel/mod.rs b/src/ifs/wl_surface/xdg_surface/xdg_toplevel/mod.rs index fa651e3d..046370c7 100644 --- a/src/ifs/wl_surface/xdg_surface/xdg_toplevel/mod.rs +++ b/src/ifs/wl_surface/xdg_surface/xdg_toplevel/mod.rs @@ -40,14 +40,22 @@ pub enum ResizeEdge { BottomRight = 10, } -#[allow(dead_code)] const STATE_MAXIMIZED: u32 = 1; -#[allow(dead_code)] const STATE_FULLSCREEN: u32 = 2; -#[allow(dead_code)] const STATE_RESIZING: u32 = 3; -#[allow(dead_code)] const STATE_ACTIVATED: u32 = 4; -#[allow(dead_code)] const STATE_TILED_LEFT: u32 = 5; -#[allow(dead_code)] const STATE_TILED_RIGHT: u32 = 6; -#[allow(dead_code)] const STATE_TILED_TOP: u32 = 7; -#[allow(dead_code)] const STATE_TILED_BOTTOM: u32 = 8; +#[allow(dead_code)] +const STATE_MAXIMIZED: u32 = 1; +#[allow(dead_code)] +const STATE_FULLSCREEN: u32 = 2; +#[allow(dead_code)] +const STATE_RESIZING: u32 = 3; +#[allow(dead_code)] +const STATE_ACTIVATED: u32 = 4; +#[allow(dead_code)] +const STATE_TILED_LEFT: u32 = 5; +#[allow(dead_code)] +const STATE_TILED_RIGHT: u32 = 6; +#[allow(dead_code)] +const STATE_TILED_TOP: u32 = 7; +#[allow(dead_code)] +const STATE_TILED_BOTTOM: u32 = 8; id!(XdgToplevelId); diff --git a/src/ifs/xdg_positioner/mod.rs b/src/ifs/xdg_positioner/mod.rs index 9e35287f..2fb7c1a8 100644 --- a/src/ifs/xdg_positioner/mod.rs +++ b/src/ifs/xdg_positioner/mod.rs @@ -1,6 +1,7 @@ mod types; use crate::client::{AddObj, Client}; +use crate::ifs::xdg_wm_base::XdgWmBaseObj; use crate::object::{Interface, Object, ObjectId}; use crate::utils::buffd::MsgParser; use bitflags::bitflags; @@ -9,7 +10,6 @@ use num_traits::FromPrimitive; use std::cell::RefCell; use std::rc::Rc; pub use types::*; -use crate::ifs::xdg_wm_base::XdgWmBaseObj; const DESTROY: u32 = 0; const SET_SIZE: u32 = 1; diff --git a/src/ifs/xdg_wm_base/mod.rs b/src/ifs/xdg_wm_base/mod.rs index b9d39468..6b1b7a1e 100644 --- a/src/ifs/xdg_wm_base/mod.rs +++ b/src/ifs/xdg_wm_base/mod.rs @@ -17,12 +17,17 @@ const PONG: u32 = 3; const PING: u32 = 0; -#[allow(dead_code)] const ROLE: u32 = 0; +#[allow(dead_code)] +const ROLE: u32 = 0; const DEFUNCT_SURFACES: u32 = 1; -#[allow(dead_code)] const NOT_THE_TOPMOST_POPUP: u32 = 2; -#[allow(dead_code)] const INVALID_POPUP_PARENT: u32 = 3; -#[allow(dead_code)] const INVALID_SURFACE_STATE: u32 = 4; -#[allow(dead_code)] const INVALID_POSITIONER: u32 = 5; +#[allow(dead_code)] +const NOT_THE_TOPMOST_POPUP: u32 = 2; +#[allow(dead_code)] +const INVALID_POPUP_PARENT: u32 = 3; +#[allow(dead_code)] +const INVALID_SURFACE_STATE: u32 = 4; +#[allow(dead_code)] +const INVALID_POSITIONER: u32 = 5; id!(XdgWmBaseId); diff --git a/src/main.rs b/src/main.rs index 22043893..82324b16 100644 --- a/src/main.rs +++ b/src/main.rs @@ -4,6 +4,13 @@ never_type, c_variadic )] +#![allow( + clippy::len_zero, + clippy::needless_lifetimes, + clippy::enum_variant_names, + clippy::useless_format, + clippy::redundant_clone +)] use crate::acceptor::AcceptorError; use crate::async_engine::AsyncError; @@ -13,24 +20,24 @@ use crate::clientmem::ClientMemError; use crate::event_loop::EventLoopError; use crate::globals::{AddGlobal, Globals}; use crate::ifs::wl_compositor::WlCompositorGlobal; +use crate::ifs::wl_data_device_manager::WlDataDeviceManagerGlobal; use crate::ifs::wl_shm::WlShmGlobal; use crate::ifs::wl_subcompositor::WlSubcompositorGlobal; use crate::ifs::xdg_wm_base::XdgWmBaseGlobal; use crate::sighand::SighandError; use crate::state::State; use crate::tree::{DisplayNode, NodeIds}; +use crate::utils::errorfmt::ErrorFmt; use crate::utils::numcell::NumCell; use crate::utils::queue::AsyncQueue; use crate::wheel::WheelError; use acceptor::Acceptor; -use anyhow::anyhow; use async_engine::AsyncEngine; use event_loop::EventLoop; use log::LevelFilter; use std::rc::Rc; use thiserror::Error; use wheel::Wheel; -use crate::ifs::wl_data_device_manager::WlDataDeviceManagerGlobal; #[macro_use] mod macros; @@ -62,7 +69,7 @@ fn main() { .filter_level(LevelFilter::Trace) .init(); if let Err(e) = main_() { - log::error!("A fatal error occurred: {:#}", anyhow!(e)); + log::error!("A fatal error occurred: {}", ErrorFmt(e)); std::process::exit(1); } } diff --git a/src/pixman/mod.rs b/src/pixman/mod.rs index c03edc97..fe26cde7 100644 --- a/src/pixman/mod.rs +++ b/src/pixman/mod.rs @@ -234,6 +234,7 @@ where self.fill_rect(r, g, b, a, 0, 0, self.width as _, self.height as _) } + #[allow(clippy::too_many_arguments)] pub fn fill_rect( &self, r: u8, @@ -260,6 +261,7 @@ where Ok(()) } + #[allow(clippy::too_many_arguments)] pub fn fill_insert_border( &self, r: u8, diff --git a/src/utils/buffd/parser.rs b/src/utils/buffd/parser.rs index 9905cb35..305d70b2 100644 --- a/src/utils/buffd/parser.rs +++ b/src/utils/buffd/parser.rs @@ -59,7 +59,7 @@ impl<'a, 'b> MsgParser<'a, 'b> { #[allow(dead_code)] pub fn fixed(&mut self) -> Result { - self.int().map(|i| Fixed(i)) + self.int().map(Fixed) } pub fn string(&mut self) -> Result<&'b BStr, MsgParserError> { diff --git a/src/utils/errorfmt.rs b/src/utils/errorfmt.rs new file mode 100644 index 00000000..b03bd63d --- /dev/null +++ b/src/utils/errorfmt.rs @@ -0,0 +1,21 @@ +use std::error::Error; +use std::fmt::{Display, Formatter}; + +pub struct ErrorFmt(pub E); + +impl Display for ErrorFmt { + fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { + let mut e_opt = Some(&self.0 as &dyn Error); + let mut first = true; + while let Some(e) = e_opt { + if first { + write!(f, "{}", e)?; + first = false; + } else { + write!(f, ": {}", e)?; + } + e_opt = e.source(); + } + Ok(()) + } +} diff --git a/src/utils/mod.rs b/src/utils/mod.rs index 0a51459e..63c2480f 100644 --- a/src/utils/mod.rs +++ b/src/utils/mod.rs @@ -1,6 +1,7 @@ pub mod asyncevent; pub mod buffd; pub mod copyhashmap; +pub mod errorfmt; pub mod linkedlist; pub mod numcell; pub mod oneshot; diff --git a/src/wheel.rs b/src/wheel.rs index 504d4fa4..e9f1bba7 100644 --- a/src/wheel.rs +++ b/src/wheel.rs @@ -146,7 +146,7 @@ impl Wheel { } let el_id = self.el.id(); let pd = Rc::new(PeriodicDispatcher { - fd: fd, + fd, id: el_id, el: self.el.clone(), dispatcher,