Add workspace_overview_is_open function; put in a utils::quirks mod

This is increasingly not just related to screencopy, so it's weird to
add there. I don't see any other module that fits, so add one called
"quirks" (like the Linux kernel uses for device-specific handling in
generic drives).
This commit is contained in:
Ian Douglas Scott 2024-07-12 16:03:17 -07:00 committed by Victoria Brekenfeld
parent 355b142c52
commit 0636bcdef3
6 changed files with 24 additions and 16 deletions

View file

@ -7,11 +7,9 @@ use crate::{
}, },
shell::Shell, shell::Shell,
state::SurfaceDmabufFeedback, state::SurfaceDmabufFeedback,
utils::prelude::*, utils::{prelude::*, quirks::workspace_overview_is_open},
wayland::{ wayland::{
handlers::screencopy::{ handlers::screencopy::{submit_buffer, FrameHolder, SessionData},
submit_buffer, FrameHolder, SessionData, WORKSPACE_OVERVIEW_NAMESPACE,
},
protocols::screencopy::{ protocols::screencopy::{
FailureReason, Frame as ScreencopyFrame, Session as ScreencopySession, FailureReason, Frame as ScreencopyFrame, Session as ScreencopySession,
}, },
@ -48,7 +46,7 @@ use smithay::{
Bind, ImportDma, Offscreen, Renderer, Texture, Bind, ImportDma, Offscreen, Renderer, Texture,
}, },
}, },
desktop::{layer_map_for_output, utils::OutputPresentationFeedback}, desktop::utils::OutputPresentationFeedback,
output::{Output, OutputNoMode}, output::{Output, OutputNoMode},
reexports::{ reexports::{
calloop::{ calloop::{
@ -871,10 +869,7 @@ impl SurfaceThreadState {
std::mem::drop(shell); std::mem::drop(shell);
let element_filter = if layer_map_for_output(output) let element_filter = if workspace_overview_is_open(output) {
.layers()
.any(|s| s.namespace() == WORKSPACE_OVERVIEW_NAMESPACE)
{
ElementFilter::LayerShellOnly ElementFilter::LayerShellOnly
} else { } else {
ElementFilter::All ElementFilter::All

View file

@ -20,11 +20,11 @@ use crate::{
CosmicMappedRenderElement, OverviewMode, SeatExt, SessionLock, Trigger, WorkspaceDelta, CosmicMappedRenderElement, OverviewMode, SeatExt, SessionLock, Trigger, WorkspaceDelta,
WorkspaceRenderElement, WorkspaceRenderElement,
}, },
utils::prelude::*, utils::{prelude::*, quirks::WORKSPACE_OVERVIEW_NAMESPACE},
wayland::{ wayland::{
handlers::{ handlers::{
data_device::get_dnd_icon, data_device::get_dnd_icon,
screencopy::{render_session, FrameHolder, SessionData, WORKSPACE_OVERVIEW_NAMESPACE}, screencopy::{render_session, FrameHolder, SessionData},
}, },
protocols::workspace::WorkspaceHandle, protocols::workspace::WorkspaceHandle,
}, },

View file

@ -52,11 +52,11 @@ use smithay::{
use crate::{ use crate::{
backend::render::animations::spring::{Spring, SpringParams}, backend::render::animations::spring::{Spring, SpringParams},
config::Config, config::Config,
utils::prelude::*, utils::{prelude::*, quirks::WORKSPACE_OVERVIEW_NAMESPACE},
wayland::{ wayland::{
handlers::{ handlers::{
screencopy::WORKSPACE_OVERVIEW_NAMESPACE, toplevel_management::minimize_rectangle, toplevel_management::minimize_rectangle, xdg_activation::ActivationContext,
xdg_activation::ActivationContext, xdg_shell::popup::get_popup_toplevel, xdg_shell::popup::get_popup_toplevel,
}, },
protocols::{ protocols::{
toplevel_info::{ toplevel_info::{

View file

@ -5,6 +5,7 @@ pub(crate) use self::ids::id_gen;
pub mod geometry; pub mod geometry;
pub mod iced; pub mod iced;
pub mod prelude; pub mod prelude;
pub mod quirks;
pub mod rlimit; pub mod rlimit;
pub mod screenshot; pub mod screenshot;
pub mod tween; pub mod tween;

14
src/utils/quirks.rs Normal file
View file

@ -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)
}

View file

@ -39,8 +39,6 @@ pub use self::render::*;
use self::user_data::*; use self::user_data::*;
pub use self::user_data::{FrameHolder, ScreencopySessions, SessionData, SessionHolder}; pub use self::user_data::{FrameHolder, ScreencopySessions, SessionData, SessionHolder};
pub const WORKSPACE_OVERVIEW_NAMESPACE: &str = "cosmic-workspace-overview";
impl ScreencopyHandler for State { impl ScreencopyHandler for State {
fn screencopy_state(&mut self) -> &mut ScreencopyState { fn screencopy_state(&mut self) -> &mut ScreencopyState {
&mut self.common.screencopy_state &mut self.common.screencopy_state