On 09/14/2016 11:59 AM, Guilherme Íscaro wrote:
> Hey Christopher, some comments were answered by k-s. I will add some
> thoughts.
>
> On Tue, Sep 13, 2016 at 8:15 PM, Christopher Michael <cp.mich...@samsung.com
>> wrote:
>
>> Hi Gustavo,
>>
>> Quite a few inlined comments below, so please read whole email :)
>>
>> On 09/13/2016 06:00 PM, Bruno Dilly wrote:
>>> Hi folks,
>>>
>>> We’re working on improve EFL to support multi-seat in the same
>> application
>>> window.
>>>
>>> For make it doable, we’re considering the following approaches:
>>>
>>>    -
>>>
>>>    When using Wayland (Weston compositor) just get seat information from
>> it
>>>    -
>>>
>>
>> What about the Enlightenment wayland compositor ??
>>
>>>    When using X11 or FB, use VNC server to gather multiple seats mapped
>> to
>>>    remote clients
>>>
>>>
>>> To make it possible, the following changes on Evas, Ecore_Evas, Ecore and
>>> Ecore_Wl2 APIs are proposed. Please let us read your comments about it
>> =)
>>>
>>> After this work is done we’ll support it on Edje, but it’s not covered by
>>> this discussion (we’ll send another RFC if it seems required at the
>> time).
>>>
>>> Some tests and PoC were written on this repository:
>>>
>>> https://github.com/profusion/multi-seat-tests/
>>>
>>> Also could somebody please help us creating dev accounts for Iscaro and
>> me?
>>
>> Uhhh, you should already have a dev account...
>>
>>> So we could create dev branches and avoid keeping our work on external
>>> repositories and making our workflow a bit more straightforward?
>>>
>>> Thanks in advance
>>>
>>>
>>> = Changes on Evas =
>>>
>>>    -
>>>
>>>    _Evas_Public_Data should contain a hash indexed by seat of focused
>>>    Evas_Objects. From “pd->focused” to “pd->focused[seat]”.
>>>    -
>>>
>>>    A function similar to evas_object_top_at_pointer_get(const Evas *e)
>>>    should be added. This new function will receive the Efl_Input_Device
>> (the
>>>    seat) as argument. The old function should return the top Evas_Object
>>>    according to the default seat
>>>    -
>>
>> I don't think using Efl_Input_Device as "the seat" is a good idea here.
>> A single seat can have multiple input devices (pointer, keyboard, etc).
>> Efl_Input_Device (to me) implies a single input device (ie: a single
>> pointer, single keyboard, etc). Whereas a "seat" can have multiple
>> devices attached...
>>
>
> Well, we decided to use an Efl_Input_Device because it already exists a
> class that refers to a seat. In our idea every input (mouse, and keyboard)
> would have as parent the seat that it belongs to.
>
>
>>
>>>
>>>    evas_canvas_focus_get() should return the object focused by the
>> default
>>>    seat.
>>
>> IMO, this is not going to entirely work. In Wayland, you can have
>> "pointer focus", "keyboard focus", "touch focus", etc, etc ... a single
>> object focused by the "default" seat is not likely to cover everything.
>>
>> Pointer One on Seat One could be focused Object One, while Pointer Two
>> on Seat One could be focusing a different object but on the same canvas.
>> The function evas_canvas_focus_get should likely take some parameters
>> here...perhaps the seat ? Perhaps the pointer ? Not 100% sure, just
>> tossing out thoughts...
>>
>
> In this case where someone has two mices (for example) in the same seat,
> why not consider that the user just changed the focus from object one to
> object two ?
>

You can ignore my comments wrt this. I was thinking of multiseat along 
the lines of the systemd/logind type of multiseat.

>
>>
>>>    -
>>>
>>>    evas_canvas_pointer_canvas_xy_get() Should return the XY from the
>>>    default seat.
>>>    -
>>>
>>>    evas_canvas_seat_pointer_canvas_xy_get() - Same thing as
>>>    evas_canvas_pointer_canvas_xy_get(), however it returns the XY based
>> on the
>>>    seat.
>>>    -
>>>
>>>    evas_object_focus_set() - Will set/unset the focus only for the
>> default
>>>    seat.
>>>    -
>>>
>>>    evas_object_focus_by_seat_set() should be added
>>>    -
>>>
>>>    evas_event_feed_hold - Will act in the default seat
>>>    -
>>>
>>
>> Likely all these above functions should take a "seat" as a parameter ...
>> Everything above is "coded" using the default seat ... What happens with
>> other seats ???
>>
>>>    Add evas_event_feed_hold_by_seat() - Should we support this ?
>>
>> Probably, yes...
>>
>>>    -
>>>
>>>    Add evas_device_seat_get(Evas_Device *dev);
>>>    -
>>>
>>>       We may create a helper function in Efl_Input_Device::seat_get
>>>       -
>>>
>>>    All evas_event_* functions will work on the top most seat.
>>
>> I think you may run into a problem in the future with this ... Have not
>> thought it out entirely, but (imo) limiting functions to a single "top
>> most" seat is likely to lead to problems in the future where there are
>> multiple seats... ie: What about events coming from other seats ??
>>
>> So in order
>>>    to add an event for ‘seat 1’ one should do: evas_device_push(evas,
>>>    seatOne); evas_event_*(); evas_device_pop(evas);
>>>    -
>>>
>>>    Evas will automatically create Evas_Devices
>>>
>>>
>>>
>>> = Changes on Ecore_Evas =
>>>
>>>    -
>>>
>>>    ecore_evas_x11_vnc_server_enabled(Ecore_Evas *ee, bool enable); ->
>> This
>>>    will enable vnc server for the ecore_evas x11 module.
>>>    -
>>>
>>>    The struct _Ecore_Evas_Interface_X11 should contain a new function
>> with
>>>    the following signature Eina_Bool _setup_vnc_server() that will
>> create the
>>>    vnc server and start listening for clients.
>>>    -
>>>
>>>    ecore_evas_x11_vnc_server_addr_set(Ecore_Evas *ee, const char *addr);
>>>    -
>>>
>>>    ecore_evas_x11_vnc_server_accept_cb_set(Ecore_Evas *ee, Cb
>> accept_cb);
>>>    -
>>>
>>>    Ecore_Evas_x11 will create Efl_Input_Devices for every new user and
>> set
>>>    the emulated seat.
>>>    -
>>>
>>>    In case of x11 - For every new vnc client an Efl_Input_Device will be
>>>    created and added to the Evas canvas.
>>>
>>>
>>>
>>> = Changes on Evas x11 engine =
>>>
>>>    -
>>>
>>>    A callback will be created in order to notify the ecore_evas_x11
>> backend
>>>    with the modified pixels. This will be used to properly draw the VNC
>> remote
>>>    screen.
>>>
>>>
>>>
>>> = Changes on Ecore_Wl2 =
>>>
>>>    -
>>>
>>>    In _Ecore_Wl2_Input - a Eina_Stringshare * will be added to the wl
>>>    substruct. This Eina_Stringshare * will represent the seat name.
>>>    -
>>
>> Why ??? Ecore_Wl2_Input structure already has input->wl.seat pointer ...
>> Ecore_Wl2_Display already has an Eina_List of Ecore_Wl2_Seats wherein
>> Ecore_Wl2_Seat already contains a stringshare 'name'....
>>
>
> My bad, sorry.
>

That's ok .. was probably just overlooked :)

>
>>
>>>
>>>    Implement the _seat_cb_name() function in order to collect the seat
>> name.
>>>    -
>>
>> The skeleton for this is already in ecore_wl2_input.c....
>>
>
> I meant to implement this skeleton :]
>

Yea, would make sense to do that for multi-seat :)

>
>>
>>>
>>>    For every wl_pointer/wl_keyboard/wl_seat it will be create an
>>>    Efl_Input_Device. The wl_pointer and wl_keyboard will have the
>> wl_seat as
>>>    parent. After creation of these Efl_Input_Devices an ecore_event will
>> be
>>>    generated, so ecore_evas_input can grab it and properly add the
>> devices
>>>    into the canvas.
>>>
>>
>> Please see above comment about "I don't think using Efl_Input_Device as
>> "the seat" is a good idea here." ... It seems like above
>> Efl_Input_Device is a "seat", where here it is an actual Input Device....
>>
>>>
>>>
>>> = Ecore =
>>>
>>>    -
>>>
>>>    Ecore_Events structs should contain the Efl_Input_Device that
>> originated
>>>    the event.
>>>
>>>
>>>    -
>>>
>>>    These functions may be useful:
>>>    -
>>>
>>>       Eina_List *ecore_input_get_seats() - Return all the available seats
>>
>> Would prefer verbs last (as is EFL style) .. ecore_input_seats_get...
>>
>
> Oops
>
>
>>
>>>       -
>>>
>>>       Ecore_Seat * ecore_input_seat_find(const char *name)
>>>
>>>
>>>
>>
>> Cheers,
>> dh
>>
>>
>>
>> ------------------------------------------------------------
>> ------------------
>> _______________________________________________
>> enlightenment-devel mailing list
>> enlightenment-devel@lists.sourceforge.net
>> https://lists.sourceforge.net/lists/listinfo/enlightenment-devel
>>
>
> Thanks !
> ------------------------------------------------------------------------------
> _______________________________________________
> enlightenment-devel mailing list
> enlightenment-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/enlightenment-devel
>



------------------------------------------------------------------------------
_______________________________________________
enlightenment-devel mailing list
enlightenment-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel

Reply via email to