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).
Create or delete evas_devices with class EVAS_DEVICE_CLASS_SEAT
for seats on each ecore_evas created so far.
Initially it's named considering its Wayland id.
Summary:
This change removes the necessity to link EFL against the libvncserver
Please ignore the first three commits, they're being reviewed here:
https://phab.enlightenment.org/D4323
Reviewers: bdilly, cedric
Reviewed By: cedric
Subscribers: cedric, jpeg
Differential Revision: https://phab.enlightenment.org/D4338
Signed-off-by: Cedric Bail <cedric@osg.samsung.com>
One deadlock and one segfault.
Patch 1:
Software X11 Evas Engine: Fix deadlock
Summary:
The patch bc6e8d2692 introduced a callback responsible to notify the pixels
that were sent to the X server. Since all EFL rendering is done by another
thread, the callback should be called from the main thread context.
To achieve this behaviour evas_software_x11_region_push_hook_call()
was using ecore_thread_main_loop_begin(), which may cause deadlocks, since
evas mainloop waits for the render thread and the render thread waits
the mainloop.
In order to fix this problem, the function
ecore_main_loop_thread_safe_call_async() will be used to
schedule the callback to run in the main loop context.
Since a callback is schedule to run in async manner, the pixels that
were sent to the X server must not be deleted until the user is informed.
In order to avoid more mallocs(), this patch adds the support for refcounts to the
X_Output_Buffer and Xcb_Output_Buffer.
Patch 2:
Ecore_Evas VNC: Use the image size to create the buffer.
In same cases they may differ and may lead to a segfault, since
memcpy() causes a buffer overrun.
Reviewers: bdilly, raster
Reviewed By: raster
Subscribers: cedric, jpeg
Differential Revision: https://phab.enlightenment.org/D4323
If we set a frame callback on a window with no shell surface (ie: and unmapped
window), the frame callback will never fire. This was preventing some
applications like rage from ever posting a frame.
this fixes intitial iconic state for x11 as demonstrated by
terminology -I
but enlightenment is broken though... xterm -iconic also shows the
same break with a black window.
@fix
so we handled override cases and set withdrawn to false on show, but
when normally managed it might be nicer to wait for a state change via
the wm state property to know we are "normal"
this should fix T4699
@fix
This reverts commit 2c736adc87.
well that was totally unexpected. - efl app windows dont show at all..
wtf? this should not have affected that at all..
so we handled override cases and set withdrawn to false on show, but
when normally managed it might be nicer to wait for a state change via
the wm state property to know we are "normal"
this should fix T4699
Summary:
It should be evas_device_add_full() in order to follow the EFL
name pattern.
Reviewers: DaveMDS, bdilly
Reviewed By: DaveMDS, bdilly
Subscribers: cedric, jpeg
Differential Revision: https://phab.enlightenment.org/D4325
Summary: Need to NULL check before using surface like other cases.
Test Plan: N/A
Reviewers: jpeg, raster, ManMower, devilhorns
Reviewed By: devilhorns
Subscribers: cedric
Differential Revision: https://phab.enlightenment.org/D4301
This patch adds the support for Ecore events from a remove
VNC client. Every time it happens a VNC mouse move/click/wheel or a
VNC keyboard event an Ecore event event will be created and dispatched.
Add a function for ecore_evas_drm to call after a page flip happens so
ecore_drm2 can track busy status for fbs itself (including for the fb
that's currently being flipped to scanout)
Also, call the completion function from ecore_evas_drm
To allow using the pageflip completion event to drive timing in the DRM
engine we need to know as soon as possible that a render has been after
a render has been considered if it will cause a page flip or not.
The fn_evas_changed callback sends this information.
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.
Summary:
Sometimes, In ipc_server_data, extn->ipc.server's data is different with e->server's data.
The case is as follows.
Process'A' has a server.
Process'B' has 'A's client(ee address : 0xB0).
Process'B's client die, and 'B's server created. and server's ee address is same with destroyed client's ee(0xB0).
At the same time, 'A's server send the message to 'B's client.
but 'B's client is died! so _ipc_server_data would manipulate 'B's server data.
Test Plan: Tizen Mobile Text.
Reviewers: raster, spacegrapher, jpeg, wonsik, dkdk
Subscribers: cedric
Differential Revision: https://phab.enlightenment.org/D4158
Coverity detected that the same code was being passed to resize
regardless of canvas orientation. This patch fixes the issue by
passing the proper values to window_resize.
Fixes Coverity CID1357150
@fix
Signed-off-by: Chris Michael <cpmichael@osg.samsung.com>
This patch fixes 2 Coverity issues where engine_info_set was being
called, but the return was never being checked.
Fixes Coverity CID1357141 and CID1357142
@fix
Signed-off-by: Chris Michael <cpmichael@osg.samsung.com>
As it seems the jpeg breakage is over wrt direct input callbacks, we
can re-enable these for the drm engines
@fix
Signed-off-by: Chris Michael <cpmichael@osg.samsung.com>
Apparently I broke some inputs in E (efm) like mouse wheel.
Somehow the list of objects where the pointer is in was NULL.
This was because the mouse_in/out events were not matched to
the proper window ID.
Fixes T3760
For ecore_evas drm engine(s), disable setting of
ecore_event_window_direct_callback as this Completely Breaks all input
when running Enlightenment Wayland.
NB: This can likely be re-enabled at some point, when the jpeg
breakage is over ;)
@fix
Signed-off-by: Chris Michael <cpmichael@osg.samsung.com>
This whole input system is a massive mess. It looks like spaghetti.
Long live the giant flying monster.
This commit changes how some events are propagated in X.
Before:
ecore_x -> evas_event -> evas
After:
ecore_x -> ecore_input_evas -> ecore_evas -> evas_event -> evas
There are still inconsistencies between events and between X and WL,
but ecore_evas should be used for all events since it rotates the
inputs.
This patch fixes an issue where starting Enlightenment would not
center the mouse pointer. Basically the issue is that we cannot warp
the mouse pointer until After the ee->prop.window has been set else
E will not process the mouse_move event
@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
This include is leftover from the porting to Ecore_Wl2. Remove
unused include for old Ecore_Wayland library
@fix
Signed-off-by: Chris Michael <cpmichael@osg.samsung.com>
the only way to accurately calculate the "evas" size in the engine from
window geometry is to have the size of the frame available to subtract from
window geometry
window geometry is NOT framespace--framespace is the entire csd region, possibly
containing a shadow, and window geometry is explicitly the region occupied by the
window, ie. not the shadowed part.
not my ideal solution to the synchronization issue here, but I guess this is a
benefit of the unified tree
fix T3396
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 accumulates all data relevant to client-side www into
the Evas_Engine_Info_Wayland_Egl struct so the client can react to it.
Signed-off-by: Derek Foreman <derekf@osg.samsung.com>
Focus handlers are set incorrectly.
It causes windows process focus when they are acttually unfocused.
This patch corrects it.
Signed-off-by: Thiep Ha <thiepha@gmail.com>
Create specific structures for each event:
- Ecore_Cocoa_Event_Window_Focused
- Ecore_Cocoa_Event_Window_Unfocused
- Ecore_Cocoa_Event_Window_Destroy
They are currently hold the same data, but this will allow not to break
the event protocol when future extensions will be needed.
Signed-off-by: Cedric BAIL <cedric@osg.samsung.com>
Lost and got focused have been renamed FOCUSED and UNFOCUSED to mirror
the focus API in Elementary.
Signed-off-by: Cedric BAIL <cedric@osg.samsung.com>
we counted more requests outstanding than actually existed for x11 as
we sometimes sized to the SAME size or position. this keeps that
number more correct only incremeting outstanding count if we change.
@fix
This code is currently only using the older fallback code and not any
new event source, so all animator on all window are still triggered
whatever the case are.
See T2835 (my crash was different from the one reported).
The buffer may be initialized after the first render_pre, due to
whatever timing issue. Check in elm_test "Window Socket" and then
open several "Window Plug".
@fix
As we no longer cleanup outputs inside the ecore_drm_device_free
function (see previous commit), we should be cleaning up outputs here
as they are created during the _ecore_evas_drm_init function.
@fix
Signed-off-by: Chris Michael <cpmichael@osg.samsung.com>
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
This renames the ecore_evas_wayland_window_get2 function to be
ecore_evas_wayland2_window_get before the 1.17 roll out.
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 fixes fat-finger copy/paste errors when copying functions from
ecore_evas_wayland_shm to ecore_evas_wayland_egl
@fix
Signed-off-by: Chris Michael <cp.michael@samsung.com>
This code adds support for deferring of surface creation and showing
inside Ecore_Evas Wayland. This is needed for Enlightenment so that it
does not try to create or show surfaces until the compositor has had a
chance to sync globals. This fixes an issue where early surface
creation would cause a crash in the compositor due to globals not
being syncd.
@fix
Signed-off-by: Chris Michael <cp.michael@samsung.com>
Previously, when we started to resize an efl app, the size would
"jump" due to framespace being adjusted. This patch fixes that issue
and resize now works as expected.
@fix
Signed-off-by: Chris Michael <cpmichael@osg.samsung.com>
If we acknowledge a configure from xdg during post render, we end up
breaking maximize of EFL clients inside Weston (and perhaps other
compositors). In order to fix that, we will now send the configure ack
post render but pre flush.
@fix
Signed-off-by: Chris Michael <cpmichael@osg.samsung.com>
As we do not have the proper values for window geometry to be setting
it here, remove calls to set window geometry. We can more accurately
determine the window geometry from inside Elementary as it handles the
theme for the window borders.
@fix
ref T2919
Signed-off-by: Chris Michael <cp.michael@samsung.com>
This fixes a potential issue where we may have been sending the
configure acknowledgement before applying the actual new configuration
to the surface. Sending the ack_configure during post-render ensures
that we have already rendered according to the new configure
(addresses deferred rendering issue).
@fix
Signed-off-by: Chris Michael <cpmichael@osg.samsung.com>
If we fail to connect to an existing wayland display, then we should
properly cleanup (call ecore_wl2_shutdown) before exiting
@fix
Signed-off-by: Chris Michael <cpmichael@osg.samsung.com>
To get the proper maximized and fullscreen states, we should be using
the ecore_wl2_window functions, not the ecore_wl_window functions
@fix
Signed-off-by: Chris Michael <cpmichael@osg.samsung.com>
if a state change occurs on the ee, related callbacks must be run prior to
performing any resizes in order to ensure that the correct csd sizes are
calculated
@fix
ref T2841
Summary: When an initial client application was shown and we tried to
resize it, the resize would jump by the amount of framespace. This was
because the xdg_surface@configure event would be sending window
geometry as the width/height params in the event. We need to account
for that in the callback of window configure and adjust size
accordingly.
@fix
Signed-off-by: Chris Michael <cp.michael@samsung.com>
- Ecore_Cocoa_Cursor enum which references system cursors;
- API to show/hide cursor: ecore_cocoa_window_cursor_show();
- API to set system cursor: ecore_cocoa_window_cursor_set();
- Ecore_Evas interface to get Ecore_Cocoa_Window from Ecore_Evas.
@feature
Signed-off-by: Cedric BAIL <cedric@osg.samsung.com>
This fixes an issue where maximizing a window would set improper xdg
surface window geometry. We receive window configure sizes based on
xdg surface window geometry, so we need to subtract framespace there
or else window size grows when maximizing/unmaximizing multiple times.
This also adjusts the call to xdg_surface_set_window_geometry to
account for framespace (Fixes T2842).
@fix
Signed-off-by: Chris Michael <cp.michael@samsung.com>
by using the geometry from after the request size has been updated,
scenarios such as the following can be avoided:
[4208305.332] xdg_surface@46.set_window_geometry(0, 0, 1778, 1)
[4208305.370] xdg_surface@46.set_window_geometry(0, 0, 1778, 250)
@fix
if a state change occurs on the ee, related callbacks must be run prior to
performing any resizes in order to ensure that the correct csd sizes are
calculated
@fix
ref T2841
This fixes an issue where maximizing a window would set improper xdg
surface window geometry. We receive window configure sizes based on
xdg surface window geometry, so we need to subtract framespace there
or else window size grows when maximizing/unmaximizing multiple times.
This also adjusts the call to xdg_surface_set_window_geometry to
account for framespace (Fixes T2842).
@fix
Signed-off-by: Chris Michael <cp.michael@samsung.com>
by using the geometry from after the request size has been updated,
scenarios such as the following can be avoided:
[4208305.332] xdg_surface@46.set_window_geometry(0, 0, 1778, 1)
[4208305.370] xdg_surface@46.set_window_geometry(0, 0, 1778, 250)
@fix
if a state change occurs on the ee, related callbacks must be run prior to
performing any resizes in order to ensure that the correct csd sizes are
calculated
@fix
ref T2841
by using the geometry from after the request size has been updated,
scenarios such as the following can be avoided:
[4208305.332] xdg_surface@46.set_window_geometry(0, 0, 1778, 1)
[4208305.370] xdg_surface@46.set_window_geometry(0, 0, 1778, 250)
@fix
Summary: When an initial client application was shown and we tried to
resize it, the resize would jump by the amount of framespace. This was
because the xdg_surface@configure event would be sending window
geometry as the width/height params in the event. We need to account
for that in the callback of window configure and adjust size
accordingly.
@fix
Signed-off-by: Chris Michael <cp.michael@samsung.com>