diff --git a/src/config.rs b/src/config.rs index 85724ff8..5e1b7c49 100644 --- a/src/config.rs +++ b/src/config.rs @@ -9,7 +9,7 @@ use { config::handler::ConfigProxyHandler, ifs::wl_seat::SeatId, state::State, - tree::ToplevelData, + tree::{TileState, ToplevelData}, utils::{ clonecell::CloneCell, nice::{JAY_NO_REALTIME, dont_allow_config_so}, @@ -29,7 +29,7 @@ use { input::{InputDevice, Seat, SwitchEvent}, keyboard::{mods::Modifiers, syms::KeySym}, video::{Connector, DrmDevice}, - window::{self, TileState}, + window::{self}, }, libloading::Library, std::{cell::Cell, io, mem, path::Path, ptr, rc::Rc}, diff --git a/src/config/handler.rs b/src/config/handler.rs index 112f8024..31cd05d2 100644 --- a/src/config/handler.rs +++ b/src/config/handler.rs @@ -29,8 +29,9 @@ use { theme::{Color, ThemeSized}, tree::{ ContainerNode, ContainerSplit, FloatNode, Node, NodeVisitorBase, OutputNode, - TearingMode, ToplevelData, ToplevelNode, VrrMode, WorkspaceNode, toplevel_create_split, - toplevel_parent_container, toplevel_set_floating, toplevel_set_workspace, + TearingMode, TileState, ToplevelData, ToplevelNode, VrrMode, WorkspaceNode, + toplevel_create_split, toplevel_parent_container, toplevel_set_floating, + toplevel_set_workspace, }, utils::{ asyncevent::AsyncEvent, @@ -72,7 +73,7 @@ use { Format as ConfigFormat, GfxApi, TearingMode as ConfigTearingMode, Transform, VrrMode as ConfigVrrMode, }, - window::{TileState, Window, WindowMatcher}, + window::{TileState as ConfigTileState, Window, WindowMatcher}, workspace::WorkspaceDisplayOrder, xwayland::XScalingMode, }, @@ -2289,8 +2290,11 @@ impl ConfigProxyHandler { fn handle_set_window_matcher_initial_tile_state( &self, matcher: WindowMatcher, - tile_state: TileState, + tile_state: ConfigTileState, ) -> Result<(), CphError> { + let Ok(tile_state) = tile_state.try_into() else { + return Err(CphError::UnknownTileState(tile_state)); + }; let m = self.get_window_matcher(matcher)?; self.window_matcher_initial_tile_state .set(matcher, (m, tile_state)); @@ -3542,6 +3546,8 @@ enum CphError { UnknownGfxApi(GfxApi), #[error("Unknown fallback output mode {0:?}")] UnknownFallbackOutputMode(FallbackOutputMode), + #[error("Unknown tile state {0:?}")] + UnknownTileState(ConfigTileState), } trait WithRequestName { diff --git a/src/ifs/wl_surface/x_surface/xwindow.rs b/src/ifs/wl_surface/x_surface/xwindow.rs index a1761d18..f1c68730 100644 --- a/src/ifs/wl_surface/x_surface/xwindow.rs +++ b/src/ifs/wl_surface/x_surface/xwindow.rs @@ -13,7 +13,7 @@ use { tree::{ ContainerSplit, Direction, FindTreeResult, FindTreeUsecase, FoundNode, Node, NodeId, NodeLayerLink, NodeLocation, NodeVisitor, OutputNode, StackedNode, TileDragDestination, - ToplevelData, ToplevelNode, ToplevelNodeBase, ToplevelType, WorkspaceNode, + TileState, ToplevelData, ToplevelNode, ToplevelNodeBase, ToplevelType, WorkspaceNode, default_tile_drag_destination, }, utils::{clonecell::CloneCell, copyhashmap::CopyHashMap, linkedlist::LinkedNode}, @@ -22,7 +22,6 @@ use { xwayland::XWaylandEvent, }, bstr::BString, - jay_config::window::TileState, std::{ cell::{Cell, RefCell}, ops::{Deref, Not}, diff --git a/src/ifs/wl_surface/xdg_surface/xdg_toplevel.rs b/src/ifs/wl_surface/xdg_surface/xdg_toplevel.rs index d8c6decf..4d85be92 100644 --- a/src/ifs/wl_surface/xdg_surface/xdg_toplevel.rs +++ b/src/ifs/wl_surface/xdg_surface/xdg_toplevel.rs @@ -26,7 +26,7 @@ use { state::State, tree::{ ContainerSplit, Direction, FindTreeResult, FindTreeUsecase, FoundNode, Node, NodeId, - NodeLayerLink, NodeLocation, NodeVisitor, OutputNode, TileDragDestination, + NodeLayerLink, NodeLocation, NodeVisitor, OutputNode, TileDragDestination, TileState, ToplevelData, ToplevelNode, ToplevelNodeBase, ToplevelNodeId, ToplevelType, WorkspaceNode, default_tile_drag_destination, }, @@ -37,7 +37,6 @@ use { }, ahash::AHashMap, arrayvec::ArrayVec, - jay_config::window::TileState, std::{ cell::{Cell, RefCell}, fmt::{Debug, Formatter}, diff --git a/src/state.rs b/src/state.rs index e349bd3f..7e277113 100644 --- a/src/state.rs +++ b/src/state.rs @@ -96,8 +96,8 @@ use { tree::{ ContainerNode, ContainerSplit, Direction, DisplayNode, FindTreeUsecase, FloatNode, FoundNode, LatchListener, Node, NodeIds, NodeVisitorBase, OutputNode, PlaceholderNode, - TearingMode, ToplevelData, ToplevelNode, ToplevelNodeBase, VrrMode, WorkspaceNode, - WsMoveConfig, generic_node_visitor, move_ws_to_output, + TearingMode, TileState, ToplevelData, ToplevelNode, ToplevelNodeBase, VrrMode, + WorkspaceNode, WsMoveConfig, generic_node_visitor, move_ws_to_output, }, udmabuf::UdmabufHolder, utils::{ @@ -135,7 +135,7 @@ use { }, ahash::AHashMap, bstr::ByteSlice, - jay_config::{PciId, video::Transform, window::TileState, workspace::WorkspaceDisplayOrder}, + jay_config::{PciId, video::Transform, workspace::WorkspaceDisplayOrder}, std::{ cell::{Cell, RefCell}, fmt::{Debug, Formatter}, diff --git a/src/tree.rs b/src/tree.rs index 5aeddbba..36636d6c 100644 --- a/src/tree.rs +++ b/src/tree.rs @@ -23,7 +23,7 @@ use { renderer::Renderer, utils::{linkedlist::NodeRef, numcell::NumCell}, }, - jay_config::Direction as JayDirection, + jay_config::{Direction as JayDirection, window::TileState as ConfigTileState}, linearize::{Linearize, LinearizeExt}, std::{ fmt::{Debug, Display}, @@ -46,6 +46,34 @@ mod toplevel; mod walker; mod workspace; +#[derive(Copy, Clone, Debug, Hash, Eq, PartialEq, Linearize)] +pub enum TileState { + Tiled, + Floating, +} + +impl TryFrom for TileState { + type Error = (); + + fn try_from(value: ConfigTileState) -> Result { + let v = match value { + ConfigTileState::Tiled => TileState::Tiled, + ConfigTileState::Floating => TileState::Floating, + _ => return Err(()), + }; + Ok(v) + } +} + +impl Into for TileState { + fn into(self) -> ConfigTileState { + match self { + TileState::Tiled => ConfigTileState::Tiled, + TileState::Floating => ConfigTileState::Floating, + } + } +} + #[derive(Copy, Clone, Debug, Eq, PartialEq)] pub enum Direction { Unspecified,