On Wed, Feb 08, 2017 at 03:05:54PM -0600, Derek Foreman wrote:
> The frame callback added on button click re-adds itself when done,
> so adding a new one every click resulted in an ever increasing
> number of callbacks.
> 
> Signed-off-by: Derek Foreman <[email protected]>
> ---
>  clients/resizor.c | 5 +++++
>  1 file changed, 5 insertions(+)
> 
> diff --git a/clients/resizor.c b/clients/resizor.c
> index 5d342e1f..600452ad 100644
> --- a/clients/resizor.c
> +++ b/clients/resizor.c
> @@ -53,6 +53,7 @@ struct resizor {
>       struct spring height;
>       struct wl_callback *frame_callback;
>       bool pointer_locked;
> +     bool locked_frame_callback_registered;
>       struct input *locked_input;
>       float pointer_x;
>       float pointer_y;
> @@ -330,11 +331,15 @@ button_handler(struct widget *widget,
>                                                 handle_pointer_unlocked);
>               resizor->locked_input = input;
>  
> +             if (resizor->locked_frame_callback_registered)
> +                     return;
> +
>               surface = window_get_wl_surface(resizor->window);
>               callback = wl_surface_frame(surface);
>               wl_callback_add_listener(callback,
>                                        &locked_pointer_frame_listener,
>                                        resizor);
> +             resizor->locked_frame_callback_registered = true;

Won't this mean that we can only initiate the resize once? The second
time we click, the locked_frame_callback_registered will still be true,
and we won't add the frame listener.

Instead what we could do is probably to check the result of
window_lock_pointer(), if it succeeded, continue with setting
resizor->locked_input. Before trying to lock, check if we already have a
locked_input, and if so, skip locking and adding the frame callback.
Would also mean we need to clean up the locked_input on button-release
and on unlocked (though seems weston-resizer crashes when unlocked by
the compositor and not by itself).


Jonas

>       } else if (button == BTN_LEFT &&
>                  state == WL_POINTER_BUTTON_STATE_RELEASED) {
>               input_set_pointer_image(input, CURSOR_LEFT_PTR);
> -- 
> 2.11.0
> 
> _______________________________________________
> wayland-devel mailing list
> [email protected]
> https://lists.freedesktop.org/mailman/listinfo/wayland-devel
_______________________________________________
wayland-devel mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/wayland-devel

Reply via email to