diff --git a/src/backend/kms/surface/mod.rs b/src/backend/kms/surface/mod.rs index 18114192..33c08be6 100644 --- a/src/backend/kms/surface/mod.rs +++ b/src/backend/kms/surface/mod.rs @@ -7,11 +7,9 @@ use crate::{ }, shell::Shell, state::SurfaceDmabufFeedback, - utils::prelude::*, + utils::{prelude::*, quirks::workspace_overview_is_open}, wayland::{ - handlers::screencopy::{ - submit_buffer, FrameHolder, SessionData, WORKSPACE_OVERVIEW_NAMESPACE, - }, + handlers::screencopy::{submit_buffer, FrameHolder, SessionData}, protocols::screencopy::{ FailureReason, Frame as ScreencopyFrame, Session as ScreencopySession, }, @@ -48,7 +46,7 @@ use smithay::{ Bind, ImportDma, Offscreen, Renderer, Texture, }, }, - desktop::{layer_map_for_output, utils::OutputPresentationFeedback}, + desktop::utils::OutputPresentationFeedback, output::{Output, OutputNoMode}, reexports::{ calloop::{ @@ -871,10 +869,7 @@ impl SurfaceThreadState { std::mem::drop(shell); - let element_filter = if layer_map_for_output(output) - .layers() - .any(|s| s.namespace() == WORKSPACE_OVERVIEW_NAMESPACE) - { + let element_filter = if workspace_overview_is_open(output) { ElementFilter::LayerShellOnly } else { ElementFilter::All diff --git a/src/backend/render/mod.rs b/src/backend/render/mod.rs index 70034188..113aba37 100644 --- a/src/backend/render/mod.rs +++ b/src/backend/render/mod.rs @@ -20,11 +20,11 @@ use crate::{ CosmicMappedRenderElement, OverviewMode, SeatExt, SessionLock, Trigger, WorkspaceDelta, WorkspaceRenderElement, }, - utils::prelude::*, + utils::{prelude::*, quirks::WORKSPACE_OVERVIEW_NAMESPACE}, wayland::{ handlers::{ data_device::get_dnd_icon, - screencopy::{render_session, FrameHolder, SessionData, WORKSPACE_OVERVIEW_NAMESPACE}, + screencopy::{render_session, FrameHolder, SessionData}, }, protocols::workspace::WorkspaceHandle, }, diff --git a/src/shell/mod.rs b/src/shell/mod.rs index 7c269e72..6d512141 100644 --- a/src/shell/mod.rs +++ b/src/shell/mod.rs @@ -52,11 +52,11 @@ use smithay::{ use crate::{ backend::render::animations::spring::{Spring, SpringParams}, config::Config, - utils::prelude::*, + utils::{prelude::*, quirks::WORKSPACE_OVERVIEW_NAMESPACE}, wayland::{ handlers::{ - screencopy::WORKSPACE_OVERVIEW_NAMESPACE, toplevel_management::minimize_rectangle, - xdg_activation::ActivationContext, xdg_shell::popup::get_popup_toplevel, + toplevel_management::minimize_rectangle, xdg_activation::ActivationContext, + xdg_shell::popup::get_popup_toplevel, }, protocols::{ toplevel_info::{ diff --git a/src/utils/mod.rs b/src/utils/mod.rs index 75a928b3..4da680ef 100644 --- a/src/utils/mod.rs +++ b/src/utils/mod.rs @@ -5,6 +5,7 @@ pub(crate) use self::ids::id_gen; pub mod geometry; pub mod iced; pub mod prelude; +pub mod quirks; pub mod rlimit; pub mod screenshot; pub mod tween; diff --git a/src/utils/quirks.rs b/src/utils/quirks.rs new file mode 100644 index 00000000..2ecda9fd --- /dev/null +++ b/src/utils/quirks.rs @@ -0,0 +1,14 @@ +// SPDX-License-Identifier: GPL-3.0-only + +use smithay::{desktop::layer_map_for_output, output::Output}; + +/// Layer shell namespace used by `cosmic-workspaces` +// TODO: Avoid special case, or add protocol to expose required behavior +pub const WORKSPACE_OVERVIEW_NAMESPACE: &str = "cosmic-workspace-overview"; + +/// Check if a workspace overview shell surface is open on the output +pub fn workspace_overview_is_open(output: &Output) -> bool { + layer_map_for_output(output) + .layers() + .any(|s| s.namespace() == WORKSPACE_OVERVIEW_NAMESPACE) +} diff --git a/src/wayland/handlers/screencopy/mod.rs b/src/wayland/handlers/screencopy/mod.rs index 9df67879..19b04bf3 100644 --- a/src/wayland/handlers/screencopy/mod.rs +++ b/src/wayland/handlers/screencopy/mod.rs @@ -39,8 +39,6 @@ pub use self::render::*; use self::user_data::*; pub use self::user_data::{FrameHolder, ScreencopySessions, SessionData, SessionHolder}; -pub const WORKSPACE_OVERVIEW_NAMESPACE: &str = "cosmic-workspace-overview"; - impl ScreencopyHandler for State { fn screencopy_state(&mut self) -> &mut ScreencopyState { &mut self.common.screencopy_state