summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/video/wayland/SDL_waylandevents.c2
-rw-r--r--src/video/wayland/SDL_waylandopengl.c10
-rw-r--r--src/video/wayland/SDL_waylandvideo.c7
-rw-r--r--src/video/wayland/SDL_waylandvideo.h9
-rw-r--r--src/video/wayland/SDL_waylandwindow.c5
5 files changed, 32 insertions, 1 deletions
diff --git a/src/video/wayland/SDL_waylandevents.c b/src/video/wayland/SDL_waylandevents.c
index 626d4cf0..5f078375 100644
--- a/src/video/wayland/SDL_waylandevents.c
+++ b/src/video/wayland/SDL_waylandevents.c
@@ -287,6 +287,8 @@ Wayland_display_add_input(SDL_WaylandData *d, uint32_t id)
wl_input_device_add_listener(input->input_device,
&input_device_listener, input);
wl_input_device_set_user_data(input->input_device, input);
+
+ wayland_schedule_write(d);
}
/* vi: set ts=4 sw=4 expandtab: */
diff --git a/src/video/wayland/SDL_waylandopengl.c b/src/video/wayland/SDL_waylandopengl.c
index 163d2ed9..4919701d 100644
--- a/src/video/wayland/SDL_waylandopengl.c
+++ b/src/video/wayland/SDL_waylandopengl.c
@@ -33,6 +33,8 @@ Wayland_GL_SwapWindow(_THIS, SDL_Window * window)
SDL_WaylandData *data = _this->driverdata;
eglSwapBuffers(data->edpy, wind->esurf);
+
+ wayland_schedule_write(data);
}
int
@@ -79,6 +81,8 @@ Wayland_GL_LoadLibrary(_THIS, const char *path)
}
Wayland_PumpEvents(_this);
+ wayland_schedule_write(data);
+
return 0;
}
@@ -120,6 +124,8 @@ Wayland_GL_UnloadLibrary(_THIS)
_this->gl_config.dll_handle = NULL;
_this->gl_config.driver_loaded = 0;
}
+
+ wayland_schedule_write(data);
}
SDL_GLContext
@@ -138,6 +144,8 @@ Wayland_GL_CreateContext(_THIS, SDL_Window * window)
Wayland_GL_MakeCurrent(_this, window, NULL);
+ wayland_schedule_write(data);
+
return data->context;
}
@@ -155,6 +163,8 @@ Wayland_GL_MakeCurrent(_THIS, SDL_Window *window, SDL_GLContext context)
return -1;
}
+ wayland_schedule_write(data);
+
return 0;
}
diff --git a/src/video/wayland/SDL_waylandvideo.c b/src/video/wayland/SDL_waylandvideo.c
index ea47b64c..c132d85a 100644
--- a/src/video/wayland/SDL_waylandvideo.c
+++ b/src/video/wayland/SDL_waylandvideo.c
@@ -167,7 +167,9 @@ static int update_event_mask(uint32_t mask, void *data)
d->event_mask = mask;
if (mask & WL_DISPLAY_WRITABLE)
- wl_display_iterate(d->display, WL_DISPLAY_WRITABLE);
+ d->schedule_write = 1;
+ else
+ d->schedule_write = 0;
return 0;
}
@@ -180,6 +182,7 @@ Wayland_VideoInit(_THIS)
data = malloc(sizeof *data);
if (data == NULL)
return 0;
+ data->schedule_write = 0;
_this->driverdata = data;
@@ -214,6 +217,8 @@ Wayland_VideoInit(_THIS)
display.driverdata = NULL;
SDL_AddVideoDisplay(&display);
+ wayland_schedule_write(data);
+
return 0;
}
diff --git a/src/video/wayland/SDL_waylandvideo.h b/src/video/wayland/SDL_waylandvideo.h
index 2247b824..77f47679 100644
--- a/src/video/wayland/SDL_waylandvideo.h
+++ b/src/video/wayland/SDL_waylandvideo.h
@@ -56,10 +56,19 @@ typedef struct
int event_fd;
int event_mask;
+ int schedule_write;
+
const SDL_Scancode *input_table;
int input_table_size;
} SDL_WaylandData;
+static inline void
+wayland_schedule_write(SDL_WaylandData *data)
+{
+ if (data->schedule_write)
+ wl_display_iterate(data->display, WL_DISPLAY_WRITABLE);
+}
+
#endif /* _SDL_nullvideo_h */
/* vi: set ts=4 sw=4 expandtab: */
diff --git a/src/video/wayland/SDL_waylandwindow.c b/src/video/wayland/SDL_waylandwindow.c
index 3cfb9c49..eecd7461 100644
--- a/src/video/wayland/SDL_waylandwindow.c
+++ b/src/video/wayland/SDL_waylandwindow.c
@@ -37,6 +37,8 @@ void Wayland_ShowWindow(_THIS, SDL_Window * window)
window->x, window->y,
window->w, window->h);
*/
+
+ wayland_schedule_write((SDL_WaylandData *) _this->driverdata);
}
@@ -88,6 +90,8 @@ int Wayland_CreateWindow(_THIS, SDL_Window * window)
return -1;
}
+ wayland_schedule_write(c);
+
printf("created window\n");
return 0;
@@ -106,6 +110,7 @@ void Wayland_DestroyWindow(_THIS, SDL_Window * window)
wl_egl_window_destroy(wind->egl_window);
wl_surface_destroy(wind->surface);
SDL_free(wind);
+ wayland_schedule_write(data);
}
printf("destroyed window\n");