Skip to content

Commit

Permalink
wayland: Ignore configure events during splash (libretro#16398)
Browse files Browse the repository at this point in the history
These were causing the gl/vk surfaces to be created with the wrong size.
  • Loading branch information
ColinKinloch authored Apr 3, 2024
1 parent 9b96991 commit cdd6aed
Show file tree
Hide file tree
Showing 4 changed files with 14 additions and 0 deletions.
3 changes: 3 additions & 0 deletions gfx/common/wayland_common.c
Original file line number Diff line number Diff line change
Expand Up @@ -789,6 +789,9 @@ bool gfx_ctx_wl_init_common(
}
}

// Ignore configure events until splash screen has been replaced
wl->ignore_configuration = true;

wl->input.fd = wl_display_get_fd(wl->input.dpy);

wl->input.keyboard_focus = true;
Expand Down
5 changes: 5 additions & 0 deletions gfx/drivers_context/wayland_ctx.c
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,8 @@ static void xdg_toplevel_handle_configure(void *data,
int32_t width, int32_t height, struct wl_array *states)
{
gfx_ctx_wayland_data_t *wl = (gfx_ctx_wayland_data_t*)data;
if (wl->ignore_configuration)
return;
xdg_toplevel_handle_configure_common(wl, toplevel, width, height, states);
#ifdef HAVE_EGL
if (wl->win)
Expand Down Expand Up @@ -113,6 +115,7 @@ static bool gfx_ctx_wl_set_resize(void *data, unsigned width, unsigned height)
if (!wl->fractional_scale)
wl_surface_set_buffer_scale(wl->surface, wl->buffer_scale);

wl->ignore_configuration = false;
#ifdef HAVE_EGL
wl_egl_window_resize(wl->win, width, height, 0, 0);
#endif
Expand All @@ -126,6 +129,8 @@ libdecor_frame_handle_configure(struct libdecor_frame *frame,
struct libdecor_configuration *configuration, void *data)
{
gfx_ctx_wayland_data_t *wl = (gfx_ctx_wayland_data_t*)data;
if (wl->ignore_configuration)
return;
libdecor_frame_handle_configure_common(frame, configuration, wl);

#ifdef HAVE_EGL
Expand Down
5 changes: 5 additions & 0 deletions gfx/drivers_context/wayland_vk_ctx.c
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,8 @@ static void xdg_toplevel_handle_configure(void *data,
int32_t width, int32_t height, struct wl_array *states)
{
gfx_ctx_wayland_data_t *wl = (gfx_ctx_wayland_data_t*)data;
if (wl->ignore_configuration)
return;
xdg_toplevel_handle_configure_common(wl, toplevel, width, height, states);
wl->configured = false;
}
Expand Down Expand Up @@ -92,6 +94,7 @@ static bool gfx_ctx_wl_set_resize(void *data, unsigned width, unsigned height)

if (vulkan_create_swapchain(&wl->vk, width, height, wl->swap_interval))
{
wl->ignore_configuration = false;
wl->vk.context.flags |= VK_CTX_FLAG_INVALID_SWAPCHAIN;
if (wl->vk.flags & VK_DATA_FLAG_CREATED_NEW_SWAPCHAIN)
vulkan_acquire_next_image(&wl->vk);
Expand All @@ -111,6 +114,8 @@ libdecor_frame_handle_configure(struct libdecor_frame *frame,
struct libdecor_configuration *configuration, void *data)
{
gfx_ctx_wayland_data_t *wl = (gfx_ctx_wayland_data_t*)data;
if (wl->ignore_configuration)
return;
libdecor_frame_handle_configure_common(frame, configuration, wl);

wl->configured = false;
Expand Down
1 change: 1 addition & 0 deletions input/common/wayland_common.h
Original file line number Diff line number Diff line change
Expand Up @@ -219,6 +219,7 @@ typedef struct gfx_ctx_wayland_data
bool maximized;
bool resize;
bool configured;
bool ignore_configuration;
bool activated;
bool reported_display_size;
bool swap_complete;
Expand Down

0 comments on commit cdd6aed

Please sign in to comment.