On Thu, Sep 27, 2012 at 06:40:44PM +0200, Jonas Ådahl wrote:
> There is no event notifying when a move is finished and if a window
> requests to be moved but no move is performed and no enter/leave events
> are received, the pointer gets stuck in a grab-state. To avoid this,
> change the sprite to LEFT_PTR if an button-released event is received.
> 
> Signed-off-by: Jonas Ådahl <jad...@gmail.com>

Right, that's a problem, but I think we're better off just not setting
the cursor in the client.  It was always a bit hacky and fragile that
the client should set the cursor for the servers grab.  Today the
server sets the cursor with the help of desktop-shell, so we can just
drop the cursor setting code.

Kristian

> ---
>  clients/window.c |   12 +++++++++---
>  1 file changed, 9 insertions(+), 3 deletions(-)
> 
> diff --git a/clients/window.c b/clients/window.c
> index 330d96f..4d31964 100644
> --- a/clients/window.c
> +++ b/clients/window.c
> @@ -1798,6 +1798,9 @@ frame_button_handler(struct widget *widget,
>                                               display->serial, location);
>                       break;
>               }
> +     } else if (button == BTN_LEFT &&
> +                state == WL_POINTER_BUTTON_STATE_RELEASED) {
> +             input_set_pointer_image(input, CURSOR_LEFT_PTR);
>       } else if (button == BTN_RIGHT &&
>                  state == WL_POINTER_BUTTON_STATE_PRESSED) {
>               window_show_frame_menu(window, input, time);
> @@ -2033,12 +2036,15 @@ pointer_handle_button(void *data, struct wl_pointer 
> *pointer, uint32_t serial,
>           state == WL_POINTER_BUTTON_STATE_PRESSED)
>               input_grab(input, input->focus_widget, button);
>  
> -     widget = input->grab;
> +     if (input->grab != NULL)
> +             widget = input->grab;
> +     else
> +             widget = input->focus_widget;
>       if (widget && widget->button_handler)
>               (*widget->button_handler)(widget,
>                                         input, time,
>                                         button, state,
> -                                       input->grab->user_data);
> +                                       widget->user_data);
>  
>       if (input->grab && input->grab_button == button &&
>           state == WL_POINTER_BUTTON_STATE_RELEASED)
> @@ -3216,7 +3222,7 @@ menu_motion_handler(struct widget *widget,
>  {
>       struct menu *menu = data;
>  
> -     if (widget == menu->widget)
> +     if (input->focus_widget == menu->widget)
>               menu_set_item(data, y);
>  
>       return CURSOR_LEFT_PTR;
> -- 
> 1.7.9.5
> 
> _______________________________________________
> wayland-devel mailing list
> wayland-devel@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/wayland-devel
_______________________________________________
wayland-devel mailing list
wayland-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/wayland-devel

Reply via email to