cosmic-workspaces/src/backend/mod.rs
Ian Douglas Scott c75a48535a Add a mock backend for testing (including on other compositors)
Should help determine which issues are cosmic-comp bugs.
2024-04-23 13:44:59 -07:00

75 lines
2.3 KiB
Rust

// Copyright 2023 System76 <info@system76.com>
// SPDX-License-Identifier: GPL-3.0-only
//! The backend of getting workspace/toplevel information and previews, and
//! sending commands to change them.
//!
//! There are two backends: one that uses cosmic-comp protocols, and a mock
//! backend for testing without any special protocols.
use cosmic::{
cctk::wayland_client::protocol::wl_output, iced_sctk::subsurface_widget::SubsurfaceBuffer,
};
use std::collections::HashSet;
// Wayland backend using cosmic-comp specific protocols
#[cfg(not(feature = "mock-backend"))]
mod wayland;
#[cfg(not(feature = "mock-backend"))]
pub use cosmic::cctk::{
cosmic_protocols::{
toplevel_info::v1::client::zcosmic_toplevel_handle_v1::ZcosmicToplevelHandleV1,
workspace::v1::client::zcosmic_workspace_handle_v1::ZcosmicWorkspaceHandleV1,
},
toplevel_info::ToplevelInfo,
workspace::Workspace,
};
#[cfg(not(feature = "mock-backend"))]
pub use wayland::subscription;
// Mock backend
#[cfg(feature = "mock-backend")]
mod mock;
#[cfg(feature = "mock-backend")]
pub use mock::{
subscription, ToplevelInfo, Workspace, ZcosmicToplevelHandleV1, ZcosmicWorkspaceHandleV1,
};
#[derive(Clone, Debug, Default)]
pub struct CaptureFilter {
pub workspaces_on_outputs: Vec<wl_output::WlOutput>,
pub toplevels_on_workspaces: Vec<ZcosmicWorkspaceHandleV1>,
}
#[derive(Clone, Debug)]
pub struct CaptureImage {
pub width: u32,
pub height: u32,
pub wl_buffer: SubsurfaceBuffer,
#[cfg(feature = "no-subsurfaces")]
pub image: cosmic::widget::image::Handle,
}
#[derive(Clone, Debug)]
pub enum Event {
CmdSender(calloop::channel::Sender<Cmd>),
Workspaces(Vec<(HashSet<wl_output::WlOutput>, Workspace)>),
WorkspaceCapture(ZcosmicWorkspaceHandleV1, wl_output::WlOutput, CaptureImage),
NewToplevel(ZcosmicToplevelHandleV1, ToplevelInfo),
UpdateToplevel(ZcosmicToplevelHandleV1, ToplevelInfo),
CloseToplevel(ZcosmicToplevelHandleV1),
ToplevelCapture(ZcosmicToplevelHandleV1, CaptureImage),
}
#[derive(Debug)]
pub enum Cmd {
CaptureFilter(CaptureFilter),
ActivateToplevel(ZcosmicToplevelHandleV1),
CloseToplevel(ZcosmicToplevelHandleV1),
MoveToplevelToWorkspace(
ZcosmicToplevelHandleV1,
ZcosmicWorkspaceHandleV1,
wl_output::WlOutput,
),
ActivateWorkspace(ZcosmicWorkspaceHandleV1),
}