fix Wayland layer-shell protocol violation: "must ack the initial configure before attaching buffer"
This commit is contained in:
parent
9b636e281b
commit
1fb7e08f23
2 changed files with 9 additions and 6 deletions
|
|
@ -1054,7 +1054,6 @@ impl SctkState {
|
||||||
if let Ok((id, surface, common)) = self.get_layer_surface(builder) {
|
if let Ok((id, surface, common)) = self.get_layer_surface(builder) {
|
||||||
// TODO Ashley: all surfaces should probably have an optional title for a11y if nothing else
|
// TODO Ashley: all surfaces should probably have an optional title for a11y if nothing else
|
||||||
let wl_surface = surface.wl_surface().clone();
|
let wl_surface = surface.wl_surface().clone();
|
||||||
receive_frame(&mut self.frame_status, &wl_surface);
|
|
||||||
send_event(&self.events_sender, &self.proxy,
|
send_event(&self.events_sender, &self.proxy,
|
||||||
SctkEvent::LayerSurfaceEvent {
|
SctkEvent::LayerSurfaceEvent {
|
||||||
variant: LayerSurfaceEventVariant::Created(self.queue_handle.clone(), surface, id, common, self.connection.display(), title),
|
variant: LayerSurfaceEventVariant::Created(self.queue_handle.clone(), surface, id, common, self.connection.display(), title),
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
use crate::platform_specific::wayland::{
|
use crate::platform_specific::wayland::{
|
||||||
event_loop::state::SctkState,
|
event_loop::state::{receive_frame, SctkState},
|
||||||
sctk_event::{LayerSurfaceEventVariant, SctkEvent},
|
sctk_event::{LayerSurfaceEventVariant, SctkEvent},
|
||||||
};
|
};
|
||||||
use cctk::sctk::{
|
use cctk::sctk::{
|
||||||
|
|
@ -42,7 +42,6 @@ impl LayerShellHandler for SctkState {
|
||||||
mut configure: cctk::sctk::shell::wlr_layer::LayerSurfaceConfigure,
|
mut configure: cctk::sctk::shell::wlr_layer::LayerSurfaceConfigure,
|
||||||
_serial: u32,
|
_serial: u32,
|
||||||
) {
|
) {
|
||||||
self.request_redraw(layer.wl_surface());
|
|
||||||
let layer =
|
let layer =
|
||||||
match self.layer_surfaces.iter_mut().find(|s| {
|
match self.layer_surfaces.iter_mut().find(|s| {
|
||||||
s.surface.wl_surface().id() == layer.wl_surface().id()
|
s.surface.wl_surface().id() == layer.wl_surface().id()
|
||||||
|
|
@ -50,6 +49,7 @@ impl LayerShellHandler for SctkState {
|
||||||
Some(l) => l,
|
Some(l) => l,
|
||||||
None => return,
|
None => return,
|
||||||
};
|
};
|
||||||
|
let first = layer.last_configure.is_none();
|
||||||
let common = layer.common.lock().unwrap();
|
let common = layer.common.lock().unwrap();
|
||||||
let requested_size = common.requested_size;
|
let requested_size = common.requested_size;
|
||||||
drop(common);
|
drop(common);
|
||||||
|
|
@ -65,18 +65,22 @@ impl LayerShellHandler for SctkState {
|
||||||
};
|
};
|
||||||
|
|
||||||
layer.update_viewport(configure.new_size.0, configure.new_size.1);
|
layer.update_viewport(configure.new_size.0, configure.new_size.1);
|
||||||
let first = layer.last_configure.is_none();
|
|
||||||
_ = layer.last_configure.replace(configure.clone());
|
_ = layer.last_configure.replace(configure.clone());
|
||||||
let mut common = layer.common.lock().unwrap();
|
let mut common = layer.common.lock().unwrap();
|
||||||
common.size =
|
common.size =
|
||||||
LogicalSize::new(configure.new_size.0, configure.new_size.1);
|
LogicalSize::new(configure.new_size.0, configure.new_size.1);
|
||||||
|
drop(common);
|
||||||
|
let wl_surface = layer.surface.wl_surface().clone();
|
||||||
|
receive_frame(&mut self.frame_status, &wl_surface);
|
||||||
|
self.request_redraw(&wl_surface);
|
||||||
|
|
||||||
self.sctk_events.push(SctkEvent::LayerSurfaceEvent {
|
self.sctk_events.push(SctkEvent::LayerSurfaceEvent {
|
||||||
variant: LayerSurfaceEventVariant::Configure(
|
variant: LayerSurfaceEventVariant::Configure(
|
||||||
configure,
|
configure,
|
||||||
layer.surface.wl_surface().clone(),
|
wl_surface.clone(),
|
||||||
first,
|
first,
|
||||||
),
|
),
|
||||||
id: layer.surface.wl_surface().clone(),
|
id: wl_surface,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue