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 ? > > > - > > > > 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. > > > > > 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 :] > > > > > 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