s/teori/theory/ On Mon, Sep 19, 2016 at 6:27 PM, Guilherme Íscaro <isc...@profusion.mobi> wrote:
> > > On Fri, Sep 16, 2016 at 6:17 PM, Christopher Michael < > cp.mich...@samsung.com> wrote: > >> On 09/16/2016 05:11 PM, Guilherme Íscaro wrote: >> > Hey guys, Here's a version 2. >> > >> > = Changes on Evas = >> > >> > - >> > >> > _Evas_Public_Data should contain a hash indexed by seat of focused >> > Evas_Objects. From “pd->focused” to “pd->focused[seat]”. >> > - >> > >> > evas_canvas_focus_get() should return the object focused by the >> default >> > seat. >> > - >> > >> > evas_canvas_pointer_canvas_xy_get() Should return the XY from the >> > default seat. >> > - >> > >> >> I still maintain that any functions dealing with a single specific seat >> are going to come back and bite you when true multi-seat is >> implemented... perhaps (for those type of functions) they should have a >> parameter "seat" or something ??? If no seat is passed in, then assume >> "default" seat... >> >> dh >> > > Hey Christopher, > > In teori we plan to refactor evas_canvas_pointer_canvas_xy_get() and make > it use evas_canvas_seat_pointer_canvas_xy_get() internally. Do you > think this might be a problem as well ? > > >> > 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() - his function will be refactored to use >> > evas_canvas_object_focus_by_seat_set(). >> > - >> > >> > evas_canvas_object_focus_by_seat_set() should be added >> > - >> > >> > Evas will automatically create Evas_Devices >> > - >> > >> > All functions that handle multi-seat should be implement as >> non-legacy, >> > this is using EO. >> > - >> > >> > For every new Evas_Device creation an event >> > (EFL_CANVAS_EVENT_DEVICE_ADD) should be generated containing the new >> > Evas_Device. >> > - >> > >> > When a device is removed another event will be generated >> > (EFL_CANVAS_EVENT_DEVICE_DEL). >> > - >> > >> > Every time an object/canvas receives focus a new event will be >> > generated. The event >> > (EFL_CANVAS_EVENT_DEVICE_FOCUS_IN/OUT)/(EFL_CANVAS_EVENT_ >> OBJECT_DEVICE_FOCUS_IN/OUT) >> > will contain the device itself that generated the focus event and the >> > focused object/canvas. >> > - >> > >> > Add new EO event functions: evas_canvas_event_*(EO *evas, Evas_Device >> > *device_that_originated_the_event, ...Event Args….); >> > - >> > >> > All the existing evas_events_*() functions will be refactored to >> use >> > the new event functions passing NULL as device, this will flag >> > that device >> > belongs to the default seat. >> > - >> > >> > Internally EFL will be refactored to replace the old evas_event_* >> > functions and use the new ones. >> > >> > >> > >> > = Changes on Ecore_Evas = >> > >> > - >> > >> > Eina_Bool ecore_evas_x11_vnc_server_start(Ecore_Evas *ee, const char >> > *addr, int port, Accept_Client_Cb cb, void *cb_data); -> This will >> enable >> > vnc server for the ecore_evas x11 module. >> > - >> > >> > The Accept_Client_Cb will have the following signature: typedef >> > Eina_Bool (Accept_Client_Cb)(void *data, Ecore_Evas *ee, const char >> > *client_addr). This callback should return EINA_TRUE to accept the >> VNC >> > client or EINA_FALSE otherwise. >> > - >> > >> > 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_stop(Ecore_Evas *ee); >> > - >> > >> > 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 = >> > >> > - >> > >> > Implement the _seat_cb_name() function in order to collect the seat >> name. >> > - >> > >> > 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. >> > >> > >> > >> > = Ecore = >> > >> > - >> > >> > Ecore_Events structs should contain the Efl_Input_Device that >> originated >> > the event. >> > >> > >> > - >> > >> > These functions may be useful: >> > - >> > >> > Eina_List *ecore_input_seats_get() - Return all the available >> seats >> > - Ecore_Seat * ecore_input_seat_find(const char *name) >> > >> > >> > On Fri, Sep 16, 2016 at 12:51 PM, Gustavo Sverzut Barbieri < >> > barbi...@gmail.com> wrote: >> > >> >> On Thu, Sep 15, 2016 at 10:47 PM, Derek Foreman < >> der...@osg.samsung.com> >> >> wrote: >> >>> On 15/09/16 10:51 AM, Gustavo Sverzut Barbieri wrote: >> >>>> On Wed, Sep 14, 2016 at 3:42 PM, Derek Foreman < >> der...@osg.samsung.com> >> >> wrote: >> >>>>> Wayland does have separate focus for pointer, keyboard, and touch >> >> within >> >>>>> a seat - and there's no "seat focus" at all. >> >>>> >> >>>> Ok, that helps so we'll basically add focus per device, since your >> >>>> previous explanation that there is a single pointer/keyboard/touch >> per >> >>>> seat, it should work nice. For us it avoids one "parent lookup" to >> >>>> figure out the seat of a given device :-) >> >>>> >> >>>> BUT one thing that we need to understand is the relation between >> >>>> pointer/touch and keyboard focus, this is particularly important so >> we >> >>>> plan a solution that works for legacy EFL (or any toolkit that has a >> >>>> single focused object). >> >>>> >> >>>> Usually we have one focused object (ie: text entry). Clicking or >> >>>> taping (touch) it, will focus. Then typing at the keyboard will send >> >>>> keys there. If you use the keyboard to cycle focus (ie: Tab), then >> >>>> that object previously focused by pointer/touch is unfocused and a >> new >> >>>> one is focused. >> >>>> >> >>>> If pointer and touch are not changing that focus where keyboard send >> >>>> key presses... what are they use? This is why we're planning per-seat >> >>>> focus: be click, tap or "Tab", change the focused object where the >> >>>> next key press will be delivered. >> >>> >> >>> Well, in wayland "activation" (window is "focused" and decorates >> itself >> >>> as such) is sent separately from input events. Pointer focus >> generally >> >>> means the pointer is inside a window - whether that activates the >> window >> >>> or not is up to the compositor (focus follows mouse vs click to focus, >> >> etc) >> >>> >> >>> On weston, when you mouse into a window it will receive a pointer >> enter >> >>> event (and have pointer focus) before it receives any pointer motion >> >>> events - but it won't be activated unless you click. Weston also sets >> >>> the keyboard focus when you click. >> >>> >> >>> But I'm talking about how the compositor delivers events, not how >> >>> applications use them (pointer, touch, keyboard may focus on >> difference >> >>> surfaces in wayland... but how an application focuses widgets on its >> >>> canvas is entirely up to the application?) >> >>> >> >>> Wayland doesn't know anything about "widget focus". That's up to the >> >>> application to define. >> >>> >> >>>> The idea of multi-seat here is to allow 2 users to simultaneously use >> >>>> the same application window, like 2 text entries, each user would be >> >>>> sending text to his own entry (we're not attempting to do multi-user >> >>>> edit of the same text-entry, as that will be much more complex given >> >>>> Evas textblock). >> >>> >> >>> I think it's probably completely reasonable to think of a seat as >> having >> >>> a focus at this level. >> >> >> >> nice, it was more like a terminology and scope thing then :-) >> >> >> >> >> >> >> >>>> Another use is to allow 2 users to interact with different edje drag >> >>>> parts, or in a game you can control 2 players at once. >> >>> >> >>> A shame libinput doesn't do anything for gamepads. I'll assume that's >> >>> outside of the scope of this work. :) >> >> >> >> maybe another day ;-) >> >> >> >> >> >> -- >> >> Gustavo Sverzut Barbieri >> >> -------------------------------------- >> >> Mobile: +55 (16) 99354-9890 >> >> >> >> ------------------------------------------------------------ >> >> ------------------ >> >> _______________________________________________ >> >> 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 >> > >> >> >> >> ------------------------------------------------------------ >> ------------------ >> _______________________________________________ >> 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