On 09/10/15 11:17 AM, David FORT wrote:
> This patch adds the missing calls to release when the seat has capabilities
> changes. It also fixes a missing release of the touch object and a leak with
> old clients.
> 
> Signed-off-by: David FORT <[email protected]>

Looks good to me.

Reviewed-by: Derek Foreman <[email protected]>

> ---
>  clients/window.c | 26 ++++++++++++++++++++++----
>  1 file changed, 22 insertions(+), 4 deletions(-)
> 
> diff --git a/clients/window.c b/clients/window.c
> index 47a79aa..6d3e944 100644
> --- a/clients/window.c
> +++ b/clients/window.c
> @@ -3256,7 +3256,10 @@ seat_handle_capabilities(void *data, struct wl_seat 
> *seat,
>               wl_pointer_add_listener(input->pointer, &pointer_listener,
>                                       input);
>       } else if (!(caps & WL_SEAT_CAPABILITY_POINTER) && input->pointer) {
> -             wl_pointer_destroy(input->pointer);
> +             if (input->display->seat_version >= 
> WL_POINTER_RELEASE_SINCE_VERSION)
> +                     wl_pointer_release(input->pointer);
> +             else
> +                     wl_pointer_destroy(input->pointer);
>               input->pointer = NULL;
>       }
>  
> @@ -3266,7 +3269,10 @@ seat_handle_capabilities(void *data, struct wl_seat 
> *seat,
>               wl_keyboard_add_listener(input->keyboard, &keyboard_listener,
>                                        input);
>       } else if (!(caps & WL_SEAT_CAPABILITY_KEYBOARD) && input->keyboard) {
> -             wl_keyboard_destroy(input->keyboard);
> +             if (input->display->seat_version >= 
> WL_KEYBOARD_RELEASE_SINCE_VERSION)
> +                     wl_keyboard_release(input->keyboard);
> +             else
> +                     wl_keyboard_destroy(input->keyboard);
>               input->keyboard = NULL;
>       }
>  
> @@ -3275,7 +3281,10 @@ seat_handle_capabilities(void *data, struct wl_seat 
> *seat,
>               wl_touch_set_user_data(input->touch, input);
>               wl_touch_add_listener(input->touch, &touch_listener, input);
>       } else if (!(caps & WL_SEAT_CAPABILITY_TOUCH) && input->touch) {
> -             wl_touch_destroy(input->touch);
> +             if (input->display->seat_version >= 
> WL_TOUCH_RELEASE_SINCE_VERSION)
> +                     wl_touch_release(input->touch);
> +             else
> +                     wl_touch_destroy(input->touch);
>               input->touch = NULL;
>       }
>  }
> @@ -5269,11 +5278,20 @@ input_destroy(struct input *input)
>               else
>                       wl_data_device_destroy(input->data_device);
>       }
> -     if (input->display->seat_version >= 3) {
> +     if (input->display->seat_version >= WL_POINTER_RELEASE_SINCE_VERSION) {
> +             if (input->touch)
> +                     wl_touch_release(input->touch);
>               if (input->pointer)
>                       wl_pointer_release(input->pointer);
>               if (input->keyboard)
>                       wl_keyboard_release(input->keyboard);
> +     } else {
> +             if (input->touch)
> +                     wl_touch_destroy(input->touch);
> +             if (input->pointer)
> +                     wl_pointer_destroy(input->pointer);
> +             if (input->keyboard)
> +                     wl_keyboard_destroy(input->keyboard);
>       }
>  
>       fini_xkb(input);
> 

_______________________________________________
wayland-devel mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/wayland-devel

Reply via email to