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();
|
handle_state.outputs = group.outputs.clone();
|
||||||
}
|
}
|
||||||
|
|
||||||
if handle_state.capabilities != group.capabilities {
|
if handle_state.capabilities != Some(group.capabilities) {
|
||||||
let caps = group
|
let caps = group
|
||||||
.capabilities
|
.capabilities
|
||||||
.iter()
|
.iter()
|
||||||
|
|
@ -349,7 +349,7 @@ where
|
||||||
.flat_map(|cap| (cap as u32).to_ne_bytes())
|
.flat_map(|cap| (cap as u32).to_ne_bytes())
|
||||||
.collect::<Vec<u8>>();
|
.collect::<Vec<u8>>();
|
||||||
instance.capabilities(caps);
|
instance.capabilities(caps);
|
||||||
handle_state.capabilities = group.capabilities.clone();
|
handle_state.capabilities = Some(group.capabilities.clone());
|
||||||
changed = true;
|
changed = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -421,7 +421,7 @@ where
|
||||||
handle_state.coordinates = workspace.coordinates.clone();
|
handle_state.coordinates = workspace.coordinates.clone();
|
||||||
changed = true;
|
changed = true;
|
||||||
}
|
}
|
||||||
if handle_state.capabilities != workspace.capabilities {
|
if handle_state.capabilities != Some(workspace.capabilities) {
|
||||||
let caps = workspace
|
let caps = workspace
|
||||||
.capabilities
|
.capabilities
|
||||||
.iter()
|
.iter()
|
||||||
|
|
@ -446,10 +446,10 @@ where
|
||||||
.flat_map(|cap| (cap as u32).to_ne_bytes())
|
.flat_map(|cap| (cap as u32).to_ne_bytes())
|
||||||
.collect::<Vec<u8>>();
|
.collect::<Vec<u8>>();
|
||||||
instance.capabilities(caps);
|
instance.capabilities(caps);
|
||||||
handle_state.capabilities = workspace.capabilities.clone();
|
handle_state.capabilities = Some(workspace.capabilities.clone());
|
||||||
changed = true;
|
changed = true;
|
||||||
}
|
}
|
||||||
if handle_state.states != workspace.states {
|
if handle_state.states != Some(workspace.states) {
|
||||||
let states = workspace
|
let states = workspace
|
||||||
.states
|
.states
|
||||||
.iter()
|
.iter()
|
||||||
|
|
@ -468,7 +468,7 @@ where
|
||||||
.flat_map(|state| (state as u32).to_ne_bytes())
|
.flat_map(|state| (state as u32).to_ne_bytes())
|
||||||
.collect::<Vec<u8>>();
|
.collect::<Vec<u8>>();
|
||||||
instance.state(states);
|
instance.state(states);
|
||||||
handle_state.states = workspace.states.clone();
|
handle_state.states = Some(workspace.states.clone());
|
||||||
changed = true;
|
changed = true;
|
||||||
}
|
}
|
||||||
if instance.version() >= zcosmic_workspace_handle_v1::EVT_TILING_STATE_SINCE {
|
if instance.version() >= zcosmic_workspace_handle_v1::EVT_TILING_STATE_SINCE {
|
||||||
|
|
|
||||||
|
|
@ -333,9 +333,9 @@ where
|
||||||
handle_state.outputs = group.outputs.clone();
|
handle_state.outputs = group.outputs.clone();
|
||||||
}
|
}
|
||||||
|
|
||||||
if handle_state.capabilities != group.capabilities {
|
if handle_state.capabilities != Some(group.capabilities) {
|
||||||
instance.capabilities(group.capabilities);
|
instance.capabilities(group.capabilities);
|
||||||
handle_state.capabilities = group.capabilities.clone();
|
handle_state.capabilities = Some(group.capabilities.clone());
|
||||||
changed = true;
|
changed = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -411,7 +411,7 @@ where
|
||||||
handle_state.coordinates = workspace.coordinates.clone();
|
handle_state.coordinates = workspace.coordinates.clone();
|
||||||
changed = true;
|
changed = true;
|
||||||
}
|
}
|
||||||
if handle_state.capabilities != workspace.capabilities {
|
if handle_state.capabilities != Some(workspace.capabilities) {
|
||||||
let caps = workspace
|
let caps = workspace
|
||||||
.capabilities
|
.capabilities
|
||||||
.iter()
|
.iter()
|
||||||
|
|
@ -432,12 +432,12 @@ where
|
||||||
})
|
})
|
||||||
.collect::<ext_workspace_handle_v1::WorkspaceCapabilities>();
|
.collect::<ext_workspace_handle_v1::WorkspaceCapabilities>();
|
||||||
instance.capabilities(caps);
|
instance.capabilities(caps);
|
||||||
handle_state.capabilities = workspace.capabilities.clone();
|
handle_state.capabilities = Some(workspace.capabilities.clone());
|
||||||
changed = true;
|
changed = true;
|
||||||
}
|
}
|
||||||
if handle_state.states != workspace.states {
|
if handle_state.states != Some(workspace.states) {
|
||||||
instance.state(workspace.states);
|
instance.state(workspace.states);
|
||||||
handle_state.states = workspace.states.clone();
|
handle_state.states = Some(workspace.states.clone());
|
||||||
changed = true;
|
changed = true;
|
||||||
}
|
}
|
||||||
// TODO ext_workspace_handle_v1::id
|
// TODO ext_workspace_handle_v1::id
|
||||||
|
|
|
||||||
|
|
@ -114,24 +114,14 @@ pub struct WorkspaceGroupHandle {
|
||||||
id: usize,
|
id: usize,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Default)]
|
||||||
pub struct WorkspaceGroupDataInner {
|
pub struct WorkspaceGroupDataInner {
|
||||||
outputs: Vec<Output>,
|
outputs: Vec<Output>,
|
||||||
wl_outputs: HashSet<WlOutput>,
|
wl_outputs: HashSet<WlOutput>,
|
||||||
capabilities: GroupCapabilities,
|
capabilities: Option<GroupCapabilities>,
|
||||||
workspace_count: usize,
|
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>;
|
pub type WorkspaceGroupData = Mutex<WorkspaceGroupDataInner>;
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
|
|
@ -153,26 +143,15 @@ pub struct WorkspaceHandle {
|
||||||
id: usize,
|
id: usize,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Default)]
|
||||||
pub struct WorkspaceDataInner {
|
pub struct WorkspaceDataInner {
|
||||||
name: String,
|
name: String,
|
||||||
capabilities: WorkspaceCapabilities,
|
capabilities: Option<WorkspaceCapabilities>,
|
||||||
coordinates: Vec<u32>,
|
coordinates: Vec<u32>,
|
||||||
states: ext_workspace_handle_v1::State,
|
states: Option<ext_workspace_handle_v1::State>,
|
||||||
tiling: Option<zcosmic_workspace_handle_v1::TilingState>,
|
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 type WorkspaceData = Mutex<WorkspaceDataInner>;
|
||||||
|
|
||||||
pub trait WorkspaceHandler
|
pub trait WorkspaceHandler
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue