[PATCH weston] xwm: find a seat for all the surface's views

Giulio Camuffo giuliocamuffo at gmail.com
Wed Nov 12 03:32:59 PST 2014


2014-11-12 13:25 GMT+02:00 Pekka Paalanen <ppaalanen at gmail.com>:
> On Sat,  4 Oct 2014 13:58:33 +0300
> Giulio Camuffo <giuliocamuffo at gmail.com> wrote:
>
>> This allows to move or resize a xwayland client by acting on all
>> its views.
>
> Hmm, is this a good thing? What use cases you had in mind?

I have two views for the same surface, and they are both user
interactable and indistinguishable from each other. As of now, only
one can be moved or resized, for no apparent reason.

>
> Shouldn't there be a difference between move/resizeable views and other
> views? Like if you have an additional view in a pager or the alt+tab
> list, that shouldn't be resizable and it might not want to be
> interactive (input-capable) at all.

Yeah, but that can be done in the shell, by looking at the view that
is under the pointer. If that view is not supposed to be used to
resize the surface, ignore the resize request.

>
> What's the idea here? Not just for Xwayland windows but all of them.
>
> I think we have no distinction between interactive and non-interactive
> views currently, so we just handle it through grabs, am I right?
>
> So, this patch is simply to make the Xwayland windows behave the same
> as native windows?

Yes, basically, or more similar.

>
>
> Thanks,
> pq
>
>
>> ---
>>  xwayland/window-manager.c | 7 ++++---
>>  1 file changed, 4 insertions(+), 3 deletions(-)
>>
>> diff --git a/xwayland/window-manager.c b/xwayland/window-manager.c
>> index 4e91f9d..a283a3c 100644
>> --- a/xwayland/window-manager.c
>> +++ b/xwayland/window-manager.c
>> @@ -1214,8 +1214,8 @@ weston_wm_pick_seat_for_window(struct weston_wm_window *window)
>>
>>       seat = NULL;
>>       wl_list_for_each(s, &wm->server->compositor->seat_list, link) {
>> -             if (s->pointer != NULL &&
>> -                 s->pointer->focus == window->view &&
>> +             if (s->pointer != NULL && s->pointer->focus &&
>> +                 s->pointer->focus->surface == window->surface &&
>>                   s->pointer->button_count > 0 &&
>>                   (seat == NULL ||
>>                    s->pointer->grab_serial -
>> @@ -1248,7 +1248,8 @@ weston_wm_window_handle_moveresize(struct weston_wm_window *window,
>>               &wm->server->compositor->shell_interface;
>>
>>       if (seat == NULL || seat->pointer->button_count != 1
>> -         || !window->view || seat->pointer->focus != window->view)
>> +         || !seat->pointer->focus
>> +         || seat->pointer->focus->surface != window->surface)
>>               return;
>>
>>       detail = client_message->data.data32[2];
>


More information about the wayland-devel mailing list