|
@@ -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;
|
|
|
}
|