xwayland: Remove related touchpoints when unrealizing windows

These sequences are forgotten to all purposes.

Signed-off-by: Carlos Garnacho <carlosg@gnome.org>
Reviewed-by: Olivier Fourdan <ofourdan@redhat.com>
This commit is contained in:
Carlos Garnacho 2015-05-27 18:42:00 +02:00 committed by Olivier Fourdan
parent b7cd48f71d
commit 44f250a7e8
3 changed files with 19 additions and 3 deletions

View File

@ -844,6 +844,20 @@ DDXRingBell(int volume, int pitch, int duration)
{ {
} }
void
xwl_seat_clear_touch(struct xwl_seat *xwl_seat, WindowPtr window)
{
struct xwl_touch *xwl_touch, *next_xwl_touch;
xorg_list_for_each_entry_safe(xwl_touch, next_xwl_touch,
&xwl_seat->touches, link_touch) {
if (xwl_touch->window->window == window) {
xorg_list_del(&xwl_touch->link_touch);
free(xwl_touch);
}
}
}
void void
InitInput(int argc, char *argv[]) InitInput(int argc, char *argv[])
{ {

View File

@ -287,10 +287,10 @@ xwl_unrealize_window(WindowPtr window)
xwl_screen = xwl_screen_get(screen); xwl_screen = xwl_screen_get(screen);
xorg_list_for_each_entry(xwl_seat, &xwl_screen->seat_list, link) { xorg_list_for_each_entry(xwl_seat, &xwl_screen->seat_list, link) {
if (!xwl_seat->focus_window) if (xwl_seat->focus_window && xwl_seat->focus_window->window == window)
continue;
if (xwl_seat->focus_window->window == window)
xwl_seat->focus_window = NULL; xwl_seat->focus_window = NULL;
xwl_seat_clear_touch(xwl_seat, window);
} }
screen->UnrealizeWindow = xwl_screen->UnrealizeWindow; screen->UnrealizeWindow = xwl_screen->UnrealizeWindow;

View File

@ -159,6 +159,8 @@ void xwl_seat_set_cursor(struct xwl_seat *xwl_seat);
void xwl_seat_destroy(struct xwl_seat *xwl_seat); void xwl_seat_destroy(struct xwl_seat *xwl_seat);
void xwl_seat_clear_touch(struct xwl_seat *xwl_seat, WindowPtr window);
Bool xwl_screen_init_output(struct xwl_screen *xwl_screen); Bool xwl_screen_init_output(struct xwl_screen *xwl_screen);
struct xwl_output *xwl_output_create(struct xwl_screen *xwl_screen, struct xwl_output *xwl_output_create(struct xwl_screen *xwl_screen,