Skip to content

Commit

Permalink
wayland: Changed output removal in handle_surface_leave()
Browse files Browse the repository at this point in the history
No longer needs an extra malloc, handles unexpected cases like the same
output being listed twice.
  • Loading branch information
icculus committed May 28, 2020
1 parent ce7ae4e commit aa259ed
Showing 1 changed file with 14 additions and 13 deletions.
27 changes: 14 additions & 13 deletions src/video/wayland/SDL_waylandwindow.c
Expand Up @@ -406,21 +406,22 @@ static void
handle_surface_leave(void *data, struct wl_surface *surface,
struct wl_output *output) {
SDL_WindowData *window = data;
int num_outputs = 0;
int i;

if (window->num_outputs > 1) {
struct wl_output **new_outputs = SDL_malloc((window->num_outputs - 1) * sizeof *window->outputs), **iter = new_outputs;
for (i=0; i < window->num_outputs; i++) {
if (window->outputs[i] != output) {
*iter = window->outputs[i];
iter++;
}
}
SDL_free(window->outputs);
window->outputs = new_outputs;
window->num_outputs--;
} else {
window->num_outputs = 0;
for (i = 0; i < window->num_outputs; i++) {
if (window->outputs[i] == output) { /* remove this one */
if (i == (window->num_outputs-1)) {
window->outputs[i] = NULL;
} else {
SDL_memmove(&window->outputs[i], &window->outputs[i+1], sizeof (output) * ((window->num_outputs - i) - 1));
}
window->num_outputs--;
i--;
}
}

if (window->num_outputs == 0) {
SDL_free(window->outputs);
window->outputs = NULL;
}
Expand Down

0 comments on commit aa259ed

Please sign in to comment.