Adds support for cosmic-workspace-v2 pin, unpin, move_after, and move_before requests. Both features need some work with workspaces span displays mode, so that will need more fixes later. We also want to generate a unique id for pinned workspaces to send in the ext-workspace-v1 protocol. But that isn't a strict requirement for anything. So I haven't yet fully implemented that. We'll also want to persist other things, like workspace naming when that's added. Overall, though, with separate workspaces per display, this is working pretty well.
47 lines
1.1 KiB
Rust
47 lines
1.1 KiB
Rust
// SPDX-License-Identifier: GPL-3.0-only
|
|
|
|
use serde::{Deserialize, Serialize};
|
|
|
|
use crate::output::EdidProduct;
|
|
|
|
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
|
|
pub struct WorkspaceConfig {
|
|
pub workspace_mode: WorkspaceMode,
|
|
#[serde(default)]
|
|
pub workspace_layout: WorkspaceLayout,
|
|
}
|
|
|
|
impl Default for WorkspaceConfig {
|
|
fn default() -> Self {
|
|
Self {
|
|
workspace_mode: WorkspaceMode::OutputBound,
|
|
workspace_layout: WorkspaceLayout::Vertical,
|
|
}
|
|
}
|
|
}
|
|
|
|
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
|
|
pub enum WorkspaceMode {
|
|
OutputBound,
|
|
Global,
|
|
}
|
|
|
|
#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, Serialize, Deserialize)]
|
|
pub enum WorkspaceLayout {
|
|
#[default]
|
|
Vertical,
|
|
Horizontal,
|
|
}
|
|
|
|
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
|
|
pub struct OutputMatch {
|
|
pub name: String,
|
|
pub edid: Option<EdidProduct>,
|
|
}
|
|
|
|
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
|
|
pub struct PinnedWorkspace {
|
|
pub output: OutputMatch,
|
|
pub tiling_enabled: bool,
|
|
// TODO: name, id
|
|
}
|