mirror of
https://codeberg.org/dnkl/foot.git
synced 2026-02-05 04:06:08 -05:00
wayland: ignore configure events for unmapped surfaces
Closes #1249 Note that it is still unclear whether ack:ing a configure event for an unmapped surface is a protocol violation, or something that should be handled by the compositor. According to https://gitlab.freedesktop.org/wayland/wayland-protocols/-/issues/108, Kwin, Mutter and Weston handles it, while wlroots does not.
This commit is contained in:
parent
f2356adee3
commit
7f26914583
3 changed files with 15 additions and 0 deletions
|
|
@ -123,6 +123,8 @@
|
|||
causing a crash (double-free) on exit ([#1259][1259]).
|
||||
* Double-width glyphs glitching when surrounded by glyphs overflowing
|
||||
into the double-width glyph ([#1256][1256]).
|
||||
* Wayland protocol violation when ack:ing a configure event for an
|
||||
unmapped surface ([#1249][1249]).
|
||||
|
||||
[1173]: https://codeberg.org/dnkl/foot/issues/1173
|
||||
[1190]: https://codeberg.org/dnkl/foot/issues/1190
|
||||
|
|
@ -131,6 +133,7 @@
|
|||
[1218]: https://codeberg.org/dnkl/foot/issues/1218
|
||||
[1259]: https://codeberg.org/dnkl/foot/issues/1259
|
||||
[1256]: https://codeberg.org/dnkl/foot/issues/1256
|
||||
[1249]: https://codeberg.org/dnkl/foot/issues/1249
|
||||
|
||||
|
||||
### Security
|
||||
|
|
|
|||
11
wayland.c
11
wayland.c
|
|
@ -769,6 +769,16 @@ xdg_surface_configure(void *data, struct xdg_surface *xdg_surface,
|
|||
struct wl_window *win = data;
|
||||
struct terminal *term = win->term;
|
||||
|
||||
if (win->unmapped) {
|
||||
/*
|
||||
* https://codeberg.org/dnkl/foot/issues/1249
|
||||
* https://gitlab.freedesktop.org/wlroots/wlroots/-/issues/3487
|
||||
* https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/3719
|
||||
* https://gitlab.freedesktop.org/wayland/wayland-protocols/-/issues/108
|
||||
*/
|
||||
return;
|
||||
}
|
||||
|
||||
bool wasnt_configured = !win->is_configured;
|
||||
bool was_resizing = win->is_resizing;
|
||||
bool csd_was_enabled = win->csd_mode == CSD_YES && !win->is_fullscreen;
|
||||
|
|
@ -1619,6 +1629,7 @@ wayl_win_destroy(struct wl_window *win)
|
|||
wayl_roundtrip(win->term->wl);
|
||||
|
||||
/* Main window */
|
||||
win->unmapped = true;
|
||||
wl_surface_attach(win->surface, NULL, 0, 0);
|
||||
wl_surface_commit(win->surface);
|
||||
wayl_roundtrip(win->term->wl);
|
||||
|
|
|
|||
|
|
@ -327,6 +327,7 @@ struct wl_window {
|
|||
tll(struct xdg_activation_token_context *) xdg_tokens;
|
||||
bool urgency_token_is_pending;
|
||||
#endif
|
||||
bool unmapped;
|
||||
|
||||
struct zxdg_toplevel_decoration_v1 *xdg_toplevel_decoration;
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue