protocol/workspace: Fix initial sending of states and capabilities
The protocol states that these should always be sent, but this was not initially sending bitflags if they were empty. That works, but isn't what the protocol states. Not wrapping the bitflag fields in options works well for `Workspace`, but not for `WorkspaceDataInner`.
This commit is contained in:
parent
b93db878e2
commit
1f2434e590
3 changed files with 17 additions and 38 deletions
|
|
@ -338,7 +338,7 @@ where
|
|||
handle_state.outputs = group.outputs.clone();
|
||||
}
|
||||
|
||||
if handle_state.capabilities != group.capabilities {
|
||||
if handle_state.capabilities != Some(group.capabilities) {
|
||||
let caps = group
|
||||
.capabilities
|
||||
.iter()
|
||||
|
|
@ -349,7 +349,7 @@ where
|
|||
.flat_map(|cap| (cap as u32).to_ne_bytes())
|
||||
.collect::<Vec<u8>>();
|
||||
instance.capabilities(caps);
|
||||
handle_state.capabilities = group.capabilities.clone();
|
||||
handle_state.capabilities = Some(group.capabilities.clone());
|
||||
changed = true;
|
||||
}
|
||||
|
||||
|
|
@ -421,7 +421,7 @@ where
|
|||
handle_state.coordinates = workspace.coordinates.clone();
|
||||
changed = true;
|
||||
}
|
||||
if handle_state.capabilities != workspace.capabilities {
|
||||
if handle_state.capabilities != Some(workspace.capabilities) {
|
||||
let caps = workspace
|
||||
.capabilities
|
||||
.iter()
|
||||
|
|
@ -446,10 +446,10 @@ where
|
|||
.flat_map(|cap| (cap as u32).to_ne_bytes())
|
||||
.collect::<Vec<u8>>();
|
||||
instance.capabilities(caps);
|
||||
handle_state.capabilities = workspace.capabilities.clone();
|
||||
handle_state.capabilities = Some(workspace.capabilities.clone());
|
||||
changed = true;
|
||||
}
|
||||
if handle_state.states != workspace.states {
|
||||
if handle_state.states != Some(workspace.states) {
|
||||
let states = workspace
|
||||
.states
|
||||
.iter()
|
||||
|
|
@ -468,7 +468,7 @@ where
|
|||
.flat_map(|state| (state as u32).to_ne_bytes())
|
||||
.collect::<Vec<u8>>();
|
||||
instance.state(states);
|
||||
handle_state.states = workspace.states.clone();
|
||||
handle_state.states = Some(workspace.states.clone());
|
||||
changed = true;
|
||||
}
|
||||
if instance.version() >= zcosmic_workspace_handle_v1::EVT_TILING_STATE_SINCE {
|
||||
|
|
|
|||
|
|
@ -333,9 +333,9 @@ where
|
|||
handle_state.outputs = group.outputs.clone();
|
||||
}
|
||||
|
||||
if handle_state.capabilities != group.capabilities {
|
||||
if handle_state.capabilities != Some(group.capabilities) {
|
||||
instance.capabilities(group.capabilities);
|
||||
handle_state.capabilities = group.capabilities.clone();
|
||||
handle_state.capabilities = Some(group.capabilities.clone());
|
||||
changed = true;
|
||||
}
|
||||
|
||||
|
|
@ -411,7 +411,7 @@ where
|
|||
handle_state.coordinates = workspace.coordinates.clone();
|
||||
changed = true;
|
||||
}
|
||||
if handle_state.capabilities != workspace.capabilities {
|
||||
if handle_state.capabilities != Some(workspace.capabilities) {
|
||||
let caps = workspace
|
||||
.capabilities
|
||||
.iter()
|
||||
|
|
@ -432,12 +432,12 @@ where
|
|||
})
|
||||
.collect::<ext_workspace_handle_v1::WorkspaceCapabilities>();
|
||||
instance.capabilities(caps);
|
||||
handle_state.capabilities = workspace.capabilities.clone();
|
||||
handle_state.capabilities = Some(workspace.capabilities.clone());
|
||||
changed = true;
|
||||
}
|
||||
if handle_state.states != workspace.states {
|
||||
if handle_state.states != Some(workspace.states) {
|
||||
instance.state(workspace.states);
|
||||
handle_state.states = workspace.states.clone();
|
||||
handle_state.states = Some(workspace.states.clone());
|
||||
changed = true;
|
||||
}
|
||||
// TODO ext_workspace_handle_v1::id
|
||||
|
|
|
|||
|
|
@ -114,24 +114,14 @@ pub struct WorkspaceGroupHandle {
|
|||
id: usize,
|
||||
}
|
||||
|
||||
#[derive(Default)]
|
||||
pub struct WorkspaceGroupDataInner {
|
||||
outputs: Vec<Output>,
|
||||
wl_outputs: HashSet<WlOutput>,
|
||||
capabilities: GroupCapabilities,
|
||||
capabilities: Option<GroupCapabilities>,
|
||||
workspace_count: usize,
|
||||
}
|
||||
|
||||
impl Default for WorkspaceGroupDataInner {
|
||||
fn default() -> Self {
|
||||
Self {
|
||||
outputs: Vec::new(),
|
||||
wl_outputs: HashSet::new(),
|
||||
capabilities: GroupCapabilities::empty(),
|
||||
workspace_count: 0,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub type WorkspaceGroupData = Mutex<WorkspaceGroupDataInner>;
|
||||
|
||||
#[derive(Debug)]
|
||||
|
|
@ -153,26 +143,15 @@ pub struct WorkspaceHandle {
|
|||
id: usize,
|
||||
}
|
||||
|
||||
#[derive(Default)]
|
||||
pub struct WorkspaceDataInner {
|
||||
name: String,
|
||||
capabilities: WorkspaceCapabilities,
|
||||
capabilities: Option<WorkspaceCapabilities>,
|
||||
coordinates: Vec<u32>,
|
||||
states: ext_workspace_handle_v1::State,
|
||||
states: Option<ext_workspace_handle_v1::State>,
|
||||
tiling: Option<zcosmic_workspace_handle_v1::TilingState>,
|
||||
}
|
||||
|
||||
impl Default for WorkspaceDataInner {
|
||||
fn default() -> Self {
|
||||
Self {
|
||||
name: String::new(),
|
||||
capabilities: WorkspaceCapabilities::empty(),
|
||||
coordinates: Vec::new(),
|
||||
states: ext_workspace_handle_v1::State::empty(),
|
||||
tiling: None,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub type WorkspaceData = Mutex<WorkspaceDataInner>;
|
||||
|
||||
pub trait WorkspaceHandler
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue