From: Rémi Bernon rbernon@codeweavers.com
--- dlls/winewayland.drv/waylanddrv.h | 1 + dlls/winewayland.drv/window.c | 23 +++++++++++++++++++++++ dlls/winewayland.drv/window_surface.c | 14 +------------- 3 files changed, 25 insertions(+), 13 deletions(-)
diff --git a/dlls/winewayland.drv/waylanddrv.h b/dlls/winewayland.drv/waylanddrv.h index 46c283865d8..496a6f1ea60 100644 --- a/dlls/winewayland.drv/waylanddrv.h +++ b/dlls/winewayland.drv/waylanddrv.h @@ -297,6 +297,7 @@ struct wayland_win_data struct wayland_win_data *wayland_win_data_get(HWND hwnd); void wayland_win_data_release(struct wayland_win_data *data);
+BOOL set_window_surface_contents(HWND hwnd, struct wayland_shm_buffer *shm_buffer, HRGN damage_region); void ensure_window_surface_contents(HWND hwnd);
/********************************************************************** diff --git a/dlls/winewayland.drv/window.c b/dlls/winewayland.drv/window.c index 9665d33375e..096dd2bb5fb 100644 --- a/dlls/winewayland.drv/window.c +++ b/dlls/winewayland.drv/window.c @@ -711,6 +711,29 @@ struct wayland_surface *wayland_surface_lock_hwnd(HWND hwnd) return surface; }
+BOOL set_window_surface_contents(HWND hwnd, struct wayland_shm_buffer *shm_buffer, HRGN damage_region) +{ + struct wayland_surface *wayland_surface; + BOOL committed = FALSE; + + if ((wayland_surface = wayland_surface_lock_hwnd(hwnd))) + { + if (wayland_surface_reconfigure(wayland_surface)) + { + wayland_surface_attach_shm(wayland_surface, shm_buffer, damage_region); + wl_surface_commit(wayland_surface->wl_surface); + committed = TRUE; + } + else + { + TRACE("Wayland surface not configured yet, not flushing\n"); + } + pthread_mutex_unlock(&wayland_surface->mutex); + } + + return committed; +} + void ensure_window_surface_contents(HWND hwnd) { struct wayland_surface *wayland_surface; diff --git a/dlls/winewayland.drv/window_surface.c b/dlls/winewayland.drv/window_surface.c index 570c186861b..0d5eb0bd9ff 100644 --- a/dlls/winewayland.drv/window_surface.c +++ b/dlls/winewayland.drv/window_surface.c @@ -386,19 +386,7 @@ static BOOL wayland_window_surface_flush(struct window_surface *window_surface,
wayland_shm_buffer_copy_data(shm_buffer, color_bits, &surface_rect, copy_from_window_region);
- pthread_mutex_lock(&wws->wayland_surface->mutex); - if (wayland_surface_reconfigure(wws->wayland_surface)) - { - wayland_surface_attach_shm(wws->wayland_surface, shm_buffer, - surface_damage_region); - wl_surface_commit(wws->wayland_surface->wl_surface); - flushed = TRUE; - } - else - { - TRACE("Wayland surface not configured yet, not flushing\n"); - } - pthread_mutex_unlock(&wws->wayland_surface->mutex); + flushed = set_window_surface_contents(window_surface->hwnd, shm_buffer, surface_damage_region); wl_display_flush(process_wayland.wl_display);
NtGdiSetRectRgn(shm_buffer->damage_region, 0, 0, 0, 0);