wayland: toplevel management protocol

This commit is contained in:
Victoria Brekenfeld 2022-07-18 21:26:02 +02:00
parent 4f142d50b3
commit 6b659eb107
9 changed files with 340 additions and 54 deletions

View file

@ -22,9 +22,11 @@ use cosmic_protocols::workspace::v1::server::zcosmic_workspace_handle_v1::State
use crate::{
config::{Config, WorkspaceMode as ConfigMode},
//state::ClientState,
utils::prelude::*,
wayland::protocols::{
toplevel_info::ToplevelInfoState,
toplevel_management::{ToplevelManagementState, ManagementCapabilities},
workspace::{
WorkspaceCapabilities, WorkspaceGroupHandle, WorkspaceHandle, WorkspaceState,
WorkspaceUpdateGuard,
@ -52,6 +54,7 @@ pub struct Shell {
// wayland_state
pub layer_shell_state: WlrLayerShellState,
pub toplevel_info_state: ToplevelInfoState<State>,
pub toplevel_management_state: ToplevelManagementState,
pub xdg_shell_state: XdgShellState,
pub workspace_state: WorkspaceState<State>,
}
@ -81,10 +84,24 @@ const UNINIT_SPACE: MaybeUninit<Workspace> = MaybeUninit::uninit();
impl Shell {
pub fn new(config: &Config, dh: &DisplayHandle) -> Self {
// TODO: Privileged protocols
let layer_shell_state = WlrLayerShellState::new::<State, _>(dh, None);
let toplevel_info_state = ToplevelInfoState::new(dh, |_| true);
let xdg_shell_state = XdgShellState::new::<State, _>(dh, None);
let mut workspace_state = WorkspaceState::new(dh, |_| true);
let toplevel_info_state = ToplevelInfoState::new(
dh,
//|client| client.get_data::<ClientState>().unwrap().privileged,
|_| true);
let toplevel_management_state = ToplevelManagementState::new::<State, _>(
dh,
vec![ManagementCapabilities::Close, ManagementCapabilities::Activate],
//|client| client.get_data::<ClientState>().unwrap().privileged,
|_| true,
);
let mut workspace_state = WorkspaceState::new(
dh,
//|client| client.get_data::<ClientState>().unwrap().privileged,
|_| true,
);
let mut spaces = unsafe {
let mut spaces = [UNINIT_SPACE; MAX_WORKSPACES];
@ -116,6 +133,7 @@ impl Shell {
layer_shell_state,
toplevel_info_state,
toplevel_management_state,
xdg_shell_state,
workspace_state,
}

View file

@ -20,7 +20,7 @@ use smithay::{
use std::collections::HashMap;
pub struct Workspace {
pub(super) idx: u8,
pub idx: u8,
pub space: Space,
pub tiling_layer: TilingLayout,
pub floating_layer: FloatingLayout,