mirror of
https://gitlab.freedesktop.org/wayland/weston.git
synced 2026-01-06 10:50:18 +01:00
input: Empty the current input region when configuring pointer surfaces
The input region of the cursor surface is set to empty in pointer_cursor_surface_configure(). Since during the commit process this function is called before the pending input region is made current, it empties surface->pending.input instead of surface->input. But pointer_cursor_surface_configure() is also called from pointer_set_cursor() in order to map the cursor even if there isn't a subsequent attach and commit to the cursor surface. In that case, surface->input is never emptied, since the configure function emptied only the pending input region and there wasn't a commit that made it effective. Fix this by emptying both pending and current input regions. The latter shouldn't cause problems since the surface can't have a role prior to being assigned the cursor role, so it shouldn't be mapped in the first place. Also change toytoolkit so that it triggers the bug. https://bugs.freedesktop.org/show_bug.cgi?id=73711
This commit is contained in:
parent
cd31275f28
commit
23900f70e5
2 changed files with 4 additions and 3 deletions
|
|
@ -3458,13 +3458,13 @@ input_set_pointer_image_index(struct input *input, int index)
|
|||
if (!buffer)
|
||||
return;
|
||||
|
||||
wl_pointer_set_cursor(input->pointer, input->pointer_enter_serial,
|
||||
input->pointer_surface,
|
||||
image->hotspot_x, image->hotspot_y);
|
||||
wl_surface_attach(input->pointer_surface, buffer, 0, 0);
|
||||
wl_surface_damage(input->pointer_surface, 0, 0,
|
||||
image->width, image->height);
|
||||
wl_surface_commit(input->pointer_surface);
|
||||
wl_pointer_set_cursor(input->pointer, input->pointer_enter_serial,
|
||||
input->pointer_surface,
|
||||
image->hotspot_x, image->hotspot_y);
|
||||
}
|
||||
|
||||
static const struct wl_callback_listener pointer_surface_listener;
|
||||
|
|
|
|||
|
|
@ -1529,6 +1529,7 @@ pointer_cursor_surface_configure(struct weston_surface *es,
|
|||
weston_view_set_position(pointer->sprite, x, y);
|
||||
|
||||
empty_region(&es->pending.input);
|
||||
empty_region(&es->input);
|
||||
|
||||
if (!weston_surface_is_mapped(es)) {
|
||||
wl_list_insert(&es->compositor->cursor_layer.view_list,
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue