Skip to content

Commit

Permalink
wayland: zxdg_shell_v6 needs a configure event before using a surface…
Browse files Browse the repository at this point in the history
… at all.

Fixes Bugzilla #4109.
Fixes Bugzilla #4119.
  • Loading branch information
icculus committed Apr 15, 2018
1 parent 5e8c816 commit 2df5906
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 0 deletions.
14 changes: 14 additions & 0 deletions src/video/wayland/SDL_waylandwindow.c
Expand Up @@ -113,6 +113,9 @@ handle_configure_zxdg_shell_surface(void *data, struct zxdg_surface_v6 *zxdg, ui
SDL_WindowData *wind = (SDL_WindowData *)data;
SDL_Window *window = wind->sdlwindow;
struct wl_region *region;

wind->shell_surface.zxdg.initial_configure_seen = SDL_TRUE;

WAYLAND_wl_egl_window_resize(wind->egl_window, window->w, window->h, 0, 0);

region = wl_compositor_create_region(wind->waylandData->compositor);
Expand Down Expand Up @@ -477,6 +480,17 @@ int Wayland_CreateWindow(_THIS, SDL_Window *window)
wl_surface_commit(data->surface);
WAYLAND_wl_display_flush(c->display);

/* we have to wait until the surface gets a "configure" event, or
use of this surface will fail. This is a new rule for xdg_shell. */
if (c->shell.zxdg) {
if (data->shell_surface.zxdg.surface) {
while (!data->shell_surface.zxdg.initial_configure_seen) {
WAYLAND_wl_display_flush(c->display);
WAYLAND_wl_display_dispatch(c->display);
}
}
}

return 0;
}

Expand Down
1 change: 1 addition & 0 deletions src/video/wayland/SDL_waylandwindow.h
Expand Up @@ -37,6 +37,7 @@ typedef struct {
struct zxdg_toplevel_v6 *toplevel;
struct zxdg_popup_v6 *popup;
} roleobj;
SDL_bool initial_configure_seen;
} SDL_zxdg_shell_surface;

typedef struct {
Expand Down

0 comments on commit 2df5906

Please sign in to comment.