diff --git a/src/wayland/protocols/workspace/cosmic.rs b/src/wayland/protocols/workspace/cosmic.rs index 9e5576a5..508ed369 100644 --- a/src/wayland/protocols/workspace/cosmic.rs +++ b/src/wayland/protocols/workspace/cosmic.rs @@ -8,9 +8,11 @@ use smithay::{ }, }; +use std::sync::Mutex; + use super::{ GroupCapabilities, Request, Workspace, WorkspaceCapabilities, WorkspaceClientHandler, - WorkspaceData, WorkspaceGlobalData, WorkspaceGroup, WorkspaceGroupData, WorkspaceGroupHandle, + WorkspaceGlobalData, WorkspaceGroup, WorkspaceGroupData, WorkspaceGroupHandle, WorkspaceHandler, WorkspaceState, }; @@ -23,12 +25,23 @@ use cosmic_protocols::workspace::{ v2::server::zcosmic_workspace_handle_v2, }; +#[derive(Default)] +pub struct CosmicWorkspaceV1DataInner { + name: String, + capabilities: Option, + coordinates: Vec, + states: Option, + tiling: Option, +} + +pub type CosmicWorkspaceV1Data = Mutex; + impl GlobalDispatch for WorkspaceState where D: GlobalDispatch + Dispatch + Dispatch - + Dispatch + + Dispatch + WorkspaceHandler + 'static, ::Client: ClientData + WorkspaceClientHandler + 'static, @@ -60,7 +73,7 @@ where D: GlobalDispatch + Dispatch + Dispatch - + Dispatch + + Dispatch + WorkspaceHandler + 'static, ::Client: ClientData + WorkspaceClientHandler + 'static, @@ -113,7 +126,7 @@ where D: GlobalDispatch + Dispatch + Dispatch - + Dispatch + + Dispatch + WorkspaceHandler + 'static, ::Client: ClientData + WorkspaceClientHandler + 'static, @@ -169,12 +182,12 @@ where } } -impl Dispatch for WorkspaceState +impl Dispatch for WorkspaceState where D: GlobalDispatch + Dispatch + Dispatch - + Dispatch + + Dispatch + WorkspaceHandler + 'static, ::Client: ClientData + WorkspaceClientHandler + 'static, @@ -184,7 +197,7 @@ where client: &Client, obj: &ZcosmicWorkspaceHandleV1, request: zcosmic_workspace_handle_v1::Request, - _data: &WorkspaceData, + _data: &CosmicWorkspaceV1Data, _dh: &DisplayHandle, _data_init: &mut DataInit<'_, D>, ) { @@ -278,7 +291,7 @@ where state: &mut D, _client: ClientId, resource: &ZcosmicWorkspaceHandleV1, - _data: &WorkspaceData, + _data: &CosmicWorkspaceV1Data, ) { for group in &mut state.workspace_state_mut().groups { for workspace in &mut group.workspaces { @@ -297,7 +310,7 @@ where D: GlobalDispatch + Dispatch + Dispatch - + Dispatch + + Dispatch + WorkspaceHandler + 'static, ::Client: ClientData + WorkspaceClientHandler + 'static, @@ -391,7 +404,7 @@ where D: GlobalDispatch + Dispatch + Dispatch - + Dispatch + + Dispatch + WorkspaceHandler + 'static, ::Client: ClientData + WorkspaceClientHandler + 'static, @@ -403,7 +416,7 @@ where if let Ok(handle) = client.create_resource::( dh, group.version(), - WorkspaceData::default(), + CosmicWorkspaceV1Data::default(), ) { group.workspace(&handle); workspace.instances.push((mngr.downgrade(), handle)); @@ -417,7 +430,11 @@ where } }; - let mut handle_state = instance.data::().unwrap().lock().unwrap(); + let mut handle_state = instance + .data::() + .unwrap() + .lock() + .unwrap(); let mut changed = false; if handle_state.name != workspace.name { diff --git a/src/wayland/protocols/workspace/cosmic_v2.rs b/src/wayland/protocols/workspace/cosmic_v2.rs index ab46c467..64e823d0 100644 --- a/src/wayland/protocols/workspace/cosmic_v2.rs +++ b/src/wayland/protocols/workspace/cosmic_v2.rs @@ -19,21 +19,21 @@ use super::{ }; #[derive(Default)] -pub struct CosmicWorkspaceDataInner { +pub struct CosmicWorkspaceV2DataInner { capabilities: Option, tiling: Option, } -pub struct CosmicWorkspaceData { +pub struct CosmicWorkspaceV2Data { workspace: Weak, - inner: Mutex, + inner: Mutex, } impl GlobalDispatch for WorkspaceState where D: GlobalDispatch + Dispatch - + Dispatch + + Dispatch + WorkspaceHandler + 'static, ::Client: ClientData + WorkspaceClientHandler + 'static, @@ -58,7 +58,7 @@ impl Dispatch for WorkspaceState where D: GlobalDispatch + Dispatch - + Dispatch + + Dispatch + WorkspaceHandler + 'static, ::Client: ClientData + WorkspaceClientHandler + 'static, @@ -79,9 +79,9 @@ where } => { let cosmic_workspace = data_init.init( cosmic_workspace, - CosmicWorkspaceData { + CosmicWorkspaceV2Data { workspace: workspace.downgrade(), - inner: Mutex::new(CosmicWorkspaceDataInner::default()), + inner: Mutex::new(CosmicWorkspaceV2DataInner::default()), }, ); if let Some(data) = workspace.data::() { @@ -115,11 +115,11 @@ where } } -impl Dispatch for WorkspaceState +impl Dispatch for WorkspaceState where D: GlobalDispatch + Dispatch - + Dispatch + + Dispatch + WorkspaceHandler + 'static, ::Client: ClientData + WorkspaceClientHandler + 'static, @@ -129,7 +129,7 @@ where client: &Client, _obj: &ZcosmicWorkspaceHandleV2, request: zcosmic_workspace_handle_v2::Request, - data: &CosmicWorkspaceData, + data: &CosmicWorkspaceV2Data, _dh: &DisplayHandle, _data_init: &mut DataInit<'_, D>, ) { @@ -184,7 +184,7 @@ pub fn send_workspace_to_client( let mut changed = false; let mut handle_state = instance - .data::() + .data::() .unwrap() .inner .lock() diff --git a/src/wayland/protocols/workspace/ext.rs b/src/wayland/protocols/workspace/ext.rs index af99ac8d..8d7891ae 100644 --- a/src/wayland/protocols/workspace/ext.rs +++ b/src/wayland/protocols/workspace/ext.rs @@ -1,14 +1,17 @@ // SPDX-License-Identifier: GPL-3.0-only +use cosmic_protocols::workspace::v2::server::zcosmic_workspace_handle_v2::ZcosmicWorkspaceHandleV2; + use smithay::reexports::wayland_server::{ backend::{ClientData, ClientId}, - Client, DataInit, Dispatch, DisplayHandle, GlobalDispatch, New, Resource, + Client, DataInit, Dispatch, DisplayHandle, GlobalDispatch, New, Resource, Weak, }; +use std::sync::Mutex; + use super::{ - Request, Workspace, WorkspaceCapabilities, WorkspaceClientHandler, WorkspaceData, - WorkspaceGlobalData, WorkspaceGroup, WorkspaceGroupData, WorkspaceGroupHandle, - WorkspaceHandler, WorkspaceState, + Request, Workspace, WorkspaceCapabilities, WorkspaceClientHandler, WorkspaceGlobalData, + WorkspaceGroup, WorkspaceGroupData, WorkspaceGroupHandle, WorkspaceHandler, WorkspaceState, }; use smithay::reexports::wayland_protocols::ext::workspace::v1::server::{ @@ -17,6 +20,17 @@ use smithay::reexports::wayland_protocols::ext::workspace::v1::server::{ ext_workspace_manager_v1::{self, ExtWorkspaceManagerV1}, }; +#[derive(Default)] +pub struct WorkspaceDataInner { + name: String, + capabilities: Option, + coordinates: Vec, + states: Option, + pub(super) cosmic_v2_handle: Option>, +} + +pub type WorkspaceData = Mutex; + impl GlobalDispatch for WorkspaceState where D: GlobalDispatch diff --git a/src/wayland/protocols/workspace/mod.rs b/src/wayland/protocols/workspace/mod.rs index 481335c9..17fb034a 100644 --- a/src/wayland/protocols/workspace/mod.rs +++ b/src/wayland/protocols/workspace/mod.rs @@ -32,9 +32,11 @@ use cosmic_protocols::workspace::{ }; mod cosmic; +pub use cosmic::CosmicWorkspaceV1Data; mod cosmic_v2; -pub use cosmic_v2::CosmicWorkspaceData; +pub use cosmic_v2::CosmicWorkspaceV2Data; mod ext; +pub use ext::WorkspaceData; pub use smithay::reexports::wayland_protocols::ext::workspace::v1::server::ext_workspace_group_handle_v1::GroupCapabilities; @@ -59,14 +61,14 @@ where D: GlobalDispatch + Dispatch + Dispatch - + Dispatch + + Dispatch + GlobalDispatch + Dispatch + Dispatch + Dispatch + GlobalDispatch + Dispatch - + Dispatch + + Dispatch + WorkspaceHandler + 'static, ::Client: ClientData + WorkspaceClientHandler + 'static, @@ -85,7 +87,7 @@ where D: GlobalDispatch + Dispatch + Dispatch - + Dispatch + + Dispatch + WorkspaceHandler + 'static, ::Client: ClientData + WorkspaceClientHandler + 'static; @@ -155,31 +157,19 @@ pub struct WorkspaceHandle { id: usize, } -#[derive(Default)] -pub struct WorkspaceDataInner { - name: String, - capabilities: Option, - coordinates: Vec, - states: Option, - tiling: Option, - cosmic_v2_handle: Option>, -} - -pub type WorkspaceData = Mutex; - pub trait WorkspaceHandler where Self: GlobalDispatch + Dispatch + Dispatch - + Dispatch + + Dispatch + GlobalDispatch + Dispatch + Dispatch + Dispatch + GlobalDispatch + Dispatch - + Dispatch + + Dispatch + Sized + 'static, { @@ -232,14 +222,14 @@ where D: GlobalDispatch + Dispatch + Dispatch - + Dispatch + + Dispatch + GlobalDispatch + Dispatch + Dispatch + Dispatch + GlobalDispatch + Dispatch - + Dispatch + + Dispatch + WorkspaceHandler + 'static, ::Client: ClientData + WorkspaceClientHandler + 'static, @@ -501,13 +491,13 @@ where D: GlobalDispatch + Dispatch + Dispatch - + Dispatch + + Dispatch + Dispatch + Dispatch + Dispatch + GlobalDispatch + Dispatch - + Dispatch + + Dispatch + WorkspaceHandler + 'static, ::Client: ClientData + WorkspaceClientHandler + 'static, @@ -763,14 +753,14 @@ where D: GlobalDispatch + Dispatch + Dispatch - + Dispatch + + Dispatch + GlobalDispatch + Dispatch + Dispatch + Dispatch + GlobalDispatch + Dispatch - + Dispatch + + Dispatch + WorkspaceHandler + 'static, ::Client: ClientData + WorkspaceClientHandler + 'static, @@ -792,7 +782,7 @@ macro_rules! delegate_workspace { cosmic_protocols::workspace::v1::server::zcosmic_workspace_group_handle_v1::ZcosmicWorkspaceGroupHandleV1: $crate::wayland::protocols::workspace::WorkspaceGroupData ] => $crate::wayland::protocols::workspace::WorkspaceState); smithay::reexports::wayland_server::delegate_dispatch!($(@< $( $lt $( : $clt $(+ $dlt )* )? ),+ >)? $ty: [ - cosmic_protocols::workspace::v1::server::zcosmic_workspace_handle_v1::ZcosmicWorkspaceHandleV1: $crate::wayland::protocols::workspace::WorkspaceData + cosmic_protocols::workspace::v1::server::zcosmic_workspace_handle_v1::ZcosmicWorkspaceHandleV1: $crate::wayland::protocols::workspace::CosmicWorkspaceV1Data ] => $crate::wayland::protocols::workspace::WorkspaceState); smithay::reexports::wayland_server::delegate_global_dispatch!($(@< $( $lt $( : $clt $(+ $dlt )* )? ),+ >)? $ty: [ @@ -815,7 +805,7 @@ macro_rules! delegate_workspace { cosmic_protocols::workspace::v2::server::zcosmic_workspace_manager_v2::ZcosmicWorkspaceManagerV2: () ] => $crate::wayland::protocols::workspace::WorkspaceState); smithay::reexports::wayland_server::delegate_dispatch!($(@< $( $lt $( : $clt $(+ $dlt )* )? ),+ >)? $ty: [ - cosmic_protocols::workspace::v2::server::zcosmic_workspace_handle_v2::ZcosmicWorkspaceHandleV2: $crate::wayland::protocols::workspace::CosmicWorkspaceData + cosmic_protocols::workspace::v2::server::zcosmic_workspace_handle_v2::ZcosmicWorkspaceHandleV2: $crate::wayland::protocols::workspace::CosmicWorkspaceV2Data ] => $crate::wayland::protocols::workspace::WorkspaceState); }; }