Commit Graph

228 Commits

Author SHA1 Message Date
Christopher Michael daeb5264a8 evas_main: Minor formatting fixes
NB: No functional changes
2022-12-03 06:16:28 -05:00
Felipe Magno de Almeida 0363fd8238 evas: Rename EAPI macro to EVAS_API in Evas library
Summary:
Patch from a series of patches to rename EAPI symbols to specific
library DSOs.

=  The Rationale =

This patch is from a series of patches to rename EAPI symbols to
specific library DSOs.

EAPI was designed to be able to pass
`__attribute__ ((visibility ("default")))` for symbols with
GCC, which would mean that even if -fvisibility=hidden was used
when compiling the library, the needed symbols would get exported.

MSVC __almost__ works like GCC (or mingw) in which you can
declare everything as export and it will just work (slower, but
it will work). But there's a caveat: global variables will not
work the same way for MSVC, but works for mingw and GCC.

For global variables (as opposed to functions), MSVC requires
correct DSO visibility for MSVC: instead of declaring a symbol as
export for everything, you need to declare it as import when
importing from another DSO and export when defining it locally.

With current EAPI definitions, we get the following example
working in mingw and MSVC (observe it doesn't define any global
variables as exported symbols).

Example 1:
dll1:
```
EAPI void foo(void);

EAPI void bar()
{
  foo();
}
```
dll2:
```
EAPI void foo()
{
  printf ("foo\n");
}
```

This works fine with API defined as __declspec(dllexport) in both
cases and for gcc defining as
`__atttribute__((visibility("default")))`.

However, the following:
Example 2:

dll1:

```
EAPI extern int foo;
EAPI void foobar(void);

EAPI void bar()
{
  foo = 5;
  foobar();
}
```

dll2:

```
EAPI int foo = 0;
EAPI void foobar()
{
  printf ("foo %d\n", foo);
}
```

This will work on mingw but will not work for MSVC. And that's why
LIBAPI is the only solution that works for MSVC.

Co-authored-by: João Paulo Taylor Ienczak Zanette <jpaulotiz@gmail.com>
Co-authored-by: Lucas Cavalcante de Sousa <lucks.sousa@gmail.com>
Co-authored-by: Ricardo Campos <ricardo.campos@expertise.dev>

Reviewers: vtorri, woohyun, jptiz, lucas

Reviewed By: vtorri, lucas

Subscribers: cedric, #reviewers, #committers

Tags: #efl

Differential Revision: https://phab.enlightenment.org/D12214
2020-12-15 23:06:12 -03:00
Woochanlee ca2900be8a evas_main: Fix memory leak.
Summary: If the inlist has only one item when it removed. the data is not freed in descturctor.

Reviewers: Hermet, raster, vtorri

Reviewed By: Hermet

Subscribers: vtorri, cedric, #reviewers, #committers

Tags: #efl

Differential Revision: https://phab.enlightenment.org/D12147
2020-09-17 17:23:10 +09:00
Elyes HAOUAS c7da405ae7 Get rid of trailing whitespaces (12 / 14)
Remove trailing whitespaces
Differential Revision: https://phab.enlightenment.org/D12011
2020-06-23 10:31:22 +02:00
Shinwoo Kim 7b21b6fb97 evas: do not call evas_object_change in reneder_post
Summary:
evas_render_updates_internal > eina_array_remove is calling pending_change
pending_change > render_post could call evas_object_change >
evas_render_object_recalc.

The eina_array is removing its item from pending_objects, while
the evas_object_change that is calling evas_render_object_recalc is adding
item to pending_objects.

As a result, the pending_objects.count is incorrect, and it breaks render.

Reviewers: Hermet, jsuya, herb

Reviewed By: Hermet

Subscribers: cedric, #reviewers, #committers

Tags: #efl

Differential Revision: https://phab.enlightenment.org/D11835
2020-05-19 13:14:30 +09:00
Hermet Park 88dd66f3d1 canvas clip: replace hash to cached array.
Each child_map_across_mark() takes 0.026ms with eina_hash
we can reduce the performing time by replacing the hash to array to 0.0041ms in a device.

Before Average: 0.026ms
Mostly it takes 23 times in the scrolling. thus it takes 3%(0.48ms) in one frame rendering (16ms)

After Average: 0.0041ms
Mostly it takes 23 times in the scrolling. thus it takes 0.6%(0.096ms) in one frame rendering (16ms)
result: map calc 5x faster than original (0.384ms improved)

Thanks Subhransu for report this.

@optimization
2020-04-28 14:50:13 +09:00
WooHyun Jung 3897603796 evas_main: add null check for safety 2020-04-14 08:49:42 +09:00
Hermet Park f9ae39ef52 evas text: fix memory leak.
Summary: free used memory properly.

Subscribers: cedric, #reviewers, #committers

Tags: #efl

Differential Revision: https://phab.enlightenment.org/D11691
2020-04-13 14:43:57 +09:00
Marcel Hollerbach 7d89ddc67d evas: free font lists correctly
sometimes a canvas object is zombying, and does not get freed correctly.
If this is right now happening in our test suite, we are going to free
the list, but do not clean up the pointer in there.

Reviewed-by: Mike Blumenkrantz <michael.blumenkrantz@gmail.com>
Differential Revision: https://phab.enlightenment.org/D11594
2020-03-25 22:13:20 +01:00
Hermet Park 476e2b0521 canvas 3d: remove all canvas3d features across efl.
Reviewers: jsuya, kimcinoo, bu5hm4n, raster

Subscribers: cedric, #reviewers, #committers

Tags: #efl

Differential Revision: https://phab.enlightenment.org/D11552
2020-03-25 19:14:02 +09:00
Marcel Hollerbach 165f6f0ae2 rewrite efl cnp and dnd handling
the previous commits introduced a abstraction for drag in drop which can
be now used for this here. With this commit all the direct protocol
handling in efl.ui is removed, and only the ecore evas API is used.

Additionally, this lead to a giant refactor of how APIs do work. All
Efl.Ui. interfaces have been removed except Efl.Ui.Selection and
Efl.Ui.Dnd, these two have been restructored.
A small list of what is new:
- In general no function pointers are used anymore. They feel very
  uncompftable in bindings and in C. For us its a lot easier to just
listen to a event when a drop enters or leaves, there is no need to
register custom functions for that.
- Asynchronous data transphere is handled via futures, which proved to
  be more error safe.
- Formats and actions are handled as mime types / strings.
- 0 is the default seat if you do not know what else to take.
- Content is in general passes as a content container from eina, this
  also allows applications to pass custom types

The legacy dnd and cnp API is implemented based on that.
All cnp related things are in elm_cnp.c the dnd parts are in elm_dnd.c

Reviewed-by: Mike Blumenkrantz <michael.blumenkrantz@gmail.com>
Differential Revision: https://phab.enlightenment.org/D11190
2020-03-08 10:59:40 +01:00
Carsten Haitzler 7eeeb3c6f9 evas - fix access-after-free number 2
follow on from 3aa250e17f and T8534
looking into more possible problems and fixes

@fix
2020-01-18 12:25:08 +00:00
Carsten Haitzler 3aa250e17f evas - fix access-after-free where during destroy hash item not cleared
leave it in the hash unfreed as it will be freed when the hash is soon
after durint destruction.

@fix
2020-01-18 00:14:58 +00:00
Woochanlee fc456d2b77 gesture_manager: Changed function param to reduce internal function calls.
The filter_event function calling a lot of times when it runs.

This can help performance by reducing the number of calls to the efl_data_scope_get() function.

Reviewed-by: Hermet Park <hermetpark@gmail.com>
Reviewed-by: Marcel Hollerbach <mail@marcel-hollerbach.de>
Differential Revision: https://phab.enlightenment.org/D10437
2019-12-03 09:53:37 +01:00
Marcel Hollerbach 3838112294 Revert "gesture_manager: Changed function param to reduce internal function calls."
This has still open review comments, lets solve them, and *then* land
it.

This reverts commit 2f41f867ae.
2019-11-27 15:54:57 +01:00
Woochanlee 2f41f867ae gesture_manager: Changed function param to reduce internal function calls.
Summary:
The filter_event function calling a lot of times when it runs.

This can help performance by reducing the number of calls to the efl_data_scope_get() function.

Reviewers: Hermet, smohanty, bu5hm4n

Reviewed By: Hermet

Subscribers: zmike, bu5hm4n, q66, cedric, #reviewers, #committers

Tags: #efl

Differential Revision: https://phab.enlightenment.org/D10437
2019-11-27 14:28:48 +09:00
Cedric Bail 7dc98ab3d0 evas: move efl_input_device into evas/Efl_Canvas.h
Summary:
The internal and the API we would like is mostly a canvas API. A lot of the code
in evas is working around the fact that efl_input_device is not defined inside Evas.
This patch is the first step to try to clean this up.

Depends on D10487

Reviewers: zmike, raster, bu5hm4n, Hermet

Reviewed By: zmike

Subscribers: #reviewers, #committers

Tags: #efl

Maniphest Tasks: T8321

Differential Revision: https://phab.enlightenment.org/D10488
2019-10-31 13:29:56 -04:00
Mike Blumenkrantz dc5c17a104 evas/render: selectively inhibit render callbacks
Summary:
only call these if they are subscribed to now

ref T8321

Reviewers: cedric

Reviewed By: cedric

Subscribers: cedric, #reviewers, #committers

Tags: #efl

Maniphest Tasks: T8321

Differential Revision: https://phab.enlightenment.org/D10361
2019-10-14 09:30:17 -04:00
Mike Blumenkrantz dc1630d496 evas: fix type checking of Evas pointers in legacy functions
many of these functions go directly to evas internals with no eo checks,
and the existing "MAGIC_CHECK" macro has somehow become a useless null
check

type checking here is important in order to avoid crazy behavior when the
wrong object types are passed

@fix

Reviewed-by: Cedric BAIL <cedric.bail@free.fr>
Differential Revision: https://phab.enlightenment.org/D9364
2019-07-19 15:05:00 -07:00
Marcel Hollerbach d3dbd5a5cd evas_events: fix wrong event listening
EFL_EVENT_FOCUS_IN is wrong here, EFL_EVENT_FOCUS_IN is called on object
that received object focus. Not canvas focus, however, the code in the
callback there seems to be mainly for canvas focus handling.

Additionally, in evas_events, the event handler that was listening for
the canvas focus in / out events expected a event type, which is also
not correct, because the canvas focus in / out does not have one. In
order to catch such errors later more easily, there is now a safety
check, so we really fetched the correct seat.

Reviewed-by: YeongJong Lee <yj34.lee@samsung.com>
Differential Revision: https://phab.enlightenment.org/D9191
2019-06-28 09:03:14 +02:00
Marcel Hollerbach 8127f29c46 evas: emit the corrent event here,
it seems we have done here something wrong, EFL_EVENT_FOCUS_IN is meant
to be emitted on objects that RECEIVE focus. This function here however
is called each time the window gets focus, which then might lead to a
object getting focus. However, those are two different things.

Reviewed-by: Mike Blumenkrantz <michael.blumenkrantz@gmail.com>
Differential Revision: https://phab.enlightenment.org/D9137
2019-06-20 17:14:56 +02:00
Vincent Torri 24e4881efb Evas: remove Evil.h when not needed and use evil_private when needed
Test Plan: compilation

Reviewers: zmike, raster, cedric

Reviewed By: zmike

Subscribers: #reviewers, #committers

Tags: #efl

Differential Revision: https://phab.enlightenment.org/D8921
2019-05-20 08:46:02 -04:00
Mike Blumenkrantz 68750338c1 efl.input.types: mark enums beta again and use legacy types in legacy code
Summary:
these types are not currently being released and eolian should not have
generated legacy code using them

Reviewers: segfaultxavi

Reviewed By: segfaultxavi

Subscribers: cedric, #reviewers, #committers

Tags: #efl_api

Differential Revision: https://phab.enlightenment.org/D8288
2019-03-11 16:27:00 +01:00
Mike Blumenkrantz 5bfe2e89d2 evas: remove all legacy usage from eo files
this takes the current generated output from eolian for legacy code in
evas and adds it to the tree, then removes legacy references from the
corresponding eo files. in the case where the entire eo file was for
a legacy object, that eo file has been removed from the tree

ref T7724

Reviewed-by: Marcel Hollerbach <marcel-hollerbach@t-online.de>
Differential Revision: https://phab.enlightenment.org/D8107
2019-03-06 19:05:48 +01:00
Mike Blumenkrantz 6b046ec845 efl.gfx: remove Efl.Gfx.Image_Load_Error
Summary:
this is now implemented through Eina.Error

ref T7718

Depends on D8066

Reviewers: cedric

Reviewed By: cedric

Subscribers: cedric, #reviewers, #committers

Tags: #efl_api

Maniphest Tasks: T7718

Differential Revision: https://phab.enlightenment.org/D8067
2019-03-04 13:36:57 -05:00
Mike Blumenkrantz d16adf8d82 efl.canvas.scene: rename "smart" methods to "group" methods
Summary:
"group" is the name used for interfaces api, so be consistent by using
that naming here too

ref T7584
Depends on D8019

Reviewers: segfaultxavi

Reviewed By: segfaultxavi

Subscribers: segfaultxavi, cedric, #reviewers, #committers

Tags: #efl

Maniphest Tasks: T7584

Differential Revision: https://phab.enlightenment.org/D8021
2019-02-25 14:00:14 -05:00
Xavi Artigas 220f17ee8d Rename Efl.Gfx.Map -> Efl.Gfx.Mapping
Summary:
For clarity, since there are all kinds of maps, including a navigation map
widget.
Also, corrected some misspellings.

Test Plan: make && make check && make examples all work

Reviewers: cedric, zmike, bu5hm4n

Reviewed By: cedric

Subscribers: Jaehyun_Cho, #reviewers, #committers

Tags: #efl

Maniphest Tasks: T7564

Differential Revision: https://phab.enlightenment.org/D7974
2019-02-21 19:20:09 +01:00
Xavi Artigas 6b7346b7b2 Remove individual class BETA guards
Summary:
Eolian adds a per-class BETA guard (like EFL_UI_WIN_BETA) to any method tagged
as @beta. This means that any app (and the EFL code) wanting to use BETA features
has to enable them class by class, which is cumbersome.
This commit replaces the individual guards with the global EFL_BETA_API_SUPPORT
guard, so apps only need to define one symbol to access BETA features.

Any usage of the per-class guards has been removed from the EFL code and examples.
When building EFL the global guard is defined by configure, so all EFL methods
already have access to BETA API.
Efl_Core.h and Efl_Ui.h no longer define EFL_BETA_API_SUPPORT. Apps wanting to
use BETA API have to define this symbol before including any EFL header
(It has been added to the examples requiring it).

Test Plan:
make && make check && make examples still work, but there's a lot less #defines
in the code

Reviewers: zmike, bu5hm4n, q66

Reviewed By: q66

Subscribers: cedric, #reviewers, #committers

Tags: #efl

Maniphest Tasks: T6788

Differential Revision: https://phab.enlightenment.org/D7924
2019-02-13 18:09:17 +01:00
Marcel Hollerbach 3b2a5a429b efl_input: remove the API of efl_input_instance_get
there is basically no reason for this API. You can only use the API when
you know the class, when you know the class you can also just know the
function to call to get this API.
The reason this API needs to go is that we don't want to use
polymorphism on class-functions.

ref T7675

Reviewed-by: Xavi Artigas <xavierartigas@yahoo.es>
Differential Revision: https://phab.enlightenment.org/D7900
2019-02-13 16:59:57 +01:00
Carsten Haitzler ca26f83ec9 evas - warn - use correct free func prototype 2018-11-09 11:44:00 +00:00
Hermet Park 2614179af8 Revert "evas vg: changed "vg object" to "vg""
This reverts commit ec69abed9d.

Ooops, I didn't intended this patch.  @#!@#!@#!@#
2018-09-10 17:27:42 +09:00
Hermet Park ec69abed9d evas vg: changed "vg object" to "vg"
Summary:
Following our naming rule, rename to like other primitives.

i.e. efl_canvas_rect, efl_canvas_image, efl_canvas_vg ...

Subscribers: cedric, #reviewers, #committers

Tags: #efl

Differential Revision: https://phab.enlightenment.org/D7013
2018-09-10 14:06:58 +09:00
Chris Michael 5b36506a68 evas-canvas: Remove cserve2 support
Summary:
ref T7226

Depends on D6933

Reviewers: raster, cedric, zmike, Hermet

Reviewed By: Hermet

Subscribers: #reviewers, #committers

Tags: #efl

Maniphest Tasks: T7226

Differential Revision: https://phab.enlightenment.org/D6934
2018-08-30 13:48:38 +09:00
Hosang Kim 586f8ae957 efl_input: fix problem that ref count does not become 0.
1.fix reusing instance logic.
2.remove efl_ref() when default devices are created.
Differential Revision: https://phab.enlightenment.org/D6882
2018-08-27 09:43:50 +02:00
Yeongjong Lee 206d40e331 evas: add safety check code to avoid crash
Test Plan: evas_smart_objects_calculate(NULL);

Reviewers: zmike, Hermet, devilhorns

Reviewed By: devilhorns

Subscribers: cedric, #reviewers, #committers

Tags: #efl

Differential Revision: https://phab.enlightenment.org/D6805
2018-08-09 11:19:46 -04:00
Mike Blumenkrantz be33c835ac evas: handle all failure cases with error messages in evas_init
Summary: fix T7026

Reviewers: Hermet

Reviewed By: Hermet

Subscribers: cedric, #committers

Tags: #efl

Maniphest Tasks: T7026

Differential Revision: https://phab.enlightenment.org/D6677
2018-07-26 21:43:50 +09:00
Mike Blumenkrantz 259ba514ef evas/main: call correct destroy function in evas_free
Summary:
an evas may or may not have a parent; this is legacy api and it's all
confusing

Reviewers: bu5hm4n, devilhorns

Reviewed By: bu5hm4n

Subscribers: cedric, #committers

Tags: #efl

Differential Revision: https://phab.enlightenment.org/D6486
2018-07-05 15:12:58 -04:00
Mike Blumenkrantz 5a4fe07415 evas/main: move common shutdown to after ecore shutdown
Summary:
ecore_shutdown will trigger object deletions which require common
components to still be active in order to avoid crashes

ref 3433be343779424c5e030ace30e211298cd060f8
ref T7052

Reviewers: ManMower, devilhorns

Reviewed By: ManMower, devilhorns

Subscribers: cedric, #committers

Tags: #efl

Maniphest Tasks: T7052

Differential Revision: https://phab.enlightenment.org/D6475
2018-06-28 14:53:11 -05:00
Mike Blumenkrantz c43850eed4 evas/main: shuffle shutdown order of filters and modules
Summary:
these both deallocate resources which can be needed during ecore_shutdown

ref df652673fe
fix T7052

Reviewers: ManMower, devilhorns

Reviewed By: devilhorns

Subscribers: cedric, #committers

Tags: #efl

Maniphest Tasks: T7052

Differential Revision: https://phab.enlightenment.org/D6474
2018-06-28 12:41:13 -04:00
Hosang Kim df652673fe evas: move clearing cows to right place.
Summary:
Evas is child of main loop now, so evas is deleted when main loop is quitted.
In case of not calling evas_free() explicitly by app side, a crash occurs.
So move clearing cows to below ecore_shutdown().

Test Plan:
//Compile with:
//gcc evas_test.c -o evas_test `pkg-config --cflags --libs ecore evas`

#include <Evas.h>
#include <Ecore.h>

Eina_Bool
_timer_cb (void *data)
{
    ecore_main_loop_quit();
    return 0;
}
int
main(int argc, char *argv[])
{

   evas_init();
   Evas *evas = evas_new();
   Evas_Object *obj = evas_object_box_add(evas);
   Evas_Object *rect = evas_object_rectangle_add(evas);
   evas_object_color_set(rect, 255, 255, 255, 255);
   evas_object_resize(rect, 300, 400);
   evas_object_show(rect);

   evas_object_box_append(obj, rect);

   evas_object_show(obj);
   ecore_timer_add(2.0, _timer_cb, NULL);
   ecore_main_loop_begin();

   evas_shutdown();
   return 0;
}

Reviewers: devilhorns, cedric, jpeg, id213sin, woohyun, zmike

Reviewed By: zmike

Subscribers: cedric, #committers, zmike

Tags: #efl

Differential Revision: https://phab.enlightenment.org/D6346
2018-06-27 07:50:31 -04:00
Marcel Hollerbach 23aab73c2f evas: be less error prone
Summary:
Dont spin infinitly when the refcount accidently is already < 0.

Depends on D6225

Reviewers: zmike, cedric, stefan_schmidt, #committers

Reviewed By: zmike, #committers

Subscribers: cedric, #committers, zmike

Tags: #efl

Differential Revision: https://phab.enlightenment.org/D6226
2018-05-29 12:24:36 -04:00
Cedric Bail a8b70953e4 evas: improve evas child destruction order.
Technically I do not thing it is a correct behavior to force destroy
reference that evas do not hold, but evas_object are deaply tied to
the canvas they are build on and even after invalidate it is hard
to not have function call that would lead to crash. Making the pointer
incorrect thanks to eo indirection seems safer here.
2018-05-24 16:02:20 -07:00
Cedric Bail 5c9815676b evas: move the del event to match invalidate and free event to the end of the destructor. 2018-05-24 16:02:19 -07:00
Cedric BAIL ddccd9e306 evas: destructor can not be called recursively, we should rely on Eo refcount. 2018-05-24 16:02:19 -07:00
Cedric Bail 91cd4f7c0c evas: actually we do not even need to NULL it, if we wref it. 2018-05-24 16:02:19 -07:00
Cedric BAIL fe14abd929 evas: refactor efl_input_event and remove some of the lifecycle hack.
Differential Revision: https://phab.enlightenment.org/D6101
2018-05-24 16:02:18 -07:00
Cedric BAIL 4c9a33a388 eo: move EFL internal function ___efl_ref2 also to eo_internal.h
Differential Revision: https://phab.enlightenment.org/D6099
2018-05-24 16:02:18 -07:00
Derek Foreman 83e1a456a4 evas_main: Fix deleting pointer data
Summary:
This appears to be called from a delete callback that takes place well
after the eo parent relationship is deleted, however
efl_input_device_get_seat() finds the seat by finding the parent.  That
will always be NULL during this callback, so we'll leak the data.

Instead, search all seats for the pointer.
Depends on D6181

Reviewers: zmike

Reviewed By: zmike

Subscribers: cedric, zmike

Tags: #efl

Differential Revision: https://phab.enlightenment.org/D6182
2018-05-18 13:46:36 -04:00
Marcel Hollerbach dda350e3b4 evas: introduce a log domain to monitor which object gets focus 2018-05-10 13:34:32 +02:00
Myoungwoon Roy, Kim 2733277b2a evas_main: fix structually dead code
Summary: Fix structually dead code in evas_main owing to wrong #ifdef EVAS_CSERVE2 definition

Test Plan: Execute test suite

Reviewers: raster, Hermet, cedric, jpeg, stefan_schmidt, Jaehyun_Cho

Reviewed By: raster

Subscribers: zmike

Tags: #efl

Differential Revision: https://phab.enlightenment.org/D6053
2018-05-05 12:02:34 +09:00