compositor: make the input region of drag surfaces empty
With the input region changes, drag surfaces were being picked and receiving events which led to problems on the client side.
This commit is contained in:
parent
cacb7cd0f6
commit
90fbbd74cc
@ -190,6 +190,15 @@ region_is_undefined(pixman_region32_t *region)
|
||||
return region->data == &undef_region_data;
|
||||
}
|
||||
|
||||
static void
|
||||
empty_region(pixman_region32_t *region)
|
||||
{
|
||||
if (!region_is_undefined(region))
|
||||
pixman_region32_fini(region);
|
||||
|
||||
pixman_region32_init(region);
|
||||
}
|
||||
|
||||
WL_EXPORT struct weston_surface *
|
||||
weston_surface_create(struct weston_compositor *compositor)
|
||||
{
|
||||
@ -1910,6 +1919,7 @@ weston_input_update_drag_surface(struct wl_input_device *input_device,
|
||||
surface_changed = 1;
|
||||
|
||||
if (!input_device->drag_surface || surface_changed) {
|
||||
undef_region(&device->drag_surface->input);
|
||||
device->drag_surface = NULL;
|
||||
if (!surface_changed)
|
||||
return;
|
||||
@ -1928,8 +1938,14 @@ weston_input_update_drag_surface(struct wl_input_device *input_device,
|
||||
wl_list_insert(weston_compositor_top(device->compositor),
|
||||
&device->drag_surface->link);
|
||||
weston_surface_assign_output(device->drag_surface);
|
||||
empty_region(&device->drag_surface->input);
|
||||
}
|
||||
|
||||
/* the client may have attached a buffer with a different size to
|
||||
* the drag surface, causing the input region to be reset */
|
||||
if (region_is_undefined(&device->drag_surface->input))
|
||||
empty_region(&device->drag_surface->input);
|
||||
|
||||
if (!dx && !dy)
|
||||
return;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user