wayland: Changed output removal in handle_surface_leave()
No longer needs an extra malloc, handles unexpected cases like the same output being listed twice.
parent
ce7ae4ec8d
commit
aa259ed52d
|
@ -406,21 +406,22 @@ static void
|
||||||
handle_surface_leave(void *data, struct wl_surface *surface,
|
handle_surface_leave(void *data, struct wl_surface *surface,
|
||||||
struct wl_output *output) {
|
struct wl_output *output) {
|
||||||
SDL_WindowData *window = data;
|
SDL_WindowData *window = data;
|
||||||
|
int num_outputs = 0;
|
||||||
int i;
|
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++) {
|
for (i = 0; i < window->num_outputs; i++) {
|
||||||
if (window->outputs[i] != output) {
|
if (window->outputs[i] == output) { /* remove this one */
|
||||||
*iter = window->outputs[i];
|
if (i == (window->num_outputs-1)) {
|
||||||
iter++;
|
window->outputs[i] = NULL;
|
||||||
}
|
|
||||||
}
|
|
||||||
SDL_free(window->outputs);
|
|
||||||
window->outputs = new_outputs;
|
|
||||||
window->num_outputs--;
|
|
||||||
} else {
|
} else {
|
||||||
window->num_outputs = 0;
|
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);
|
SDL_free(window->outputs);
|
||||||
window->outputs = NULL;
|
window->outputs = NULL;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue