We stop allowing client updates when the screensaver is on to save power,
however this happens at the start of the fade-out. On wayland this stops
any visible client change.
If we wait until after the canvas is set to manual render instead then
we get similar benefit but don't lose display updates while they're
still visible.
Fix T5714
This reverts commit ee71ea63ec.
Revert "reduce include deps for enlightenment_thumb binary"
This reverts commit cce14fa839.
both of these i reverted.... because they both CHANGE the define of
E_API like:
and this is wrong. e.h defines this so that these symbols are exposed.
E_API, EAPI and friends are desighned to explicitly expose symbols.
because if you try and make STRICTER binaries that only have symbols
for what was EXPLICTLY exposed like the CFLAG -fvisibility=hidden ...
then any api not explicitly marked with the attribute of visible which
that E_API macro is intended for... will be invisible. it will not
exist. this means a whole MOUNTAIN of modules stop loading as they
can't find these symbols. E_API isn't just source sugar tagging. it's
actually functional. i'd suggest using -fvisibility=hidden in your
CFLAGS by default. it's also not always portable between all compilers
so beware... (it was introduced years ago in gcc... i think clang
offers it. i don't know about icc or any others).
so since E_API is defined in e.h ... we may as well keep the e.h
include there instead of hand re-writing a list of includes. does
reducing the include deps really have an impact worth talking about on
compile time? the commit logs didn't say. but it does break module
loading and does it by adding lots of lines of code that are far mroe
easily broken now (this is an examplt). :)
When creating the data manager source, passing an id of 1 overwrites
the wl_display's id in the map, causing crashes the next time the
client tries to interact with that object. The client in this case
is Xwayland. Bad things happen.
Instead pass 0 which just chooses an available map slot.
Fix T5738
This cleans up how sysinfo manages object vs thread lifetimes. If thread is still alive dependent on aspects that need to be freed in the gadget removal process, it defers that cleanup from the remove callback to the thread end callback. As for the combination sysinfo gadget, each gadget inside of sysinfo will set a done flag alerting that the cleanup of the combination gadget can happen once all threads are done.
This fixes T5694
in the case where the desklock timer was longer than the blank timer,
this would permanently break input
input is still broken for the duration of the screen blank animation and
any time the screen is blanked
we have some visual glitches i'm on a mission to fix... and the above
is one of those. timeout for lock should begin after screen has gone
black first.
See also ac92ff5256.
- eina_strbuf_string_get() returns the internally stored string as
a const char *, and does not free the strbuf itself
- eina_strbuf_string_steal() returns the internal string as a
char *, giving ownership to the caller, and frees the strbuf
itself
- eina_stringshare_add() takes a const char * as input and makes a
copy of the string
As a consequence, ss_add(sb_string_steal()) leaks the internal
string from the strbuf, while ss_add(sb_string_get()) leaks the
strbuf structure.
A one liner here would require either an eina_slstr based API or
an API in stringshare to take ownership of a given string. Both
would be useful APIs :)
This reverts commit 7bc179da5a.
this now totally broke the glitch fix and it now animates in reverse
on suspend and does nothng on resume... testing might be a good idea
beforehand...
this requires we have to force dpms on to reduce power. to avoid
glitches with the pointer staying around in x we need to support
suspending it too so it hides cleanly like the screen dims or undims.
also use the new powersave freeze mode to do this.
note that i've tested this on s3 supporting laptops and non-s3 and it
"works for me". it may require more testing and work. there is more to
power saving than just this as well but for now that's out of scope as
you have to mess with linux device autosuspend timeouts and a bunch
more (wowlan ... blahblah).
i need to find the source of the intermittent wakeups too in e. there
is a long lived timeout (8-ish seconds?) but more specifically e keeps
waking up from fd's and then reading /sys stuff about battery - some
event is causing us to do this... maybe to suspend this or make
battery checking very rare when in freeze mode (or screen off) etc.
so this fixes some glitches as well as supports a new way of sleeping
"alive" when hardware literally doesnt support normal s3 sleep... so
kind of a fix with a feature.
so new laptops now seem to no longer support S3 sleep. sleeping is
done basically by going as idle as possible. you can ask the kernel to
freeze execution BUT this seems to use about the same power as staying
alive in my tests. to support this add 2 things:
1. a FREEZE powersave mode which implies we're alive but want to
really stay as idle as absolutely possible.
2. powersave aware sleep functions that replace the usleeps in threads
so they can switch from being super sleepy when in freeze mode to
normal.
Under some circumstances we can defer frame callbacks forever for clients
that are only visible on desk mirrors.
I'm not certain those circumstances should actually occur (Ref T5678) but
at least for now this is a trivial and harmless workaround.
Fix T5654
partially reverts 7e05eff3e3
This was causing problems when destroying some xdg v6 clients.
if weston-simple-shm was killed while not on the current desktop
it would remain on deskmirrors.
convert to/from utf8 plain/markup in e widget entry wrapper.... this
fixes broken results if you enter escapable text like " or < or > or &
... etc.
@fix
it seems like this is a good place to try, and this seems to resolve
some render updating issues on restart, such as with maximized chrome
windows
ref T5599
in the case where an object is being shown before it has been moved or
resized, a move operation will trigger a series of callbacks which force the
compositor to attempt an illegal operation (recursive show before resize)
fix T5521
resizing objects triggers clip resizes and further event feeding which
can propagate mouse events such that clients try to resize themselves
during the update phase, resulting in illegal compositor behavior
this is now handled by the event grabber. many callbacks on this
object are due to clip changes instead of genuine mouse movements,
meaning that processing events can lead to further resizes during a
render cycle
This reverts commit 62feb358e6.
set EINA_LOG_LEVELS=e:0 or comment out code locally if you aren't interested
in helping to de-bug development builds
this is meant to be as convenient for users as disabling "core"
features in efl builds in order to deter them from disregarding bug
reporting
Hardware plane support is inactive unless a scanout handler is set, this
patch adds a scanout handler and uses it when the env var
E_USE_HARDWARE_PLANES is set.
In the future this env var will go away when hardware plane support is
stable enough to enable it everywhere.
Hardware planes are going to make E_Comp_Wl_Buffer lifetimes harder to
manage, so we need to let the E_Comp_Wl_Buffer object outlive the
resource attached to it.
We already track a busy count, so we just have to use it to prevent
deleting a busy buffer.
now i resize some windows and am in a white box of death each time...
this is really unfriendly... so downgrade to an err ad this is a
recoverable error.
==20443== Invalid read of size 8
==20443== at 0x28CED526: _bar_exec_new_show (bar.c:980)
==20443== by 0x819D78D: _eo_evas_object_cb (evas_callbacks.c:184)
==20443== by 0xDFB6FED: _event_callback_call (eo_base_class.c:1496)
==20443== by 0xDFB7373: _efl_object_event_callback_legacy_call (eo_base_class.c:1569)
==20443== by 0xDFB743A: efl_event_callback_legacy_call (eo_base_class.c:1572)
==20443== by 0x81DC562: _efl_canvas_object_efl_object_event_callback_legacy_call (evas_object_main.c:993)
==20443== by 0xDFB743A: efl_event_callback_legacy_call (eo_base_class.c:1572)
==20443== by 0x819E1F8: evas_object_event_callback_call (evas_callbacks.c:404)
==20443== by 0x81E6B23: evas_object_inform_call_show (evas_object_inform.c:13)
==20443== by 0x81DECA2: _show (evas_object_main.c:1689)
==20443== by 0x81DF0E7: _efl_canvas_object_efl_gfx_visible_set (evas_object_main.c:1810)
==20443== by 0xDD670B9: efl_gfx_visible_set (efl_gfx.eo.c:21)
==20443== by 0x81DEA93: evas_object_show (evas_object_main.c:1639)
==20443== by 0x483706: _e_comp_intercept_show_helper (e_comp_object.c:1754)
==20443== by 0x483761: _e_comp_intercept_show (e_comp_object.c:1768)
==20443== by 0x81E7536: evas_object_intercept_call_show (evas_object_intercept.c:71)
==20443== by 0x81E7ED2: _evas_object_intercept_call_internal (evas_object_intercept.c:103)
==20443== by 0x81E88B0: _evas_object_intercept_call_evas (evas_object_intercept.c:236)
==20443== by 0x81DF0CA: _efl_canvas_object_efl_gfx_visible_set (evas_object_main.c:1807)
==20443== by 0xDD670B9: efl_gfx_visible_set (efl_gfx.eo.c:21)
==20443== by 0x81DEA93: evas_object_show (evas_object_main.c:1639)
==20443== by 0x4A6793: _e_desk_show_begin (e_desk.c:821)
==20443== by 0x4A4E39: e_desk_show (e_desk.c:312)
==20443== by 0x537C2E: _e_int_menus_clients_item_cb (e_int_menus.c:1624)
==20443== by 0x548D3F: _e_menu_active_call (e_menu.c:2056)
==20443== by 0x54ABFB: _e_menu_cb_mouse_up (e_menu.c:2789)
==20443== by 0xC636B66: _ecore_call_handler_cb (ecore_private.h:325)
==20443== by 0xC637B3F: _ecore_event_call (ecore_events.c:518)
==20443== by 0xC641158: _ecore_main_loop_iterate_internal (ecore_main.c:2397)
==20443== by 0xC63EC7E: ecore_main_loop_begin (ecore_main.c:1299)
==20443== by 0x43DE81: main (e_main.c:1081)
==20443== Address 0x20 is not stack'd, malloc'd or (recently) free'd
I missed this in my last commit - we probably shouldn't be calling
e_comp_render_queue or e_comp_shape_queue_block() after hiding the
ecore_evas anyway - and by removing the e_comp_shape_queue_block()
in the activation callback I made things asymmetrical. Ungood.
The code intended to force evas to redraw when we switch back from
another virtual console is failing to do so. Remove it and replace
it with simpler code that successfully forces a redraw.
in the case where this path was reached during x11 nocomp, the client's pixmap
refresh would be deferred until the end of nocomp, even when the refresh would
otherwise end the nocomp. instead, force the refresh immediately.
fix T4887