tree: make FindTreeUsecase handling more explicit
This commit is contained in:
parent
867172f20b
commit
8d5ac9a2b7
5 changed files with 29 additions and 13 deletions
|
|
@ -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() {
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -109,7 +109,7 @@ impl FindTreeResult {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Copy, Clone, Eq, PartialEq)]
|
#[derive(Copy, Clone)]
|
||||||
pub enum FindTreeUsecase {
|
pub enum FindTreeUsecase {
|
||||||
None,
|
None,
|
||||||
SelectToplevel,
|
SelectToplevel,
|
||||||
|
|
|
||||||
|
|
@ -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 {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue