Commit 5c3192c7 authored by Olivier Fourdan's avatar Olivier Fourdan

wayland: apply empty input shape on parent commit

For subsurfaces, the new state which includes the input shape is not
applied by the compositor if the subsurface is in effective synchronous

So we need to apply the input shape once parent surface is in effective
desynchronized mode, which is when it's committed, otherwise the input
shape may never be applied if the widget is not using being_paint() /
end_paint() to draw on its subsurface, like clutter does.

We do that only for empty input shape as those won't need update when
the subsurface is resized, for all other non-empty input shape, the
client still has to use begin_paint()/end_paint() for the input shape to
be applied.
parent cacd1da8
......@@ -1193,6 +1193,31 @@ gdk_wayland_window_sync_input_region (GdkWindow *window)
impl->input_region_dirty = FALSE;
static void
gdk_wayland_set_input_region_if_empty (GdkWindow *window)
GdkWindowImplWayland *impl = GDK_WINDOW_IMPL_WAYLAND (window->impl);
GdkWaylandDisplay *display;
struct wl_region *empty;
if (!impl->input_region_dirty)
if (impl->input_region == NULL)
if (!cairo_region_is_empty (impl->input_region))
display = GDK_WAYLAND_DISPLAY (gdk_window_get_display (window));
empty = wl_compositor_create_region (display->compositor);
wl_surface_set_input_region (impl->display_server.wl_surface, empty);
wl_region_destroy (empty);
impl->input_region_dirty = FALSE;
static void
surface_enter (void *data,
struct wl_surface *wl_surface,
......@@ -1242,6 +1267,9 @@ on_parent_surface_committed (GdkWindowImplWayland *parent_impl,
impl->parent_surface_committed_handler = 0;
wl_subsurface_set_desync (impl->display_server.wl_subsurface);
/* Special case if the input region is empty, it won't change on resize */
gdk_wayland_set_input_region_if_empty (window);
static void
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment