protocol/workspace: Store ext/cosmic specific capabilities
This means a change to an ext capability will not send a redundant cosmic capability event, and vice versa. This will be more important when cosmic-specific states are added. Since those may change often.
This commit is contained in:
parent
dea7f2f825
commit
f9dd922af3
2 changed files with 43 additions and 40 deletions
|
|
@ -20,7 +20,7 @@ use super::{
|
||||||
|
|
||||||
#[derive(Default)]
|
#[derive(Default)]
|
||||||
pub struct CosmicWorkspaceV2DataInner {
|
pub struct CosmicWorkspaceV2DataInner {
|
||||||
capabilities: Option<WorkspaceCapabilities>,
|
capabilities: Option<zcosmic_workspace_handle_v2::WorkspaceCapabilities>,
|
||||||
tiling: Option<zcosmic_workspace_handle_v2::TilingState>,
|
tiling: Option<zcosmic_workspace_handle_v2::TilingState>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -190,22 +190,22 @@ pub fn send_workspace_to_client(
|
||||||
.lock()
|
.lock()
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
||||||
if handle_state.capabilities != Some(workspace.capabilities) {
|
let capabilities = workspace
|
||||||
let caps = workspace
|
.capabilities
|
||||||
.capabilities
|
.iter()
|
||||||
.iter()
|
.filter_map(|cap| match cap {
|
||||||
.filter_map(|cap| match cap {
|
WorkspaceCapabilities::Rename => {
|
||||||
WorkspaceCapabilities::Rename => {
|
Some(zcosmic_workspace_handle_v2::WorkspaceCapabilities::Rename)
|
||||||
Some(zcosmic_workspace_handle_v2::WorkspaceCapabilities::Rename)
|
}
|
||||||
}
|
WorkspaceCapabilities::SetTilingState => {
|
||||||
WorkspaceCapabilities::SetTilingState => {
|
Some(zcosmic_workspace_handle_v2::WorkspaceCapabilities::SetTilingState)
|
||||||
Some(zcosmic_workspace_handle_v2::WorkspaceCapabilities::SetTilingState)
|
}
|
||||||
}
|
_ => None,
|
||||||
_ => None,
|
})
|
||||||
})
|
.collect::<zcosmic_workspace_handle_v2::WorkspaceCapabilities>();
|
||||||
.collect::<zcosmic_workspace_handle_v2::WorkspaceCapabilities>();
|
if handle_state.capabilities != Some(capabilities) {
|
||||||
instance.capabilities(caps);
|
instance.capabilities(capabilities);
|
||||||
handle_state.capabilities = Some(workspace.capabilities);
|
handle_state.capabilities = Some(capabilities);
|
||||||
changed = true;
|
changed = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -23,7 +23,7 @@ use smithay::reexports::wayland_protocols::ext::workspace::v1::server::{
|
||||||
#[derive(Default)]
|
#[derive(Default)]
|
||||||
pub struct WorkspaceDataInner {
|
pub struct WorkspaceDataInner {
|
||||||
name: String,
|
name: String,
|
||||||
capabilities: Option<WorkspaceCapabilities>,
|
capabilities: Option<ext_workspace_handle_v1::WorkspaceCapabilities>,
|
||||||
coordinates: Vec<u32>,
|
coordinates: Vec<u32>,
|
||||||
states: Option<ext_workspace_handle_v1::State>,
|
states: Option<ext_workspace_handle_v1::State>,
|
||||||
pub(super) cosmic_v2_handle: Option<Weak<ZcosmicWorkspaceHandleV2>>,
|
pub(super) cosmic_v2_handle: Option<Weak<ZcosmicWorkspaceHandleV2>>,
|
||||||
|
|
@ -416,6 +416,7 @@ where
|
||||||
handle_state.name = workspace.name.clone();
|
handle_state.name = workspace.name.clone();
|
||||||
changed = true;
|
changed = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if handle_state.coordinates != workspace.coordinates {
|
if handle_state.coordinates != workspace.coordinates {
|
||||||
let coords = workspace
|
let coords = workspace
|
||||||
.coordinates
|
.coordinates
|
||||||
|
|
@ -426,30 +427,32 @@ where
|
||||||
handle_state.coordinates = workspace.coordinates.clone();
|
handle_state.coordinates = workspace.coordinates.clone();
|
||||||
changed = true;
|
changed = true;
|
||||||
}
|
}
|
||||||
if handle_state.capabilities != Some(workspace.capabilities) {
|
|
||||||
let caps = workspace
|
let capabilities = workspace
|
||||||
.capabilities
|
.capabilities
|
||||||
.iter()
|
.iter()
|
||||||
.filter_map(|cap| match cap {
|
.filter_map(|cap| match cap {
|
||||||
WorkspaceCapabilities::Activate => {
|
WorkspaceCapabilities::Activate => {
|
||||||
Some(ext_workspace_handle_v1::WorkspaceCapabilities::Activate)
|
Some(ext_workspace_handle_v1::WorkspaceCapabilities::Activate)
|
||||||
}
|
}
|
||||||
WorkspaceCapabilities::Deactivate => {
|
WorkspaceCapabilities::Deactivate => {
|
||||||
Some(ext_workspace_handle_v1::WorkspaceCapabilities::Deactivate)
|
Some(ext_workspace_handle_v1::WorkspaceCapabilities::Deactivate)
|
||||||
}
|
}
|
||||||
WorkspaceCapabilities::Remove => {
|
WorkspaceCapabilities::Remove => {
|
||||||
Some(ext_workspace_handle_v1::WorkspaceCapabilities::Remove)
|
Some(ext_workspace_handle_v1::WorkspaceCapabilities::Remove)
|
||||||
}
|
}
|
||||||
WorkspaceCapabilities::Assign => {
|
WorkspaceCapabilities::Assign => {
|
||||||
Some(ext_workspace_handle_v1::WorkspaceCapabilities::Assign)
|
Some(ext_workspace_handle_v1::WorkspaceCapabilities::Assign)
|
||||||
}
|
}
|
||||||
_ => None,
|
_ => None,
|
||||||
})
|
})
|
||||||
.collect::<ext_workspace_handle_v1::WorkspaceCapabilities>();
|
.collect::<ext_workspace_handle_v1::WorkspaceCapabilities>();
|
||||||
instance.capabilities(caps);
|
if handle_state.capabilities != Some(capabilities) {
|
||||||
handle_state.capabilities = Some(workspace.capabilities.clone());
|
instance.capabilities(capabilities);
|
||||||
|
handle_state.capabilities = Some(capabilities);
|
||||||
changed = true;
|
changed = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if handle_state.states != Some(workspace.states) {
|
if handle_state.states != Some(workspace.states) {
|
||||||
instance.state(workspace.states);
|
instance.state(workspace.states);
|
||||||
handle_state.states = Some(workspace.states.clone());
|
handle_state.states = Some(workspace.states.clone());
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue