Due to a misplaced semicolon, EINA_LIST_FREE was doing nothing and only
the last part was freed if there was one, and probably a crash if there
wasn't.
This shows again that having statements without {} is dangerous. We need
to force {} and add a lint rule, or at the very least, add a rule to put
the ; in a new line (like clang warns about by default anyway).
@fix
Strangely only the other states were checked for errors. Errors
include:
- no name for state, or "description with missing state"
- invalid clip_to
Also improve the error message a bit
This makes SNAPSHOT a part type on it own, combining the
common and filter subtypes.
This means it is now possible to set an evas filter on
a SNAPSHOT object, just like for TEXT, IMAGE and PROXY.
@feature
Not 100% sure of this fix but it "works". This is just compile-time
safety checking code after all, so it won't impact any existing
application.
This fixes commit d4444bf7a0. Tested with empc.
Thanks @zmike for the report and test case.
As described by Carsten in his email to edev ML titled:
"[E-devel] eo stability - i think we need to postpone that"
with the switch to Eo2 we significantly increased our usage of RW memory
pages, and thus significantly increased our memory usage when running
multiple applications.
The problem was that during the migration to Eo2 the op id cache and the
op description arrays were merged, causing the op description arrays to
no longer be RO. This patch enables users of Eo (mainly Eolian) to
declare those arrays as const (RO) again, saving that memory.
There might be performance implications with this patch. I had to remove
the op desc array sorting, and I used a hash table for the lookup. I
think the op desc sorting doesn't really affect performance because that
array is seldom accessed and is usually pretty short. The hash table
is not a problem either, because it's behind the scenes, so it can be
changed to a more efficient data structure if the hash table is not good
enough. The hash table itself is also rarely accessed, so it's mostly
about memory.
Please keep an eye for any bugs, performance or excessive memory usage.
I believe this should be better on all fronts.
This commit *BREAKS ABI*.
@fix
This hasn't been used for a while. Since we are going to break Eo a bit anyway
it's a good opportunity to drop this.
This may cause a slight performance issues with legacy events, such as
smart callbacks. This shouldn't really be a problem as we've migrated away from
them. If it does, we need to migrate the remaining parts. Only relevant
for callbacks that are added before the classes are created, which
shouldn't be possible except for smart, only for old evas callbacks.
@fix
thanks to 김낙경 <nakkyong.kim@samsung.com> for pointing this out.
indeed fclose() closes the fd adopted by fdopen(). it doesn't dup it.
so we double-closed. it seems this never caused an issue until now.
this should fix it.
Summary:
Add additional check for description.text.source
and description.text.text_source attributes in TEXT part.
For cases when as source uses non TEXT/TEXTBLOCK part
serialization process should be stopped. This will cause
segmentation fault on runtime. (see edje_text.c line 251)
Reviewers: Hermet, raster, cedric, jpeg
Subscribers: cedric
Differential Revision: https://phab.enlightenment.org/D3026
Signed-off-by: Jean-Philippe Andre <jp.andre@samsung.com>
On Windows, PATH_MAX is 260 and PATH_MAX is used as string buffer
size in edje_cc compile. This causes edje_cc compile error when the edc
file contains "script" keyword and the length of file paths is
relatively long.
To resolve this problem, change the string buffer size in edje_cc
compile.
@fix
Summary:
Fix Coverity issue which reports a dereference before null check.
The enc_info can not has NULL point
because _edje_multisense_encode api calls exit() in case of failure
Reviewers: Hermet, Jaehyun, cedric
Reviewed By: cedric
Subscribers: cedric
Differential Revision: https://phab.enlightenment.org/D2794
Signed-off-by: Cedric BAIL <cedric@osg.samsung.com>
It's now generalized to work properly with legacy functions
as well as correctly append suffixes. Thus, it can be easily
used with the documentation generator and in other places.
@feature
This is now like the other embedded scripts, where a verbatim
string is parsed. The syntax is now:
filters {
filter {
name: "filter0";
file: "filter.lua";
}
filter {
name: "filter1";
script {
blend {}
}
}
filter.file: "file.lua"; // name is "file.lua"
}
Thanks @raster for the quick review.
Yeah that was totally overkill and pure laziness on my side.
Despite having the EO API for the filters still in beta,
I want to the EDC API and EDJ binary formats to stay compatible,
so let's get it right before the release :)
Summary: Fix Coverity CID1302700 which reports a dereference before
null check. Basically, it is safe to call free() with a possible NULL
value so we can remove the 'if' check here.
@fix
Signed-off-by: Chris Michael <cp.michael@samsung.com>
Summary: Fix Coverity CID1308232 which reports that we may be passing
NULL to strcmp here as the function _parse_param_get May return NULL.
@fix
Signed-off-by: Chris Michael <cp.michael@samsung.com>
Summary:
Elementary widgets dealing with Evas Events usually mask event_flags with
EVAS_EVENT_FLAG_ON_HOLD, to show that this event is already handled.
However, widget like Elm_Button, it does not handle EVAS_CALLBACK_MOUSE_DOWN directly,
but it handles Edje_Signal instead, so there's no chance to mask event_flags.
Developers can block event propagation by putting rectangle the very last part of EDC,
but this instruction can help the case making elementary widget with only Edje_Signal handling.
This is not required essentially, so please check the necessity of this function.
Reviewers: Hermet, cedric
Reviewed By: cedric
Subscribers: cedric, Hermet
Differential Revision: https://phab.enlightenment.org/D2764
Signed-off-by: Cedric BAIL <cedric@osg.samsung.com>
Otherwise there would be conflicts in certain circumstances.
This also requires adding const on many existing functions,
and similar work is necessary in Elementary.
@fix
Use the file data {item, file} block to embed filters code.
It can become especially useful to keep the filters as separated
Lua files, that will be embedded in the final edj file.
@feature
This should preserve ABI stability with earlier versions of
edje_cc while still providing more advanced control over
proxy bindings for evas filters from EDC.
Also fix proxy binding for filters.
@feature
Summary:
Using C++ wrapper types in the signature of methods of the generated
classes.
Now, when the type is an Eo type defined in Eolian, eolian_cxx will detect
it and use the equivalent C++ wrapper.
Types defined in Eolian no longer need to be specified in the lookup table,
so removed them from there.
Disable wrapping of non-const char*. The current wrapper (unique_ptr) is
not suited for some required operations like ownership acquisition from
C code.
Fix constructing properties that only have the "set" method.
Fix translation of non-const parameters.
Modified Makefiles to allow proper inclusion of evas_cxx headers required
by some tests and examples.
Move one auxiliary function to another reader to make it more accessible.
@feature
Reviewers: felipealmeida, q66, cedric
Subscribers: cedric
Differential Revision: https://phab.enlightenment.org/D2752
this fixes warnings about no efreet dbus session bus in non session
environments as brought up on the mailing lists with:
Subject: Re: [E-devel] [EGIT] [core/efl] master 01/01: edje: unset
efreet cache update flag to prevent dbus connections
this moves all of efreetd client and server to ecore ipc, with client
auto-launching efreetd if not found as a service and trying for up to
500ms to connect. efreetd times out on last connection or no
connections after 10sec so it wont hang around forever if not in use.
it seems to work in my testing, so let me know if there is an issue.
@fix
Summary:
Add the transition scale flag and the transtion scale value.
This flag can be change using "transition_scale_enable" in edje program.
If flag is true, the transition scale value affect the transition speed of edje
The transition scale value can be change by elm_config.
@feature
Test Plan: elementary_config
Reviewers: Hermet, cedric
Subscribers: cedric
Differential Revision: https://phab.enlightenment.org/D2287
Signed-off-by: Cedric BAIL <cedric@osg.samsung.com>
Summary:
Ecore_Buffer is abstraction of graphic buffer.
it supports backend of shm, x11_dri2 and x11_dri3 for now,
and this library also provides method to share buffers between processes.
Ecore_Buffer_Provider and Ecore_Buffer_Consumer is for this, sharing buffer.
provider draws something in to Ecore_Buffer, and consumer receives and displays it.
the binary, bq_mgr is a connection maker for buffer provider and consumer.
it can be included Enlightenment as a deamon later.
@feature
Test Plan:
1. Configure with --enable-ecore-buffer and --enable-always-build-examples to build examples.
2. Run bq_mgr, it connects consumer and provider.
3. Run ecore_buffer_provider_example and ecore_buffer_consumer_example
Reviewers: lsj119, gwanglim, cedric, zmike, jpeg, raster, devilhorns
Subscribers: cedric
Differential Revision: https://phab.enlightenment.org/D2197
Those objects should never be rendered on the canvas, even if they
are visible. On the other hand, they need to be rendered in mask or
proxy surfaces.
note: this patch includes some extra whitespaces changes :(
@feature
Since masking, for performance and themeing reasons, it becomes
interesting to be able to switch clippers on the fly. In particular,
switching from an IMAGE mask to a standard RECT clipper can save a
lot of power when masking is not required.
This new flag "description.clip_to" will behave a bit like a mix of
rel.to and visible:
- It points to a part by name, just like part.clip_to. This will
override the clipper set by the part, or override the default clipper.
- Like "visible", it can not be interpolated between two values, so
it will switch only at the end of a transition.
- By default there is no clip override, which means Edje will fallback
to the part's clipper, if any, or the base (group's) clipper.
NOTE:
- Since a clipper that does not clip anything becomes a standard object,
it is visible and rendered. This will in 99.999% cases not be the
intended behaviour. Currently we can simply use a transparent RECT
in order to always have something clipped by the clipper, but this is
a hack and this will trigger rendering of masks in their surfaces even
when they are not actually used.
Ideally, there should be a flag indicating to Edje & Evas that an object
should be considered a clipper in all situations, and never be rendered
on screen.
TODO:
- Support Edje Edit
- Add Embryo & Lua functions
- Add support in edje_convert
- Add Edje/Evas flag to mark objects as "no_render"
@feature
This resulted in a field using the next field's docs rather
than its own, because it incremented the member before
even trying to retrieve the docs.
@fix
Summary:
Implementation to support .po files in edc for translation
Test Plan:
Test Code to test this implementation is done as part of efl/src/examples/edje/edje-text.c and efl/src/examples/edje/text.edc
edje_cc -md . text.edc && gcc -o edje-text edje-text.c `pkg-config --libs --cflags ecore-evas edje evas ecore eo`
./edje-text
1) Click On the text "Click here"
The language gets changed.
Reviewers: shilpasingh, cedric
Reviewed By: shilpasingh, cedric
Subscribers: cedric, rajeshps, govi, poornima.srinivasan
Differential Revision: https://phab.enlightenment.org/D2573
Signed-off-by: Cedric BAIL <cedric@osg.samsung.com>
eina_btlog is a backtrace "cleaner" that takes a raw bt from eina log
and gives a full readable bt for humans. it's run-and-quit binary like
ls or rm - it does its job and exits, so leaks are really of no
concern here...
CID 1297407
While it is true that 'strrchr' may return NULL, in this case it
never will (there is always a newline). Either way, silence Coverity.
Fixes CID 1304558.
This commit adds the necessary generator logic to emit doc
comments from the new doc syntax. Old doc comments are kept
in for the time being as they're used within the EFL but they
will be removed eventually. This new generator focuses all the
important code in one place, making usage easy.
@feature
Summary:
Fix parens bug.
((x + y)-z) is OK.
((x + y) - z) is NOT OK. This patch can cover this case.
@fix
Signed-off-by: Nak-Gyeong Kim <nakkyong.kim@samsung.com>
Test Plan:
Test in edc.
((x + y)-z) is OK.
((x + y) - z) is NOT OK. This patch can cover this case.
If parens are not paired, it will notify.
Reviewers: raster, Hermet, cedric
Subscribers: kimcinoo, jaehwan
Differential Revision: https://phab.enlightenment.org/D2554
Signed-off-by: Cedric BAIL <cedric@osg.samsung.com>
Summary:
Modified codes according to prevent result
The im will be freed by data_image_preload_done api.
But if image load error happen, never call that api
@fix
Test Plan: prevent tool
Reviewers: Jaehyun, Hermet, cedric
Reviewed By: cedric
Subscribers: cedric
Differential Revision: https://phab.enlightenment.org/D2565
Signed-off-by: Cedric BAIL <cedric@osg.samsung.com>
Compilation was failing due to the changes in the Eolian library. The
generator has not been updated.
This patch fixes the compilation but not the tests that I let to my
lovely q66.
Summary: Changes float on uchar as we do in other place for color component
Reviewers: raster, Hermet, cedric
Reviewed By: cedric
Subscribers: cedric, artem.popov
Differential Revision: https://phab.enlightenment.org/D2528
Signed-off-by: Cedric BAIL <cedric@osg.samsung.com>
Summary:
Internationalisation of the static text specified as part of the edc is implemented.
Problem: Static text when specified in the edc, remains unchanged when the system language is changed.
Solution: Language support is provided even for the static strings in the edc.
Test Plan:
Test code to test this implementation is done as part of efl/src/examples/edje/edje-text.c and efl/src/examples/edje/text.edc
Compile the code with the below command
edje_cc -md <dir path>/efl/src/examples/edje/ text.edc && gcc -o edje-text edje-text.c `pkg-config --libs --cflags ecore-evas edje evas ecore`
./edje-text
1) change the language of the system using the command
export LANGUAGE=hi
./edje.text
Not the text Loading gets displayed in hindi language
2) change the language of the system using the command
export LANGUAGE=ta
./edje.text
Not the text Loading gets displayed in tamil language
3) change the language of the system using the command
export LANGUAGE=en
./edje.text
Not the text Loading gets displayed in english language
As the number of .mo files in the /edje folder can be increased, those many languages can be supported
Reviewers: cedric, shilpasingh
Reviewed By: shilpasingh
Subscribers: cedric, rajeshps, govi, poornima.srinivasan
Differential Revision: https://phab.enlightenment.org/D2336
Signed-off-by: Cedric BAIL <cedric@osg.samsung.com>
this makes eina_log give bt's for all error logs. this is very useful
in finding just where a problem happens. the problem int he past is
that these have not been too useful due to backtrace_symbols() being
"useless". thus use the eina_btlog tool i added too.
also started infra for a debug monitor that can use the backtrace
infra to collect runtime stats ANY TIME for a process (don't need to
run under a debugger).
@feat
Typedef word was not generated for enums. Camel case was not respected
for type definition.
Tests have been updated to check enums generation.
@fix T2400
Summary: Anotate to Annotate
Test Plan: test it to make sure I didn't break it...
Reviewers: raster, cedric
Differential Revision: https://phab.enlightenment.org/D2356
Signed-off-by: Cedric BAIL <cedric@osg.samsung.com>
Added optional constructor methods for C++ Eolian wrappers.
Changed the interface of wrappers' main constructors.
If there are optional constructor methods they should be passed as variadic
template argument at the end of the constructor.
To support variadic template arguments, the optional "parent" parameter is
now the first parameter and there is another constructor without the
"parent" parameter.
Checking for @optinal and @nullable attributes instead of @nonull.
Now @nonull is the default, and eina::optional is only used when @optional
or @nullable attribute is specified.
The names of constructor methods no longer have the class name prefixed.
Added unit tests for checking the binding of optional constructors.
Added new .eo file to be used in the test.
Changed the generated documentation of constructors.
Changed the efl::eo::inherit accordingly, to address these new features.
Now the constructor methods should be explicit called in the
efl::eo::inherit constructor, which will receive them via variadic
template arguments.
Added another constructor to efl::eo::inherit for passing the parent
object.
Updated some tests and examples to follow the new interface.
Removed some code that is no longer necessary.
Also, fix Eolian C++ support for constructing properties. fix
assertion when parsing constructing properties.
Now if a property is a constructing property eolian_cxx will generate a
constructor method that have the property name (without the "_set" suffix).
Using eina::string_view in eolian generated interfaces (instead of
std::string) to allow lightweight passing of both C strings and C++
std::string.
Also, No longer using eina::optional in generated headers for types
that already implements the concept of null state (like Eo wrappers
and eina_accessor).
Also fix allocating callback objects require by class methods
(i.e. static) in static vectors so the memory will be freed when the
programs exit.
Added a new test case for testing callbacks on class methods.
Moved method definitions and supplementary code from generated C++
wrappers to auxiliary header file (.eo.impl.hh) generated together
with the main ".eo.hh" file. Updated Makefiles to list such files in
the compilation and cleanup processes. Updated .gitignore to include
these new generated files.
Made general adjustments on the documentation of generated C++ wrappers
Added "PREDEFINED" preprocessor macro definition in the Doxyfile.in in
order to make some adjustments for better documentation in the C++
generated headers. Excluding generation of documentation for classes
in the "eo_cxx" namespace (the namespace for "abstract" eolian C++
wrappers). Now generating the documentation for the events too.
Hiding some auxiliary code from being documented. Some aesthetic
adjustments for generated white space. Generate documentation for the
main constructor of C++ wrappers and added auxiliary grammars to list
parameters names.
Added declaration of all inherited events on the concrete type to
avoid unnecessary type conversion on event callbacks.
Note that when two events happens to have the same name, only the
event of the derived class is declared in the concrete class. Access to
such events should be made through the base class type specification.
Fix on forwarding callback object (changed std::move to std::forward).
Additional line break at the end of event handling methods in the
generated headers to improve readability.
Summary: Fix coverity CID1294212 (potential Null pointer dereference) as
the alloc for subdir_cache Could fail, however if it does we Were
still trying to use it. In the case that it fails, ERR msg and return.
@fix
Signed-off-by: Chris Michael <cp.michael@samsung.com>
efreetd was losing the last char on every line of extra_icon.dirs and
icon.exts thus resulting in gradual degredation of these files as more
and more changes happen to have things like:
.jpeg
.jpe
.jp
.j
.
etc. for extension or dirs like
/home/raster/.e/e/icons
/home/raster/.e/e/icon
/home/raster/.e/e/ico
...
/home/ras
/home/ra
/home/r
...
/ho
/h
/
.. you get the idea. before long the list of extra icon dirs (and
extensions) was massigve and caued all sorts of filesystem rummaging.
this fixes that to no longer degrade these files. this also changes
their names to force new files to be used instead of the broken old
ones.
if you unlink then rename, there is a gap between the unlink and
rename - no file is there. the point of the rename is to be atomic.
either old file OR new file. nothing in between. this fixes that race.
this fixes major slowness in things like enlightenment login. when
enlightenment starts, efreetd is started. efreetd takes a long time to
start because it is scanning lots of directories recursively. it is
early in code freeze, so i think this can go in as a fix, even though
it is more of an optimization, but as such it has a fairly major speed
impact, so i consider this fixing a core performance problem for
things like logging in. The solution is a cache file containing all
the sub directories in a directory tree. we still have to stat every
directory, but this avoids a lot of stating of all files as well and
avoids any readirs etc. so it is much faster. on an ssd this comes out
to 4 times faster for efreetd to start up. on an hdd it's about 2x
faster to start uncached.
this should bea good fix for startup times - on my systems thats a 1
second speedup on ssd (out of about 8 seconds boot time) and 3 seconds
on hdd (out of about 39 seconds boot). so w save 1 and 3 seconds
respecively in boot + login.
now can we get this to 0 or close? that's a matter of designing
something like a deferred scan + monitor add so we wait until "startup
is done" then set up in the bg for a bit. that might shave another 3
seconds off boot time for hdd's but for ssd's wil barely blip (maybe
save 0.1 sec). so leave that till normal dev mode.
@fix
i found my efreetd was not just monitoring a small set of dirs but
literally $HOME - recursively. this explains a lot of performance
issues i have seen on spinning hdd's vs ssd's. i never knew if was in
efreetd though... until now. for whatever reason my efret cache caused
efreet to try monitro a list like:
/
/h
/ho
/hom
/home
/home/
/home/r
... etc.
when trying to monitor something like:
/home/raster/.local/share/icons
that means it ended up trying $HOME as wellas a vast range of dirs it
just shouldn't sensibly ever try. i have no idea how my cache ended up
this way, but deleting it and re-populating it fixed it. so this ads
code to detect such insanity (as wellas give actual complaints on deep
recursion so we can see things better later). not a bug fix as such,
but a major improvement to detecting bugs which is what we want for
stability.
I also noticed that one legacy pixmaps dir is not recursively
monitored, but another is - so be consistent and recurs both.
Also apply checks to desktop file monitoring too.
Problem: evas_object_image_save() can't be interrupted.
But, with ETC1/ETC2 encoding, it might be terribly long and
the user has no way to cancel encoding (except SIGKILL).
The proper solution would be to tell evas that the save
operation has been cancelled. And run that in a thread,
in a non-blocking way. I guess Efl.File.async could be
used for that, which means maybe also introduce
Efl.File.async_cancel? This will have to wait for
EFL 1.15 I'm afraid.
Note: edje_cc still can't be cancelled during ETC encoding.
Summary: Added code to include non-edc resource (image, sound, video etc) path in dep file while dumping include dependencies for edc files.
Reviewers: raster, cedric, Sergeant_Whitespace
Reviewed By: cedric, Sergeant_Whitespace
Subscribers: Sergeant_Whitespace
Projects: #efl
Maniphest Tasks: T2252
Differential Revision: https://phab.enlightenment.org/D2270