1
0
Fork 0
forked from wry/wry

tree: make FindTreeUsecase handling more explicit

This commit is contained in:
Julian Orth 2025-12-16 20:39:21 +01:00
parent 867172f20b
commit 8d5ac9a2b7
5 changed files with 29 additions and 13 deletions

View file

@ -396,8 +396,10 @@ impl Node for Xwindow {
tree: &mut Vec<FoundNode>, tree: &mut Vec<FoundNode>,
usecase: FindTreeUsecase, usecase: FindTreeUsecase,
) -> FindTreeResult { ) -> FindTreeResult {
if usecase == FindTreeUsecase::SelectToplevel { match usecase {
return FindTreeResult::AcceptsInput; FindTreeUsecase::None => {}
FindTreeUsecase::SelectToplevel => return FindTreeResult::AcceptsInput,
FindTreeUsecase::SelectWorkspace => return FindTreeResult::Other,
} }
let rect = self.x.surface.buffer_abs_pos.get(); let rect = self.x.surface.buffer_abs_pos.get();
if x < rect.width() && y < rect.height() { if x < rect.width() && y < rect.height() {

View file

@ -340,8 +340,10 @@ impl Node for XdgPopup {
tree: &mut Vec<FoundNode>, tree: &mut Vec<FoundNode>,
usecase: FindTreeUsecase, usecase: FindTreeUsecase,
) -> FindTreeResult { ) -> FindTreeResult {
if usecase == FindTreeUsecase::SelectToplevel { match usecase {
return FindTreeResult::Other; FindTreeUsecase::None => {}
FindTreeUsecase::SelectToplevel => return FindTreeResult::Other,
FindTreeUsecase::SelectWorkspace => return FindTreeResult::Other,
} }
self.xdg.find_tree_at(x, y, tree) self.xdg.find_tree_at(x, y, tree)
} }

View file

@ -598,8 +598,10 @@ impl Node for XdgToplevel {
tree: &mut Vec<FoundNode>, tree: &mut Vec<FoundNode>,
usecase: FindTreeUsecase, usecase: FindTreeUsecase,
) -> FindTreeResult { ) -> FindTreeResult {
if usecase == FindTreeUsecase::SelectToplevel { match usecase {
return FindTreeResult::AcceptsInput; FindTreeUsecase::None => {}
FindTreeUsecase::SelectToplevel => return FindTreeResult::AcceptsInput,
FindTreeUsecase::SelectWorkspace => return FindTreeResult::Other,
} }
self.xdg.find_tree_at(x, y, tree) self.xdg.find_tree_at(x, y, tree)
} }

View file

@ -109,7 +109,7 @@ impl FindTreeResult {
} }
} }
#[derive(Copy, Clone, Eq, PartialEq)] #[derive(Copy, Clone)]
pub enum FindTreeUsecase { pub enum FindTreeUsecase {
None, None,
SelectToplevel, SelectToplevel,

View file

@ -1073,8 +1073,10 @@ impl OutputNode {
tree: &mut Vec<FoundNode>, tree: &mut Vec<FoundNode>,
usecase: FindTreeUsecase, usecase: FindTreeUsecase,
) -> FindTreeResult { ) -> FindTreeResult {
if usecase == FindTreeUsecase::SelectToplevel { match usecase {
return FindTreeResult::Other; FindTreeUsecase::None => {}
FindTreeUsecase::SelectToplevel => return FindTreeResult::Other,
FindTreeUsecase::SelectWorkspace => return FindTreeResult::Other,
} }
let len = tree.len(); let len = tree.len();
for layer in layers.iter().copied() { for layer in layers.iter().copied() {
@ -1634,9 +1636,12 @@ impl Node for OutputNode {
usecase: FindTreeUsecase, usecase: FindTreeUsecase,
) -> FindTreeResult { ) -> FindTreeResult {
if self.state.lock.locked.get() { if self.state.lock.locked.get() {
if usecase != FindTreeUsecase::SelectToplevel let allow_surface = match usecase {
&& let Some(ls) = self.lock_surface.get() FindTreeUsecase::None => true,
{ FindTreeUsecase::SelectToplevel => false,
FindTreeUsecase::SelectWorkspace => false,
};
if allow_surface && let Some(ls) = self.lock_surface.get() {
tree.push(FoundNode { tree.push(FoundNode {
node: ls.clone(), node: ls.clone(),
x, x,
@ -1647,7 +1652,12 @@ impl Node for OutputNode {
return FindTreeResult::AcceptsInput; return FindTreeResult::AcceptsInput;
} }
let ws_rect_rel = self.workspace_rect_rel.get(); let ws_rect_rel = self.workspace_rect_rel.get();
if usecase == FindTreeUsecase::SelectWorkspace && ws_rect_rel.contains(x, y) { let select_workspace = match usecase {
FindTreeUsecase::None => false,
FindTreeUsecase::SelectToplevel => false,
FindTreeUsecase::SelectWorkspace => true,
};
if select_workspace && ws_rect_rel.contains(x, y) {
let (x, y) = ws_rect_rel.translate(x, y); let (x, y) = ws_rect_rel.translate(x, y);
if let Some(ws) = self.workspace.get() { if let Some(ws) = self.workspace.get() {
tree.push(FoundNode { tree.push(FoundNode {