diff --git a/src/shell/workspace.rs b/src/shell/workspace.rs index bf346ce4..11ee61c7 100644 --- a/src/shell/workspace.rs +++ b/src/shell/workspace.rs @@ -393,8 +393,26 @@ impl Workspace { .chain(self.tiling_layer.windows().map(|(_, w, _)| w)) } + pub fn is_fullscreen(&self, mapped: &CosmicMapped) -> bool { + self.fullscreen + .values() + .any(|s| s == &mapped.active_window()) + } + pub fn is_floating(&self, mapped: &CosmicMapped) -> bool { - self.floating_layer.mapped().any(|m| m == mapped) + !self + .fullscreen + .values() + .any(|s| s == &mapped.active_window()) + && self.floating_layer.mapped().any(|m| m == mapped) + } + + pub fn is_tiled(&self, mapped: &CosmicMapped) -> bool { + !self + .fullscreen + .values() + .any(|s| s == &mapped.active_window()) + && self.tiling_layer.mapped().any(|(_, m, _)| m == mapped) } pub fn render_output<'a, R>( diff --git a/src/wayland/handlers/xdg_shell/popup.rs b/src/wayland/handlers/xdg_shell/popup.rs index 3dfa770c..6e835f88 100644 --- a/src/wayland/handlers/xdg_shell/popup.rs +++ b/src/wayland/handlers/xdg_shell/popup.rs @@ -38,7 +38,7 @@ impl Shell { let window_geo_offset = window.geometry().loc; let window_loc = element_geo.loc + offset + window_geo_offset; let anchor_point = get_anchor_point(&positioner) + window_loc; - if elem.is_tiled().unwrap() { + if workspace.is_tiled(elem) { if !unconstrain_xdg_popup_tile(surface, element_geo) { if let Some(output) = workspace.output_under(anchor_point) { unconstrain_xdg_popup(surface, window_loc, output.geometry());