this was incorrectly referenced from weston's x11 compositor, which directly
uses xcb events and sends them as wl_pointer events. efl translates all input
events to use the same button scheme numbering, coincidentally enabling the use
of this code for all backends
this works around an apparently atexit() handler in nvidia drivers
that if you fork() a parent and do NOT exec() then the child process
will end up messing with the parent processes access to the nvidia
devices/display/whatever i believe via an atexit() handler because
moving from exit() to _exit() solves the issue. fixes T6197
@fix
If we pass in screen geometry here when trying to set an output mode,
we can encounter "out of memory" errors from libdrm with outputs that
have a high resolution. As it turns out, we should be passing 0, 0 for
the x/y values when trying to set an output mode.
@fix
Signed-off-by: Chris Michael <cp.michael@samsung.com>
Currently e_comp_util_has_x() will still return true after the X
machinery is shut down - this can lead to crashes on logout under
wayland when xwayland apps are running. Clearing the root window
id resolves this.
@ref T5593
XWayland likes to set a buffer on the cursor surface then delete it before
we release it. I'm pretty sure when a client does that we're within spec
to just kill it, but users will likely find this response ungratifying.
So, instead, just gracefully fail to render the undefined surface.
@ref T5593
cancel may destroy the selection source, resulting in invalid access
==10735== Invalid write of size 8
==10735== at 0x87C8095: wl_list_remove (wayland-util.c:56)
==10735== by 0x2EE745: _e_comp_wl_data_device_selection_set (e_comp_wl_data.c:506)
==10735== by 0x2EF241: _e_comp_wl_data_device_cb_selection_set (e_comp_wl_data.c:714)
==10735== by 0x1021F037: ffi_call_unix64 (in /usr/lib/x86_64-linux-gnu/libffi.so.6.0.4)
==10735== by 0x1021EA99: ffi_call (in /usr/lib/x86_64-linux-gnu/libffi.so.6.0.4)
==10735== by 0x87C70C0: wl_closure_invoke (connection.c:935)
==10735== by 0x87C13C8: wl_client_connection_data (wayland-server.c:406)
==10735== by 0x87C4483: wl_event_source_fd_dispatch (event-loop.c:90)
==10735== by 0x87C4DE4: wl_event_loop_dispatch (event-loop.c:423)
==10735== by 0x85AE346: _cb_create_data (ecore_wl2_display.c:399)
==10735== by 0x946857A: _ecore_call_fd_cb (ecore_private.h:347)
==10735== by 0x946AE51: _ecore_main_fd_handlers_call (ecore_main.c:2015)
==10735== by 0x946B823: _ecore_main_loop_iterate_internal (ecore_main.c:2403)
==10735== by 0x946935E: ecore_main_loop_begin (ecore_main.c:1308)
==10735== by 0x151139: main (e_main.c:1088)
==10735== Address 0x222ca980 is 16 bytes inside a block of size 136 free'd
==10735== at 0x4C2CE1B: free (vg_replace_malloc.c:530)
==10735== by 0x2F076F: e_comp_wl_clipboard_source_unref (e_comp_wl_data.c:1291)
==10735== by 0x214C6A09: _xwayland_send_cancelled (dnd.c:149)
==10735== by 0x2EE71D: _e_comp_wl_data_device_selection_set (e_comp_wl_data.c:504)
==10735== by 0x2EF241: _e_comp_wl_data_device_cb_selection_set (e_comp_wl_data.c:714)
==10735== by 0x1021F037: ffi_call_unix64 (in /usr/lib/x86_64-linux-gnu/libffi.so.6.0.4)
==10735== by 0x1021EA99: ffi_call (in /usr/lib/x86_64-linux-gnu/libffi.so.6.0.4)
==10735== by 0x87C70C0: wl_closure_invoke (connection.c:935)
==10735== by 0x87C13C8: wl_client_connection_data (wayland-server.c:406)
==10735== by 0x87C4483: wl_event_source_fd_dispatch (event-loop.c:90)
==10735== by 0x87C4DE4: wl_event_loop_dispatch (event-loop.c:423)
==10735== by 0x85AE346: _cb_create_data (ecore_wl2_display.c:399)
==10735== by 0x946857A: _ecore_call_fd_cb (ecore_private.h:347)
==10735== by 0x946AE51: _ecore_main_fd_handlers_call (ecore_main.c:2015)
==10735== by 0x946B823: _ecore_main_loop_iterate_internal (ecore_main.c:2403)
==10735== by 0x946935E: ecore_main_loop_begin (ecore_main.c:1308)
==10735== by 0x151139: main (e_main.c:1088)
==10735== Block was alloc'd at
==10735== at 0x4C2DC05: calloc (vg_replace_malloc.c:711)
==10735== by 0x2F0520: e_comp_wl_clipboard_source_create (e_comp_wl_data.c:1231)
==10735== by 0x214C71C9: _xwl_selection_notify (dnd.c:286)
==10735== by 0x946130C: _ecore_call_handler_cb (ecore_private.h:331)
==10735== by 0x94626BC: _ecore_event_call (ecore_events.c:629)
==10735== by 0x946B83E: _ecore_main_loop_iterate_internal (ecore_main.c:2408)
==10735== by 0x946935E: ecore_main_loop_begin (ecore_main.c:1308)
==10735== by 0x151139: main (e_main.c:1088)