This is a partial revert of 2bd880c6c7 which changed to use
wl_display_get_serial function. When can do that for most things,
however things like window move/resize need to use the input serial
which started the move/resize.
Signed-off-by: Chris Michael <cp.michael@samsung.com>
Small patch to create and raise a new event letting ecore_evas know
when the window has been configured. With the addition of xdg_shell v6
support, we cannot commit a surface with an existing buffer until the
surface has been configured. This patch allows us to raise an event to
ecore_evas when the surface has been configured, so we can then attach
a buffer to it.
ref T5090
Signed-off-by: Chris Michael <cp.michael@samsung.com>
As we cannot rely on window->display->serial to be accurate (it is
only set when there is input going on), we should be getting the
'serial' values here directly from a wayland function call.
Signed-off-by: Chris Michael <cp.michael@samsung.com>
With the change to xdg_shell v6 we need to indicate that a window has
a pending configure event, and not show the window if a configure is
pending. In order to handle this, we add a flag to the window
structure and can check it inside ecore_evas.
Signed-off-by: Chris Michael <cp.michael@samsung.com>
When we get a configure event, we should be using the current display
serial to set as the window configure serial value. Previous code
would always end up setting the window configure_serial to 0 as
win->display->serial was not getting updated.
Signed-off-by: Chris Michael <cp.michael@samsung.com>
This patch adds support (client-side) for xdg_shell version 6.
Enlightenment is currently using this version as it's desktop shell,
so we need to support it client-side also.
fixes T4998
@feature
Signed-off-by: Chris Michael <cp.michael@samsung.com>
The common code was skipping frame callback when no shell surface was
present - cursors aren't shell surfaces.
Add the frame callback to the common path and remove the bespoke callback
from the cursor code.
When we are freeing an Ecore_Wl2_Window, there is no need to call
ecore_wl2_window_hide anymore because inside the free function we are
destroying subsurfaces, surfaces, etc, etc so no need to even unmap
them.
Signed-off-by: Chris Michael <cp.michael@samsung.com>
This patch essentially makes sure that the surface gets a NULL buffer
attached to it when we are hiding.
Signed-off-by: Chris Michael <cp.michael@samsung.com>
In order to hide a window (via wayland) we can actually assign a NULL
buffer to the surface, so there is no need to destroy the window's
wl_surface during a hide request.
Signed-off-by: Chris Michael <cp.michael@samsung.com>
There could be situations where wl_surface_frame fails to create a
callback. In those cases, we should not be trying to add a wl_callback
listener for a non-existant callback.
Signed-off-by: Chris Michael <cp.michael@samsung.com>
Summary:
It's not possible to have an Ecore_Wl2_Input without a seat.
Ecore Evas Wayland: Remove seat existence check.
At this point every seat advertised is considered new, therefore
it will not be in the devices list.
Reviewers: barbieri, jpeg, cedric, bdilly
Reviewed By: bdilly
Subscribers: cedric, jpeg
Differential Revision: https://phab.enlightenment.org/D4408
Summary:
It should avoid issues when device is removed after the ecore
event addition but before listeners are called (so pointer
would be invalid).
Reviewers: iscaro
Reviewed By: iscaro
Subscribers: cedric, jpeg
Differential Revision: https://phab.enlightenment.org/D4407
Summary:
When launching an Elementary App using Wayland the elm_config will
automatically connect to the Wayland's display server and all events
regarding seats are lost, since by the time that Ecore_Evas is created
the global events were already dispatched. To fix this problem,
everytime an Ecore_Evas is created, the code must check if there
are any seat capabilities available, if so, the devices will be created.
Reviewers: bdilly, barbieri, cedric, jpeg
Subscribers: devilhorns, cedric, jpeg
Differential Revision: https://phab.enlightenment.org/D4390
If a NULL surface gets passed into ecore_wl2_window_pointer_set that
would mean we are unsetting the cursor surface, so we should still be
calling wl_pointer_set_cursor even with a NULL surface.
Signed-off-by: Chris Michael <cp.michael@samsung.com>
So when mouse / keyboard are present or not it will
generate events.
ecore_evas/wayland will handle that creating or
deleting evas devices for each one (seat device
will be used as parent).
As we call the same code during ecore_wl2_window_surface_get and
ecore_wl2_window_show functions that basically create the wl_surface
for a given window we can unify that code into one function that can
be called from various places. This also fixes an issue inside
ecore_wl2_window_show where the window surface_id may not have been
getting filled properly.
@fix
Signed-off-by: Chris Michael <cp.michael@samsung.com>
As we already call _ecore_wl2_input_cursor_update_stop above, we
actually don't need to call it a second time.
Signed-off-by: Chris Michael <cp.michael@samsung.com>
If we have no cursor surface, then we don't need the pointer frame
callback anymore so call cursor_update_stop which will delete the
pointer frame callback
Signed-off-by: Chris Michael <cp.michael@samsung.com>
surface
In the event that we have no cursor surface, then we should not be
creating a cursor frame callback.
@fix
Signed-off-by: Chris Michael <cp.michael@samsung.com>
During the pointer frame callback, if we had a 'callback' but did not
have an input->cursor.frame_cb then we would have ended up deleting
the callback here anyway. Let's add a comparison of the callback to
the pointer frame callback to ensure we are removing the proper
callback.
@fix
Signed-off-by: Chris Michael <cp.michael@samsung.com>
As we are no longer using X pointer images, we no longer have the need
for an Ecore_Timer to update any animated X images so remove.
Signed-off-by: Chris Michael <cp.michael@samsung.com>
Remove the const char *cursor field from the window structure as this
is useless. It was never used for any real functional purpose.
@fix
Signed-off-by: Chris Michael <cp.michael@samsung.com>
This commit removes usage of libwayland-cursor inside Ecore_Wl2
library. This is done so that EFL Wayland applications can use EFL
mouse pointers and not look ugly :)
@feature
Signed-off-by: Chris Michael <cp.michael@samsung.com>
When setting a cursor by name, the _ecore_wl2_input_cursor_set
function already makes a call to stop updating the cursor, so no need
to run that twice.
@fix
Signed-off-by: Chris Michael <cp.michael@samsung.com>
This commit essentially removes the ability to use wl_cursor for EFL
Wayland Client Applications. This is a request from "some old man" ;)
for efl wayland applications to use EFL pointers, not X/FDO pointers.
@feature
Signed-off-by: Chris Michael <cp.michael@samsung.com>
if we dont get the userdata of a offer something in the protocol went
very very bad, we should not emit there a error, just return.
Also if we are getting a null offer we should dereference the nulled out
offer object.
This fixes CID 1363214
if a dnd operation enters a surface the window_id is clear, so a offer
is always specific to a window. If we have a source we try to fetch the
id from the focus/prevfocus or keyboardfocus.
This fixes dropping into a efl app which never got focus before.
This commits adds api to deal with wayland offers.
It also ports elm_cnp to use the new api.
The selection_get and dnd_drag_get calls are replaced by simply receive
data from the offer.
The Offer object is now also emitted in every Enter,Motion,Drop and
Leave event, so a potential user can prefetch data and display it.
To finish a dnd operation positiv, the user has to call the finish call
before the offer is destroyed
the drag.source is only available if the drag is happing inside the same
client.
So for the case there are two efl apps (A,B) , where A started the dnd and
the B is currently entered by the dnd, then A has the data source, and B
has the offer, if B sets a action on the offer A tried to set it on a
field which does not exist there, this fixes that. It saves the action
to a undepended field.
When trying to create a window, the WL EGL engine creates
an ecore_evas and connects to the wayland display. But if
EGL is not supported (in weston with nvidia for instance),
the egl initialization fails and the window must be detroyed
in order to fallback to wayland_shm.
This led to a double disconnect from the wayland display
as both the ecore_evas del and the error handling code
were trying to disconnect.
Also, use ref == 0 in two places rather than ref <= 0, as
it can prevent double frees in bad situations (ref < 0).
And reset a global variable to NULL on shutdown.
Since session recovery can cause apps to constantly try and reconnect
to the display server, we probably should not be filling logs here. On
the other hand, any failures on first connect are now not going to
display any error messages.
Signed-off-by: Chris Michael <cp.michael@samsung.com>
This is annoying to see key events flooding a terminal ... so comment
out this debug statement. If a developer really needs this, then
enable it locally.
Signed-off-by: Chris Michael <cp.michael@samsung.com>
This commit introduces a new state per input, this state is just for the
keymap and no modifieres, the state is used to get the keysym from a
keycode. This is done to stay compatible with x since keyname in efl is
the characters which are describing the key which is pressed, without
the transformation of shift etc.
This also escapes keycodes from beeing a utf8 character, and passes out
a keyname instead of the utf8 symbol.
fix T3976
fix T4184
Gcc reports that this 'if' statement is misleading due to indentation.
We should only be sending the 'finish' call if the dnd version
supports it, however we should always be sending 'destroy'
@fix
Signed-off-by: Chris Michael <cp.michael@samsung.com>
If we end up failing to get the fd from ecore_main_fd_handler_fd_get,
then we should just bail out of this function and try again later.
Fixes Coverity CID1357213
@fix
Signed-off-by: Chris Michael <cpmichael@osg.samsung.com>
Coverity reports that len is used un-init here, so let's give it a
value at declaration time
Fixes Coverity CID1357214
@fix
Signed-off-by: Chris Michael <cpmichael@osg.samsung.com>
Coverity reports that we could not reach the eina_hash_free here on
erorr condition. This was due to an erroneous return NULL above the if
(hash_create) check.
Fixes Coverity CID1357171
@fix
Signed-off-by: Chris Michael <cpmichael@osg.samsung.com>
We should be checking the return value of ecore_main_fd_handler_fd_get
calls as they can return a negative number...which cannot be passed to
the close() or read() functions.
Fixes Coverity CID1357152 and CID1357153
@fix
Signed-off-by: Chris Michael <cpmichael@osg.samsung.com>
This patch fixes an issue where ecore_main_fd_handler_fd_get could be
returning a negative number and passing that to close() which cannot
accept negative numbers.
Fixes Coverity CID1357152
@fix
Signed-off-by: Chris Michael <cpmichael@osg.samsung.com>
'window' here could potentially be null so we should be checking that
it is valid before trying to assign event window
Fixes Coverity CID1357148
@fix
Signed-off-by: Chris Michael <cpmichael@osg.samsung.com>
If you touch downs and ups about all of fingers,
that is sufficient condition to call ecore_wl_input_ungrab().
And then one mouse up event is generated from that function.
So if you set a callback about ECORE_EVENT_MOUSE_BUTTON_UP,
you can watch two mouse up events are occurred.
This is a port of the patch for Ecore_Wayland library (deprecated) to
the newer Ecore_Wl2 library.
ref D4112
@fix
Signed-off-by: Chris Michael <cpmichael@osg.samsung.com>
Summary:
If dnd in the same window is activated, the focus goes away from the
ecore_wl2 window to the dnd window, after that focus.pointer is NULL.
After focus.pointer is NULL ev->win of all the events will be 0 which
breaks dnd-motions, drop and end.
With prev_pointer beeing the last focused window, we can simply set this
window as event window. After that dnd with jesus works perfectly.
@fix
Reviewers: devilhorns
Subscribers: cedric, jpeg
Differential Revision: https://phab.enlightenment.org/D4093
before key and keyname could have been filled invalid, for example the
character "ö" from the german layout produced "Odiaeresis" instead of ö.
This commit also documents and refactors _ecore_wl2_input_key_translate.
I added the documentation for later use, it was hard to find out why
this was done.
The function also drops the input now if invalid control codes would
have been generated, this is equivalent to the behaviour in x. So
applications cannot get confused by codes which dont exist.
It also doesnt check if there is actual output by checking the highest
bytes anymore, it just tries to create a utf8 character. This fixes
arabic greek and korean keyboard input on wl.
If this breaks the input for some user, feel free to contact me.
This fixes T3073.
Recent timer changes broke keyboard repeat under wayland - while that
will probably be fixed shortly, this should be more robust and
more accurate anyway.
This patch adds support for wl_seat_listener version 4 (which is used
in wayland 1.11). We do not actually make use of the seat callback for
name yet, but when the rest of multi-seat issues are sorted, we may
need this.
@fix
Signed-off-by: Chris Michael <cpmichael@osg.samsung.com>
NB: No real major changes, just removal of an extra 'if' block. If
getenv of wayland display fails, we hard-code the default wayland
display name so subsequent check for 'if (n)' is erroneous
Signed-off-by: Chris Michael <cpmichael@osg.samsung.com>
Summary: if there is no env var AND no name, connection to wayland-0
Reviewers: raster, jpeg, devilhorns
Subscribers: cedric
Differential Revision: https://phab.enlightenment.org/D3945
As not everyone needs/wants extra eye-candy, add a check for
EFL_WAYLAND_DISABLE_WWW environment variable to be able to disable
wobbly windows support
@fix
Signed-off-by: Chris Michael <cpmichael@osg.samsung.com>
As we already have MIN & MAX defined in Eina, we no longer need to
include sys/param.h header to get those defines
ref d00643fcc4
@fix
Signed-off-by: Chris Michael <cpmichael@osg.samsung.com>
add support for reconnecting wayland applications if the compositor dies
disconnect -> destroy gl ctx + image textures -> block rendering ->
reconnect -> create gl ctx -> create image textures -> unblock rendering ->
sprinkle special seasoning on top -> just like ma used to make
#SamsungFeatures
@feature
If the compositor crashes at just the right time this dispatch can fail
and result in a stuck app spinning in a tight loop. Fix it so we do a
proper shutdown in this case.
Signed-off-by: Chris Michael <cpmichael@osg.samsung.com>
If we do drag & drop and then do copy & paste, both _wl_selection_receive
and _wl_dnd_receive are called for one action (dnd or cnp). It is reduntdant.
We only need one data received callback to handle two cases dnd and cnp.
We have copy & paste and drag & drop selection types, but we cannot
distinguish between these two types when requesters receive data
from data ready event.
This patch adds a new enum to help selection requesters distinguish
between two selection types and have suitable actions for each type.
this is copied from weston, except all the code which is supposed to be of
struct type "offer" has been renamed "source" and then reused in the same way
that weston uses "offer" in order to maximize reader confusion
deleting the source here is invalid since the selection only changes in the
corresponding callback from the wayland interface
This patch ports the existing session recovery protocol from
Ecore_Wayland so that it is used inside Ecore_Wl2.
@feature
Signed-off-by: Chris Michael <cpmichael@osg.samsung.com>
this code is mostly copied from weston:
78d4bf9a3ec990dceee23fd53962a69891352a0e
9c93179023fe894e417ccd20533d72d672d976fc
credit to Carlos Garnacho <carlosg@gnome.org> as original author
fix T3455
@feature
these files were created containing code which was very obviously copied from
weston. when copying code, copyright headers must also be copied in order to
comply with licenses.
this is an event representing the "new" state of the surface after a
configure event. it must contain the exact states which could potentially
have changed in the configure in order to ensure synchronization between
csd states and window size.
ecore events for xdg-shell configures must be sent only upon receiving a
configure event since states are set by the compositor and not by the client
@fix
#hoorayforbeta
This removes a fixme where we were not using wl_(pointer, keyboard,
touch)_release functions as they rely on newer versions of the wayland
protocol. As we now rely on 1.10 of wayland, these can be enabled now.
@fix
Signed-off-by: Chris Michael <cpmichael@osg.samsung.com>
EINVAL is bad, we can't go on. If we treat it like it's not a fatal
error we'll end up spinning on the fd and constantly retrying sends
on the dead wayland connection.
@fix
if the ungrab is triggered from a mouse up event, this ensures that a
mouse up will be sent from the ungrab function. continuing to send a
mouse up event in addition to this will guarantee multiple mouse events
are emitted
@fix
Summary:
printf %m stringifies and prints errno. I've tried to remove its use
anywhere that the immediately preceding function might not set errno
or is a complicated function for which knowing errno doesn't really
give any useful information.
I've left a few of the drmMode calls because they're just wrappers
around ioctl, which legitimately sets errno.
@fix
Reviewers: zmike, devilhorns
Reviewed By: zmike, devilhorns
Subscribers: cedric, jpeg
Differential Revision: https://phab.enlightenment.org/D3572
if many events are coming in, a release event can be skipped. if this happens
the timer continues with the new keycode. so if a new key pressed event
enter checks for the old timer and delete the timer if there is one.
If the timer kicks in and emits additional key down events dont call the
callback which gets called by wl, and emit the signal directly.
This input_grab function should have been exposed via EAPI for use in
enlightenment, but was missed before the push
Signed-off-by: Chris Michael <cpmichael@osg.samsung.com>
When trying to create nested compositors, we were failing here due to
trying to read the WAYLAND_DISPLAY env variable and find an existing
server display to match. In order for nested compositors to function,
we cannot reuse that environment variable for server display hash.
@fix
Signed-off-by: Chris Michael <cpmichael@osg.samsung.com>
Summary:
wl_surface.damage_buffer() takes surface damage in buffer co-ordinates.
Right now since we don't use wayland's scaling, transforms, or viewports
it's exactly the same as wl_surface.damage(). In the future if we start
using those features it's much easier to do so with damage_buffer().
Reviewers: zmike, devilhorns
Subscribers: cedric, jpeg
Differential Revision: https://phab.enlightenment.org/D3457
This removes the usage of ecore_main_loop_iterate inside of the
display_connect function. It creates a new event type for when display
sync is done, this was we can defer surface creation and EE showing
until the compositor has had a chance to synchronize globals. We need
this for Enlightenment so that it does not try to create error dialogs
too early and thus crash due to not having sync'd globals yet
@fix
Signed-off-by: Chris Michael <cp.michael@samsung.com>
* sanitize boolean params
* enforce window state flag setting
* use window flag instead of window type for state
@fix
ref T2919
Signed-off-by: Chris Michael <cp.michael@samsung.com>
display hash
As the cleanup function is a generic helper to cleanup things in the
Ecore_Wl2_Display structure, we cannot always just explicitly the
display from the client_displays hash.
The removal from the appropriate hashes should be done by the calling
function(s) (ecore_wl2_display_disconnect for clients, and
ecore_wl2_display_destroy for servers)
@fix
Signed-off-by: Chris Michael <cp.michael@samsung.com>
Due to reference caching, we cannot free the display structure here
yet. During calls to ecore_wl2_display_destroy (or others), if the
number of references reaches zero, then we end up calling
wl_display_destroy (or equivelant). If we free our display structure
during cleanup function, then calls to wl_display_destroy will cause a
segfault as our display->wayland_display has already been freed from
the structure
@fix
Signed-off-by: Chris Michael <cp.michael@samsung.com>
We need a way to store the configure serial, and make the
xdg_surface_ack_configure callback be callable by Ecore_Evas at the
appropriate time. This fixes an issue where previously we were
(potentially) sending a configure acknowledgment while not applying
the configure due to deferred rendering.
@fix
Signed-off-by: Chris Michael <cpmichael@osg.samsung.com>
Seems EINA_LOG_DOM has a problem printing out wayland protocol logs,
so allow wayland to handle that itself.
@fix
Signed-off-by: Chris Michael <cp.michael@samsung.com>
Rather than rely on window->type for maximized & fullscreen, use the
cooresponding window flag
@fix
Signed-off-by: Chris Michael <cp.michael@samsung.com>
Summary: When we finish moving a window, previously the mouse cursor
would never get unset from the hand cursor. This is due to the way
that grabs work in wayland, and not ever getting an event notification
for the move being completed. This patch works around that issue
@fix
Signed-off-by: Chris Michael <cp.michael@samsung.com>
Previously, when we maximized or fullscreen a window, we were sending
the improper geometry to the window_configure callback
@fix
Signed-off-by: Chris Michael <cp.michael@samsung.com>
If we already have seen this global, and it is in the globals hash,
then don't re-add it and just jump straight to sending the event
Signed-off-by: Chris Michael <cp.michael@samsung.com>
Summary: When we use ecore_wl2 for creating compositors (E), we need
to flush clients before we dispatch events on the wl loop, so add a
prepare_callback for the fd handlers and flush clients there.
@fix
Signed-off-by: Chris Michael <cp.michael@samsung.com>
wl_get_registry() returns a new object that we must destroy, so
we should cache one at connect and never call that again.
Signed-off-by: Derek Foreman <derekf@osg.samsung.com>
Summary: This fixes an issue where scrolling mouse wheel would not
actually perform any scroll until another event was received.
NB: Unsure if we need this for "server" connections yet
Signed-off-by: Chris Michael <cp.michael@samsung.com>