autocommit 2022-02-05 18:14:24 CET
This commit is contained in:
parent
2d8b3a200e
commit
3a4ae99b9a
71 changed files with 1626 additions and 1306 deletions
|
|
@ -13,13 +13,11 @@ use crate::ifs::wl_seat::{NodeSeatState, WlSeatGlobal};
|
|||
use crate::ifs::wl_surface::cursor::CursorSurface;
|
||||
use crate::ifs::wl_surface::wl_subsurface::WlSubsurface;
|
||||
use crate::ifs::wl_surface::xdg_surface::{XdgSurface, XdgSurfaceRole};
|
||||
use crate::object::{Interface, Object, ObjectId};
|
||||
use crate::object::Object;
|
||||
use crate::pixman::Region;
|
||||
use crate::rect::Rect;
|
||||
use crate::render::Renderer;
|
||||
use crate::tree::{
|
||||
Node, NodeId,
|
||||
};
|
||||
use crate::tree::{Node, NodeId};
|
||||
use crate::utils::buffd::{MsgParser, MsgParserError};
|
||||
use crate::utils::clonecell::CloneCell;
|
||||
use crate::utils::linkedlist::LinkedList;
|
||||
|
|
@ -351,7 +349,7 @@ impl WlSurface {
|
|||
fn attach(self: &Rc<Self>, parser: MsgParser<'_, '_>) -> Result<(), AttachError> {
|
||||
let req: Attach = self.parse(parser)?;
|
||||
let buf = if req.buffer.is_some() {
|
||||
Some((req.x, req.y, self.client.get_buffer(req.buffer)?))
|
||||
Some((req.x, req.y, self.client.lookup(req.buffer)?))
|
||||
} else {
|
||||
None
|
||||
};
|
||||
|
|
@ -375,7 +373,7 @@ impl WlSurface {
|
|||
fn set_opaque_region(&self, parser: MsgParser<'_, '_>) -> Result<(), SetOpaqueRegionError> {
|
||||
let region: SetOpaqueRegion = self.parse(parser)?;
|
||||
let region = if region.region.is_some() {
|
||||
Some(self.client.get_region(region.region)?.region())
|
||||
Some(self.client.lookup(region.region)?.region())
|
||||
} else {
|
||||
None
|
||||
};
|
||||
|
|
@ -386,7 +384,7 @@ impl WlSurface {
|
|||
fn set_input_region(&self, parser: MsgParser<'_, '_>) -> Result<(), SetInputRegionError> {
|
||||
let req: SetInputRegion = self.parse(parser)?;
|
||||
let region = if req.region.is_some() {
|
||||
Some(self.client.get_region(req.region)?.region())
|
||||
Some(self.client.lookup(req.region)?.region())
|
||||
} else {
|
||||
None
|
||||
};
|
||||
|
|
@ -491,27 +489,6 @@ impl WlSurface {
|
|||
Ok(())
|
||||
}
|
||||
|
||||
fn handle_request_(
|
||||
self: &Rc<Self>,
|
||||
request: u32,
|
||||
parser: MsgParser<'_, '_>,
|
||||
) -> Result<(), WlSurfaceError> {
|
||||
match request {
|
||||
DESTROY => self.destroy(parser)?,
|
||||
ATTACH => self.attach(parser)?,
|
||||
DAMAGE => self.damage(parser)?,
|
||||
FRAME => self.frame(parser)?,
|
||||
SET_OPAQUE_REGION => self.set_opaque_region(parser)?,
|
||||
SET_INPUT_REGION => self.set_input_region(parser)?,
|
||||
COMMIT => self.commit(parser)?,
|
||||
SET_BUFFER_TRANSFORM => self.set_buffer_transform(parser)?,
|
||||
SET_BUFFER_SCALE => self.set_buffer_scale(parser)?,
|
||||
DAMAGE_BUFFER => self.damage_buffer(parser)?,
|
||||
_ => unreachable!(),
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn find_surface_at(self: &Rc<Self>, x: i32, y: i32) -> Option<(Rc<Self>, i32, i32)> {
|
||||
let buffer = match self.buffer.get() {
|
||||
Some(b) => b,
|
||||
|
|
@ -556,17 +533,22 @@ impl WlSurface {
|
|||
}
|
||||
}
|
||||
|
||||
handle_request!(WlSurface);
|
||||
object_base! {
|
||||
WlSurface, WlSurfaceError;
|
||||
|
||||
DESTROY => destroy,
|
||||
ATTACH => attach,
|
||||
DAMAGE => damage,
|
||||
FRAME => frame,
|
||||
SET_OPAQUE_REGION => set_opaque_region,
|
||||
SET_INPUT_REGION => set_input_region,
|
||||
COMMIT => commit,
|
||||
SET_BUFFER_TRANSFORM => set_buffer_transform,
|
||||
SET_BUFFER_SCALE => set_buffer_scale,
|
||||
DAMAGE_BUFFER => damage_buffer,
|
||||
}
|
||||
|
||||
impl Object for WlSurface {
|
||||
fn id(&self) -> ObjectId {
|
||||
self.id.into()
|
||||
}
|
||||
|
||||
fn interface(&self) -> Interface {
|
||||
Interface::WlSurface
|
||||
}
|
||||
|
||||
fn num_requests(&self) -> u32 {
|
||||
DAMAGE_BUFFER + 1
|
||||
}
|
||||
|
|
@ -582,6 +564,8 @@ impl Object for WlSurface {
|
|||
}
|
||||
}
|
||||
|
||||
dedicated_add_obj!(WlSurface, WlSurfaceId, surfaces);
|
||||
|
||||
tree_id!(SurfaceNodeId);
|
||||
impl Node for WlSurface {
|
||||
fn id(&self) -> NodeId {
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ use crate::ifs::wl_surface::{
|
|||
CommitAction, CommitContext, StackElement, SurfaceExt, SurfaceRole, WlSurface, WlSurfaceError,
|
||||
WlSurfaceId,
|
||||
};
|
||||
use crate::object::{Interface, Object, ObjectId};
|
||||
use crate::object::Object;
|
||||
use crate::rect::Rect;
|
||||
use crate::utils::buffd::MsgParser;
|
||||
use crate::utils::linkedlist::LinkedNode;
|
||||
|
|
@ -237,41 +237,27 @@ impl WlSubsurface {
|
|||
self.update_sync(false);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn handle_request_(
|
||||
self: &Rc<Self>,
|
||||
request: u32,
|
||||
parser: MsgParser<'_, '_>,
|
||||
) -> Result<(), WlSubsurfaceError> {
|
||||
match request {
|
||||
DESTROY => self.destroy(parser)?,
|
||||
SET_POSITION => self.set_position(parser)?,
|
||||
PLACE_ABOVE => self.place_above(parser)?,
|
||||
PLACE_BELOW => self.place_below(parser)?,
|
||||
SET_SYNC => self.set_sync(parser)?,
|
||||
SET_DESYNC => self.set_desync(parser)?,
|
||||
_ => unreachable!(),
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
handle_request!(WlSubsurface);
|
||||
object_base! {
|
||||
WlSubsurface, WlSubsurfaceError;
|
||||
|
||||
DESTROY => destroy,
|
||||
SET_POSITION => set_position,
|
||||
PLACE_ABOVE => place_above,
|
||||
PLACE_BELOW => place_below,
|
||||
SET_SYNC => set_sync,
|
||||
SET_DESYNC => set_desync,
|
||||
}
|
||||
|
||||
impl Object for WlSubsurface {
|
||||
fn id(&self) -> ObjectId {
|
||||
self.id.into()
|
||||
}
|
||||
|
||||
fn interface(&self) -> Interface {
|
||||
Interface::WlSubsurface
|
||||
}
|
||||
|
||||
fn num_requests(&self) -> u32 {
|
||||
SET_DESYNC + 1
|
||||
}
|
||||
}
|
||||
|
||||
simple_add_obj!(WlSubsurface);
|
||||
|
||||
impl SurfaceExt for WlSubsurface {
|
||||
fn pre_commit(self: Rc<Self>, ctx: CommitContext) -> Result<CommitAction, WlSurfaceError> {
|
||||
if ctx == CommitContext::RootCommit && self.sync() {
|
||||
|
|
|
|||
|
|
@ -10,8 +10,8 @@ use crate::ifs::wl_surface::xdg_surface::xdg_toplevel::XdgToplevel;
|
|||
use crate::ifs::wl_surface::{
|
||||
CommitAction, CommitContext, SurfaceExt, SurfaceRole, WlSurface, WlSurfaceError,
|
||||
};
|
||||
use crate::ifs::xdg_wm_base::XdgWmBaseObj;
|
||||
use crate::object::{Interface, Object, ObjectId};
|
||||
use crate::ifs::xdg_wm_base::XdgWmBase;
|
||||
use crate::object::Object;
|
||||
use crate::rect::Rect;
|
||||
use crate::tree::{FindTreeResult, FoundNode, Node, WorkspaceNode};
|
||||
use crate::utils::buffd::MsgParser;
|
||||
|
|
@ -58,7 +58,7 @@ id!(XdgSurfaceId);
|
|||
|
||||
pub struct XdgSurface {
|
||||
id: XdgSurfaceId,
|
||||
base: Rc<XdgWmBaseObj>,
|
||||
base: Rc<XdgWmBase>,
|
||||
role: Cell<XdgSurfaceRole>,
|
||||
pub surface: Rc<WlSurface>,
|
||||
requested_serial: NumCell<u32>,
|
||||
|
|
@ -102,7 +102,7 @@ trait XdgSurfaceExt {
|
|||
}
|
||||
|
||||
impl XdgSurface {
|
||||
pub fn new(wm_base: &Rc<XdgWmBaseObj>, id: XdgSurfaceId, surface: &Rc<WlSurface>) -> Self {
|
||||
pub fn new(wm_base: &Rc<XdgWmBase>, id: XdgSurfaceId, surface: &Rc<WlSurface>) -> Self {
|
||||
Self {
|
||||
id,
|
||||
base: wm_base.clone(),
|
||||
|
|
@ -254,9 +254,9 @@ impl XdgSurface {
|
|||
self.set_role(XdgSurfaceRole::XdgPopup)?;
|
||||
let mut parent = None;
|
||||
if req.parent.is_some() {
|
||||
parent = Some(self.surface.client.get_xdg_surface(req.parent)?);
|
||||
parent = Some(self.surface.client.lookup(req.parent)?);
|
||||
}
|
||||
let positioner = self.surface.client.get_xdg_positioner(req.positioner)?;
|
||||
let positioner = self.surface.client.lookup(req.positioner)?;
|
||||
if self.ext.get().is_some() {
|
||||
self.surface.client.protocol_error(
|
||||
&**self,
|
||||
|
|
@ -295,22 +295,6 @@ impl XdgSurface {
|
|||
Ok(())
|
||||
}
|
||||
|
||||
fn handle_request_(
|
||||
self: &Rc<Self>,
|
||||
request: u32,
|
||||
parser: MsgParser<'_, '_>,
|
||||
) -> Result<(), XdgSurfaceError> {
|
||||
match request {
|
||||
DESTROY => self.destroy(parser)?,
|
||||
GET_TOPLEVEL => self.get_toplevel(parser)?,
|
||||
GET_POPUP => self.get_popup(parser)?,
|
||||
SET_WINDOW_GEOMETRY => self.set_window_geometry(parser)?,
|
||||
ACK_CONFIGURE => self.ack_configure(parser)?,
|
||||
_ => unreachable!(),
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn update_extents(&self) {
|
||||
let old_extents = self.extents.get();
|
||||
let mut new_extents = self.surface.extents.get();
|
||||
|
|
@ -348,17 +332,17 @@ impl XdgSurface {
|
|||
}
|
||||
}
|
||||
|
||||
handle_request!(XdgSurface);
|
||||
object_base! {
|
||||
XdgSurface, XdgSurfaceError;
|
||||
|
||||
DESTROY => destroy,
|
||||
GET_TOPLEVEL => get_toplevel,
|
||||
GET_POPUP => get_popup,
|
||||
SET_WINDOW_GEOMETRY => set_window_geometry,
|
||||
ACK_CONFIGURE => ack_configure,
|
||||
}
|
||||
|
||||
impl Object for XdgSurface {
|
||||
fn id(&self) -> ObjectId {
|
||||
self.id.into()
|
||||
}
|
||||
|
||||
fn interface(&self) -> Interface {
|
||||
Interface::XdgSurface
|
||||
}
|
||||
|
||||
fn num_requests(&self) -> u32 {
|
||||
ACK_CONFIGURE + 1
|
||||
}
|
||||
|
|
@ -368,6 +352,8 @@ impl Object for XdgSurface {
|
|||
}
|
||||
}
|
||||
|
||||
dedicated_add_obj!(XdgSurface, XdgSurfaceId, xdg_surfaces);
|
||||
|
||||
impl SurfaceExt for XdgSurface {
|
||||
fn pre_commit(self: Rc<Self>, _ctx: CommitContext) -> Result<CommitAction, WlSurfaceError> {
|
||||
{
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ use crate::fixed::Fixed;
|
|||
use crate::ifs::wl_seat::{NodeSeatState, WlSeatGlobal};
|
||||
use crate::ifs::wl_surface::xdg_surface::{XdgSurface, XdgSurfaceError, XdgSurfaceExt};
|
||||
use crate::ifs::xdg_positioner::{XdgPositioned, XdgPositioner, CA};
|
||||
use crate::object::{Interface, Object, ObjectId};
|
||||
use crate::object::Object;
|
||||
use crate::rect::Rect;
|
||||
use crate::render::Renderer;
|
||||
use crate::tree::{FindTreeResult, FoundNode, Node, NodeId, WorkspaceNode};
|
||||
|
|
@ -208,12 +208,7 @@ impl XdgPopup {
|
|||
|
||||
fn reposition(self: &Rc<Self>, parser: MsgParser<'_, '_>) -> Result<(), RepositionError> {
|
||||
let req: Reposition = self.xdg.surface.client.parse(&**self, parser)?;
|
||||
*self.pos.borrow_mut() = self
|
||||
.xdg
|
||||
.surface
|
||||
.client
|
||||
.get_xdg_positioner(req.positioner)?
|
||||
.value();
|
||||
*self.pos.borrow_mut() = self.xdg.surface.client.lookup(req.positioner)?.value();
|
||||
if let Some(parent) = self.parent.get() {
|
||||
self.update_position(&parent)?;
|
||||
let rel = self.relative_position.get();
|
||||
|
|
@ -234,7 +229,7 @@ impl XdgPopup {
|
|||
}
|
||||
}
|
||||
|
||||
handle_request! {
|
||||
object_base! {
|
||||
XdgPopup, XdgPopupError;
|
||||
|
||||
DESTROY => destroy,
|
||||
|
|
@ -243,14 +238,6 @@ handle_request! {
|
|||
}
|
||||
|
||||
impl Object for XdgPopup {
|
||||
fn id(&self) -> ObjectId {
|
||||
self.id.into()
|
||||
}
|
||||
|
||||
fn interface(&self) -> Interface {
|
||||
Interface::XdgPopup
|
||||
}
|
||||
|
||||
fn num_requests(&self) -> u32 {
|
||||
let last_req = match self.xdg.base.version {
|
||||
0..=2 => GRAB,
|
||||
|
|
@ -267,6 +254,8 @@ impl Object for XdgPopup {
|
|||
}
|
||||
}
|
||||
|
||||
simple_add_obj!(XdgPopup);
|
||||
|
||||
impl Node for XdgPopup {
|
||||
fn id(&self) -> NodeId {
|
||||
self.node_id.into()
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ use crate::cursor::KnownCursor;
|
|||
use crate::fixed::Fixed;
|
||||
use crate::ifs::wl_seat::{NodeSeatState, WlSeatGlobal};
|
||||
use crate::ifs::wl_surface::xdg_surface::{XdgSurface, XdgSurfaceError, XdgSurfaceExt};
|
||||
use crate::object::{Interface, Object, ObjectId};
|
||||
use crate::object::Object;
|
||||
use crate::rect::Rect;
|
||||
use crate::render::Renderer;
|
||||
use crate::tree::{ContainerNode, FindTreeResult};
|
||||
|
|
@ -200,7 +200,7 @@ impl XdgToplevel {
|
|||
let req: SetParent = self.xdg.surface.client.parse(self, parser)?;
|
||||
let mut parent = None;
|
||||
if req.parent.is_some() {
|
||||
parent = Some(self.xdg.surface.client.get_xdg_toplevel(req.parent)?);
|
||||
parent = Some(self.xdg.surface.client.lookup(req.parent)?);
|
||||
}
|
||||
self.parent.set(parent);
|
||||
Ok(())
|
||||
|
|
@ -226,7 +226,7 @@ impl XdgToplevel {
|
|||
|
||||
fn move_(&self, parser: MsgParser<'_, '_>) -> Result<(), MoveError> {
|
||||
let req: Move = self.xdg.surface.client.parse(self, parser)?;
|
||||
let seat = self.xdg.surface.client.get_wl_seat(req.seat)?;
|
||||
let seat = self.xdg.surface.client.lookup(req.seat)?;
|
||||
if let Some(parent) = self.parent_node.get() {
|
||||
if let Some(float) = parent.into_float() {
|
||||
seat.move_(&float);
|
||||
|
|
@ -301,31 +301,6 @@ impl XdgToplevel {
|
|||
Ok(())
|
||||
}
|
||||
|
||||
fn handle_request_(
|
||||
&self,
|
||||
request: u32,
|
||||
parser: MsgParser<'_, '_>,
|
||||
) -> Result<(), XdgToplevelError> {
|
||||
match request {
|
||||
DESTROY => self.destroy(parser)?,
|
||||
SET_PARENT => self.set_parent(parser)?,
|
||||
SET_TITLE => self.set_title(parser)?,
|
||||
SET_APP_ID => self.set_app_id(parser)?,
|
||||
SHOW_WINDOW_MENU => self.show_window_menu(parser)?,
|
||||
MOVE => self.move_(parser)?,
|
||||
RESIZE => self.resize(parser)?,
|
||||
SET_MAX_SIZE => self.set_max_size(parser)?,
|
||||
SET_MIN_SIZE => self.set_min_size(parser)?,
|
||||
SET_MAXIMIZED => self.set_maximized(parser)?,
|
||||
UNSET_MAXIMIZED => self.unset_maximized(parser)?,
|
||||
SET_FULLSCREEN => self.set_fullscreen(parser)?,
|
||||
UNSET_FULLSCREEN => self.unset_fullscreen(parser)?,
|
||||
SET_MINIMIZED => self.set_minimized(parser)?,
|
||||
_ => unreachable!(),
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn map_child(self: &Rc<Self>, parent: &XdgToplevel) {
|
||||
let workspace = match parent.xdg.workspace.get() {
|
||||
Some(w) => w,
|
||||
|
|
@ -412,17 +387,26 @@ impl XdgToplevel {
|
|||
}
|
||||
}
|
||||
|
||||
handle_request!(XdgToplevel);
|
||||
object_base! {
|
||||
XdgToplevel, XdgToplevelError;
|
||||
|
||||
DESTROY => destroy,
|
||||
SET_PARENT => set_parent,
|
||||
SET_TITLE => set_title,
|
||||
SET_APP_ID => set_app_id,
|
||||
SHOW_WINDOW_MENU => show_window_menu,
|
||||
MOVE => move_,
|
||||
RESIZE => resize,
|
||||
SET_MAX_SIZE => set_max_size,
|
||||
SET_MIN_SIZE => set_min_size,
|
||||
SET_MAXIMIZED => set_maximized,
|
||||
UNSET_MAXIMIZED => unset_maximized,
|
||||
SET_FULLSCREEN => set_fullscreen,
|
||||
UNSET_FULLSCREEN => unset_fullscreen,
|
||||
SET_MINIMIZED => set_minimized,
|
||||
}
|
||||
|
||||
impl Object for XdgToplevel {
|
||||
fn id(&self) -> ObjectId {
|
||||
self.id.into()
|
||||
}
|
||||
|
||||
fn interface(&self) -> Interface {
|
||||
Interface::XdgToplevel
|
||||
}
|
||||
|
||||
fn num_requests(&self) -> u32 {
|
||||
SET_MINIMIZED + 1
|
||||
}
|
||||
|
|
@ -437,6 +421,8 @@ impl Object for XdgToplevel {
|
|||
}
|
||||
}
|
||||
|
||||
dedicated_add_obj!(XdgToplevel, XdgToplevelId, xdg_toplevel);
|
||||
|
||||
impl Node for XdgToplevel {
|
||||
fn id(&self) -> NodeId {
|
||||
self.node_id.into()
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue