AgeCommit message (Collapse)Author
2 daysedje_entry: real part protection checkHEADmasterali
Fix T8524 Reviewed-by: Cedric BAIL <> Differential Revision:
3 daysefl_ui: docuement codeMarcel Hollerbach
there was the request that this needs to be documented, here we are. Reviewed-by: Cedric BAIL <> Differential Revision:
3 daysefl_ui_widget: do not execute up handler when on destructionMarcel Hollerbach
otherwise we would cause an error. Reviewed-by: Cedric BAIL <> Differential Revision:
3 daysevas_focus: protect against faulty focus objectMarcel Hollerbach
the problem is that we only remove ourselfs from the focused list in the invalidator. However, we allowed invalidated objects to be part of this hash, which made everything go boom. With this commit you at least only get one error and you should fix up this case. This fixes random errors in enlightenment (That are appearing theire since seats have been introduced to evas, the problem before invalidate was that the object was already destructor called, but not fully destructed yet). Reviewed-by: Cedric BAIL <> Differential Revision:
3 daysefl_ui_spotlight_manager_*: do not keep ptr of dead pointerMarcel Hollerbach
when content is deleted, we should not keep a dangling pointer of it. Setting it to NULL here is enough, as later on a swtich_to reuest will be sent. Reviewed-by: Cedric BAIL <> Differential Revision:
3 daysefl_datetime_manager: how did that ever work?Marcel Hollerbach
seriously, it sometimes might be worth at least *reading* what code does, this was initializating a private data struct on one single global boolean flag. How was that ever intended to work ? How could that ever slip through review ? This is not the only madness in these widget arround time and date, you cannot even select hours in 24h mode, you also cannot cannot select the 0 hour, which is kind of normal for the one or another region? the datetimemanager (which is IMO a complete misconcept) is full of FIXMEs and API calls that are defined and never called at all. Again what is this ? And how did that ever get into the codebase ?! With this commit the widget *finally* can be created more than once without exploding and erroring one. Reviewed-by: Cedric BAIL <> Differential Revision:
3 daysefl_ui_spec_test: make this test workMarcel Hollerbach
I do not know what i was thinking when i initially wrote that test. It never worked, the test created a widget captured all elements, deleted the widget, then checked if there are elements left that are not knon on the canvas yet. Not the test first captures all elements, then creates the widget, then deletes the widget, and checks if there are more elements than expected. This found all the fix leaks prior to this leak. Reviewed-by: Cedric BAIL <> Differential Revision:
3 daysefl_ui_collection: do not leakMarcel Hollerbach
this fixes leaking of membership to a pan object, additionally this also fixes the leaking of the pan object. This code was written with the thought that edje deletes its children, long story short: no it does not. While fixing the leak of the pan object, the error was found that the membership of the item to the pan object was leaked, which ended up in the item beeing deleted, even if its not part of the object anymore. Reviewed-by: Cedric BAIL <> Differential Revision:
3 daysefl_ui_scroller: free pan object correctlyMarcel Hollerbach
we need to free the object in the invalidate, not in the destructor. Otherwise we might leak objects in bindings. Reviewed-by: Jaehyun Cho <> Reviewed-by: Cedric BAIL <> Differential Revision:
3 dayscollection_view: free pan object correctlyMarcel Hollerbach
edje will not take over this part, edje will just reparent it to the ML and go on. Reviewed-by: Cedric BAIL <> Differential Revision:
3 daysefl_ui_pan: stop leaking contentMarcel Hollerbach
pans implementation of Efl.Content is different to each other implementation, setting the content to NULL is not really deleting the obejct, since this is done at those widgets that are actaully using the pan. This is weird and fine in the same way, as the pan is only internal. However, when we are shutting down, we must free the content here. Reviewed-by: Cedric BAIL <> Differential Revision:
3 daysefl_canvas_textblock: multiline enabled by defaultAli Alzyod
Reviewers: segfaultxavi Reviewed By: segfaultxavi Subscribers: segfaultxavi, tasn, bu5hm4n, cedric, #reviewers, #committers Tags: #efl Differential Revision:
3 dayspo: update LINGUAS file to reflect all translations we currently haveStefan Schmidt
This list was quite outdated compared to the po files we have in tree right now. Reviewed-by: Massimo Maiurana <> Differential Revision:
3 dayspo: remove empty ChangeLog file for translationsStefan Schmidt
This was never used. Reviewed-by: Massimo Maiurana <> Differential Revision:
3 dayselm_test: Remove unused variable in test_win_stackXavi Artigas
3 daysevas vg: revise buffer caching method.Hermet Park
for better precise buffer cache key, We make a unique key name combining root node + size + frame index. Now, we can reuse the root node for animation and caching buffers.
3 daysefl_canvas_text: event emittingAli Alzyod
Summary: 1- Emitting changed event when adding text using cursors. 2- remove attribute,changed event since it is not used now 3- Emitting layout,finished event when finish layouting Reviewers: woohyun, cedric, bu5hm4n Reviewed By: cedric Subscribers: bu5hm4n, cedric, #reviewers, #committers Tags: #efl Differential Revision:
3 daysevas vg: fix memory corruption for user entry.Hermet Park
Container must have a set parent after construction. efl_add_ref() with a parent won't work this case because container needs some jobs in overriding parent_set() after proper intialization.
3 daysefl_ui_internal_text_interactive: prevent from freed memory accessingWooHyun Jung
If node_format_remove_pair frees node, then next for loop can lead invalid memory accessing. This patch prevents from that case by keeping the next node before freeing.
3 dayscsharp: This test requires Beta stuffLauro Moura
3 dayseolian_mono: proper parsing of doc notes and paragraphsXavi Artigas
Summary: The documentation tokenizer relies on proper separation of paragraphs, and we were not doing that. This fixes detection of Note:, Warning:, Remark: and TODO: tags. Additionally, we were removing the blank line between the summary and the description, artificially joining them. Test Plan: Everything builds and passes tests, and docs with `Note:` tags are correctly rendered (like `Efl.Loop_Consumer.new_promise`, for example) Reviewers: lauromoura Reviewed By: lauromoura Subscribers: cedric, #reviewers, #committers Tags: #efl Differential Revision:
3 dayscsharp: Implement Deconstruct for structs.João Paulo Taylor Ienczak Zanette
Summary: Usage example: ``` var (x, y) = somePos2D; ``` Not available on Mono environment due to [`mcs` not implementing it]( To keep tests from breaking because of it, a `MONO` preprocessor variable is defined and checked during test compilation. Ref T8489. Reviewers: brunobelo, lauromoura, segfaultxavi Reviewed By: lauromoura Subscribers: cedric, #reviewers, #committers Tags: #efl Maniphest Tasks: T8489 Differential Revision:
3 daysefl_ui: cleanup elm headersYeongjong Lee
since e2980cd9812113fc4a216749eb23d7611b02fd55, `efl.ui.text` doesn't need `elm_general.h`. This partially reverts commit 96be3cd83d3426c5a9eb8d903245c51927567dc6. Reviewed-by: Cedric BAIL <> Differential Revision:
3 dayselementary_test: Fix efl_add_ref to efl_add for window autodelJunsuChoi
Fix this error message ERR<15404>:eo ../src/lib/eo/eo_base_class.c:710 efl_del() Calling efl_del on object Efl.Ui.Win@0x400000a4b774[2]:hidden:children=0:'(null)':'(null)' with no parent is not advised any more. Reviewed-by: Cedric BAIL <> Differential Revision:
4 dayscsharp: Add implicit conversion from tuples to structs.João Paulo Taylor Ienczak Zanette
Summary: Also generates implicit conversion for 1-field structs. Usage examples: ``` // With tuples Point2D p = (1, 2); obj.SetPoint((1, 2)); // With 1-field structs StringWrapper sw = "Must be handled by wrapper."; ``` Due to limitations of MSC compiler, implicit conversions are generated only if struct has 4 fields or less. Ref T8489. Reviewers: brunobelo, cedric, lauromoura, segfaultxavi Reviewed By: lauromoura Subscribers: #reviewers, #committers Tags: #efl Maniphest Tasks: T8489 Differential Revision:
4 daysmono: suppress unused parameter warningXavi Artigas
4 daysmono-docs: Nicer formatting for notesXavi Artigas
This has never been tested because so far EO "Note:" tags are only recognized when they appear at the beginning of a comment block. It turns out the note already includes the "Note:" prefix so we were adding it twice. This patch removes one of the prefixes and used a nicer formatting. Also works for "Warning:", "Remark:" and "TODO:".
4 daysmono-docs: Allow property refs with keysXavi Artigas
When an EO property had multiple values or keys the C# generator didn't generate a wrapping C# property. Therefore property references in the documentation were changed to references to the getter. Now multiple values are handled through tuples so the wrapping properties ARE generated. This patch removes the restriction for multiple values to doc refs can more naturally reference the property instead of the getter method. Properties with keys still reference the getter, since these are not wrapped.
4 daysevas_object_textblock: add support for variation sequencesAli Alzyod
Summary: update font processing to handle variation sequences unicodes to select proper glypg in respect to variation seqences Test Plan: ``` #define EFL_EO_API_SUPPORT 1 #define EFL_BETA_API_SUPPORT 1 #include <Eina.h> #include <Efl.h> #include <Elementary.h> EAPI_MAIN int elm_main(int argc, char **argv) { Evas_Object *win, *textblock; elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED); win = elm_win_util_standard_add("Main", ""); elm_win_autodel_set(win, EINA_TRUE); textblock = evas_object_textblock_add(win); efl_canvas_text_style_set(textblock,NULL,"DEFAULT='font=DejaVuSans font_fallbacks=SamsungColorEmoji color=#000 font_size=20'"); evas_object_textblock_text_markup_set(textblock, "8&#xfe0f;&#x20E3;&#x262a;&#xfe0f;AAA&#x262a;&#xfe0E;1234567&#xfe0f;&#x20E3;"); evas_object_size_hint_weight_set(textblock, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); evas_object_size_hint_align_set(textblock, EVAS_HINT_FILL, EVAS_HINT_FILL); evas_object_show(textblock); evas_object_move(textblock, 0, 0); evas_object_resize(textblock, 320, 320); evas_object_resize(win, 320, 320); evas_object_show(win); elm_run(); return 0; } ELM_MAIN() ``` Reviewers: woohyun, bowonryu, segfaultxavi, cedric, bu5hm4n Reviewed By: woohyun, cedric Subscribers: raster, bu5hm4n, subodh6129, herdsman, segfaultxavi, zmike, cedric, #committers, #reviewers Tags: #efl Differential Revision:
4 dayscsharp: remove Efl.IText.Text from the blacklistYeongjong Lee
Summary: There is no conflict anymore. ref T8093 Test Plan: meson setup -Dbindings=mono,cxx -Dmono-beta=true Reviewers: lauromoura, woohyun Subscribers: cedric, #reviewers, #committers Tags: #efl Maniphest Tasks: T8093 Differential Revision:
4 daysevas_textblock: content fit featureAli Alzyod
Summary: **Content Fit Feature for Evas_Object_Textblock** This Feature is available at **Evas **object level. And **Edje **level (where it is internally use evas functionality) This feature will allow text block to fit its content font size to proper size to fit its area. **Main Properties:** Fit Modes : None=Default, Width, Height, All [Width+Height] Fit Size Range : Contains maximum and minimum font size to be used (and in between). Fit Step Size : Step(Jump) value when trying fonts sizes between Size_Range max and min. Fit Size Array : Other way to resize font, where you explicitly select font sizes to be uses (for example [20, 50, 100] it will try 3 sizes only) Text Fit feature was available in Edje but: 1- It doesn't effected by ellipsis or warping in font style (or do not handle the in right way) 2- Accuracy is not good (specially if you have fix pixel size elements (spaces,tabs,items)) 3- No (Step size, Size Array) available. Test Plan: To check the Feature > elementary_test > fit > textbock fit You can modify all the modes and properties These are two examples, One using Evas other uses Edje **Evas** ``` #include <Elementary.h> enum BUTTON{ BUTTON_MODE = 0, BUTTON_MAX = 1, BUTTON_MIN = 2, BUTTON_STEP = 3, BUTTON_ARRAY = 4, BUTTON_CONTENT = 5, BUTTON_STYLE = 6, BUTTON_ALL = BUTTON_STYLE+1, }; char* BUTTON_STR[BUTTON_ALL] ={ "MODE", "MAX", "MIN", "STEP", "ARRAY", "CONTENT", "STYLE", }; char *contents[] = { "Hello World", "This is Line<br>THis is other Line", "This text contains <font_size=20 color=#F00>SPECIFIC SIZE</font_size> that does not effected by fit mode" }; char *styles[] = { "DEFAULT='font=sans font_size=30 color=#000 wrap=mixed ellipsis=1.0'", "DEFAULT='font=sans font_size=30 color=#000 wrap=mixed'", "DEFAULT='font=sans font_size=30 color=#000 ellipsis=1.0'", "DEFAULT='font=sans font_size=30 color=#000'", }; char *styles_names[] = { "wrap=<color=#F00>mixed</color> ellipsis=<color=#F00>1.0</color>", "wrap=<color=#F00>mixed</color> ellipsis=<color=#F00>NONE</color>", "wrap=<color=#F00>NONE</color> ellipsis=<color=#F00>1.0</color>", "wrap=<color=#F00>NONE</color> ellipsis=<color=#F00>NONE</color>", }; typedef struct _APP { Evas_Object *win, *box, *txtblock,*bg, *boxHor, *boxHor2; Eo *btn[BUTTON_ALL]; Eo *lbl_status; char * str; unsigned int i_contnet, i_style; } APP; APP *app; char * get_fit_status(Eo * textblock); static void _btn_clicked(void *data EINA_UNUSED, Eo *obj, void *eventInfo EINA_UNUSED){ if (obj == app->btn[BUTTON_MODE]) { unsigned int options; evas_textblock_fit_options_get(app->txtblock, &options); if (options == TEXTBLOCK_FIT_MODE_NONE) evas_textblock_fit_options_set(app->txtblock, TEXTBLOCK_FIT_MODE_HEIGHT); else if (options == TEXTBLOCK_FIT_MODE_HEIGHT) evas_textblock_fit_options_set(app->txtblock, TEXTBLOCK_FIT_MODE_WIDTH); else if (options == TEXTBLOCK_FIT_MODE_WIDTH) evas_textblock_fit_options_set(app->txtblock, TEXTBLOCK_FIT_MODE_ALL); else if (options == TEXTBLOCK_FIT_MODE_ALL) evas_textblock_fit_options_set(app->txtblock, TEXTBLOCK_FIT_MODE_NONE); } else if (obj == app->btn[BUTTON_MAX]) { unsigned int min, max; evas_textblock_fit_size_range_get(app->txtblock, &min, &max); max -= 5; evas_textblock_fit_size_range_set(app->txtblock, min, max); } else if (obj == app->btn[BUTTON_MIN]) { unsigned int min, max; evas_textblock_fit_size_range_get(app->txtblock, &min, &max); min += 5; evas_textblock_fit_size_range_set(app->txtblock, min, max); } else if (obj == app->btn[BUTTON_STEP]) { unsigned int step; evas_textblock_fit_step_size_get(app->txtblock, &step); step++; evas_textblock_fit_step_size_set(app->txtblock, step); } else if (obj == app->btn[BUTTON_ARRAY]) { unsigned int font_size[] = {10, 50, 100 ,150}; evas_textblock_fit_size_array_set(app->txtblock,font_size,4); } else if (obj == app->btn[BUTTON_CONTENT]) { app->i_contnet++; if(app->i_contnet>=sizeof(contents)/sizeof(char*)) app->i_contnet=0; evas_object_textblock_text_markup_set(app->txtblock,contents[app->i_contnet]); } else if (obj == app->btn[BUTTON_STYLE]) { app->i_style++; if(app->i_style>=sizeof(styles)/sizeof(char*)) app->i_style=0; Evas_Textblock_Style *style = evas_object_textblock_style_get(app->txtblock); evas_textblock_style_set(style,styles[app->i_style]); } elm_object_text_set(app->lbl_status, get_fit_status(app->txtblock)); } char * get_fit_status(Eo * textblock) { static char status[0xFFF]; unsigned int options,min,max,step,size_array[256]; size_t size_array_len; evas_textblock_fit_options_get(textblock,&options); evas_textblock_fit_size_range_get(textblock,&min,&max); evas_textblock_fit_step_size_get(textblock,&step); evas_textblock_fit_size_array_get(textblock,NULL,&size_array_len,0); if (size_array_len>255) size_array_len = 255; evas_textblock_fit_size_array_get(textblock,size_array,NULL,size_array_len); strcpy(status,"Mode : "); if (options == TEXTBLOCK_FIT_MODE_NONE) strcat(status,"MODE_NONE"); else if (options == TEXTBLOCK_FIT_MODE_HEIGHT) strcat(status,"MODE_HEIGHT"); else if (options == TEXTBLOCK_FIT_MODE_WIDTH) strcat(status,"MODE_WIDTH"); else if (options == TEXTBLOCK_FIT_MODE_ALL) strcat(status,"MODE_ALL"); strcat(status,"<br>"); sprintf(status + strlen(status),"Max : %d<br>",max); sprintf(status + strlen(status),"Min : %d<br>",min); sprintf(status + strlen(status),"Step : %d<br>",step); sprintf(status + strlen(status),"Array : [ "); for (size_t i = 0 ; i < 10 ; i++) { if(i<size_array_len) sprintf(status + strlen(status)," %d,",size_array[i]); } if(10<size_array_len) sprintf(status + strlen(status)," ... "); sprintf(status + strlen(status)," ]"); sprintf(status + strlen(status),"<br>"); sprintf(status + strlen(status),"%s",styles_names[app->i_style]); return status; } int elm_main(int argc, char **argv) { app = calloc(sizeof(APP), 1); elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED); app->win = elm_win_util_standard_add("Main", "App"); elm_win_autodel_set(app->win, EINA_TRUE); app->box = elm_box_add(app->win); app->boxHor = elm_box_add(app->box); app->boxHor2 = elm_box_add(app->box); app->txtblock = evas_object_textblock_add(app->box); app->bg = elm_bg_add(app->box); elm_bg_color_set(app->bg,255,255,255); Evas_Textblock_Style *style = evas_textblock_style_new(); evas_textblock_style_set(style,styles[0]); evas_object_textblock_style_set(app->txtblock,style); evas_object_textblock_text_markup_set(app->txtblock,contents[0]); elm_box_horizontal_set(app->boxHor, EINA_TRUE); elm_box_horizontal_set(app->boxHor2, EINA_TRUE); evas_object_size_hint_weight_set(app->box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); evas_object_size_hint_align_set(app->box, EVAS_HINT_FILL, EVAS_HINT_FILL); evas_object_size_hint_weight_set(app->box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); evas_object_size_hint_align_set(app->box, EVAS_HINT_FILL, EVAS_HINT_FILL); evas_object_show(app->txtblock); evas_object_show(app->bg); evas_object_show(app->box); evas_object_show(app->boxHor); evas_object_show(app->boxHor2); elm_box_pack_end(app->box, app->bg); elm_box_pack_end(app->box, app->boxHor); elm_box_pack_end(app->box, app->boxHor2); elm_object_content_set(app->bg,app->txtblock); elm_win_resize_object_add(app->win, app->box); evas_object_resize(app->win, 320, 480); for(int i = 0 ; i < BUTTON_ALL ; i++) { app->btn[i] = elm_button_add(app->boxHor); evas_object_smart_callback_add(app->btn[i], "clicked", _btn_clicked, NULL); elm_object_text_set(app->btn[i], BUTTON_STR[i]); elm_box_pack_end(app->boxHor, app->btn[i]); evas_object_show(app->btn[i]); } app->lbl_status = elm_label_add(app->boxHor2); elm_object_text_set(app->lbl_status, get_fit_status(app->txtblock)); elm_box_pack_end(app->boxHor2, app->lbl_status); evas_object_show(app->lbl_status); evas_object_size_hint_weight_set(app->txtblock, EVAS_HINT_EXPAND,EVAS_HINT_EXPAND); evas_object_size_hint_align_set(app->txtblock, EVAS_HINT_FILL, EVAS_HINT_FILL); evas_object_size_hint_weight_set(app->bg, EVAS_HINT_EXPAND,EVAS_HINT_EXPAND); evas_object_size_hint_align_set(app->bg, EVAS_HINT_FILL, EVAS_HINT_FILL); evas_object_show(app->win); elm_run(); return 0; } ELM_MAIN() ``` **Edje** ``` // compile: edje_cc source.edc // run: edje_player source.edje collections { styles { style { name: "text_style"; base: "font=sans font_size=30 color=#FFF wrap=mixed ellipsis=1.0"; tag: "br" "\n"; tag: "ps" "ps"; tag: "tab" "\t"; tag: "b" "+ font_weight=Bold"; } } group { name: "my_group"; // must be the same as in source.c parts { part { name: "background"; type: RECT; scale: 1; description { color: 0 0 0 0; rel1.relative: 0.0 0.0; rel2.relative: 1.0 1.0; } } part { name: "text"; type: TEXTBLOCK; scale: 1; entry_mode: NONE; effect: OUTLINE_SHADOW; description { state: "default" 0.0; : "background"; rel1.relative: 0.0 0.0; : "background"; rel2.relative: 1.0 1.0; text { style: "text_style"; align: 0.0 0.0; text: "Hello World This is Me"; fit: 1 1; fit_step: 1; size_range: 30 200; //fit_size_array: 20 40 60 80 100 200; } } } } } } ``` Found Task T5724 relative to this Feature Reviewers: woohyun, bowonryu, cedric, raster Reviewed By: woohyun Subscribers: a.srour, #committers, #reviewers, cedric Tags: #efl Differential Revision:
4 daysc#: Implement IList<T> to Eina.List.Bruno da Silva Belo
Summary: Container can have three configuration over `Own` and `OwnContent`: `Own = true` and `OwnContent = true`; `Own = true` and `OwnContent = false`; `Own = false`and `OwnContent = false; If someone try to instanciate the container with `Own = false` and `OwnContent = true`, a exception raises. There is two Ownerships' behaviours in c#, where `IsReadOnly` is responsible and `IsReadOnly = !OwnContent`: Full Ownership: User can use modify/Add/Remove operations over the container, this is implemented with `OwnContent = true`. No Ownership: User **cannot** use modify/Add/Remove operations, this is implemented with `OwnContent = false`. For the memory, `Own` frees the node, while `OwnContent` frees the data portion. ref T8487 Reviewers: lauromoura, felipealmeida, YOhoho, segfaultxavi, jptiz Reviewed By: lauromoura Subscribers: cedric, #reviewers, #committers Tags: #efl Maniphest Tasks: T8487 Differential Revision:
4 daysefl_ui_popup: do not leak the backwall partMarcel Hollerbach
freeing it in the destructor is not enough. This has to be done at the invalidator stage, otherwise bindings might have a blocking element on the screen for the time the object is not gargabe collected. Reviewed-by: Jaehyun Cho <> Differential Revision:
4 dayselementary_test: Add Canvas.Textblock style testXavi Artigas
This test accepts a style string (as defined in the style_apply method) and continuously applies it to a sample text block. Useful for debugging Efl.Canvas.Textblock styles. Reviewed-by: Cedric BAIL <> Differential Revision:
4 dayseina_rbtree: Clean array intead of flush.Woochanlee
It doesn't have to flush all of the time when it iterating. Reviewed-by: Cedric BAIL <> Differential Revision:
5 daysNEWS: Fix minor typo that I missed during reviewChris Michael
5 daysecore exe - remove useless fd closing before _exit()Carsten Haitzler (Rasterman)
we call _exit() right after closing some fd's - don't bother. they might already be closed anyway and they will all be closed at exit either way...
5 daysNEWS: update file with recent removals form treeStefan Schmidt
Summary: We need to make sure this gets not overridden wwen we start the next release process and auto-generate some parts of this. Reviewers: vtorri, devilhorns Reviewed By: devilhorns Subscribers: cedric, #reviewers, #committers Tags: #efl Differential Revision:
5 dayseeze: remove tizen module support from eeze sensorStefan Schmidt
This has been disabled since the move to meson and unlikely to have built before with autotools either. Tizen never adopted this so we can ease our maintenance burden here. The Eeze sensor API itself is EAPI sadly and can't be removed. We will keep the udev backend (temperature only) and the fake backend for testing for now. Signed-off-by: Stefan Schmidt <> Reviewed-by: Marcel Hollerbach <> Differential Revision:
5 daysefl_ui_text: unit testAli Alzyod
Reviewed-by: Marcel Hollerbach <> Differential Revision:
5 dayselementary: improve data layout for Efl.Ui.PositionManager*.Cedric BAIL
Reviewed-by: SangHyeon Jade Lee <> Reviewed-by: Marcel Hollerbach <> Differential Revision:
5 dayselementary: reduce events triggered by Efl.Ui.PositionManager.Cedric BAIL
Reviewed-by: SangHyeon Jade Lee <> Reviewed-by: Marcel Hollerbach <> Differential Revision:
5 dayselementary: reduce event trigger during object creation stage in ↵Cedric BAIL
Efl.Ui.CollectionView. Once the object are created, the CollectionView will do a few modifiction on them before giving this object to the position manager to deal with. Reducing events should slightly improve performance. Reviewed-by: SangHyeon Jade Lee <> Reviewed-by: Marcel Hollerbach <> Differential Revision:
5 dayselementary: reduce event generation during object creation by ↵Cedric BAIL
Efl.Ui.WidgetFactory. We can not freeze the canvas in all scenario as we are sometime building widget fully asynchronously which prevent holding events on the canvas. Still it is better to do it for the case we can. Reviewed-by: SangHyeon Jade Lee <> Reviewed-by: Marcel Hollerbach <> Differential Revision:
5 dayseo: add a tcase for testing forwardersMarcel Hollerbach
this just adds the newly introduced semantics from cedric.
5 daysevas: do not call Eina_Cow GC during invalidate it is pointless.Cedric BAIL
Reviewed-by: Marcel Hollerbach <> Differential Revision:
5 dayseina: introduce an explicit eina_cow_done with no call to GC.Cedric BAIL
Reviewed-by: Marcel Hollerbach <> Differential Revision:
5 daysevas: avoid unecessary Eina_Cow GC during image destruction.Cedric BAIL
If the stretch zone are NULL to start with, there is no reason to modify them and this should avoid us a trip to the GC. Reviewed-by: Marcel Hollerbach <> Differential Revision:
5 daysevas: reduce useless allocation during destruction of image.Cedric BAIL
Evas image use a GC to reduce duplicated state accross multiple object. Still during shutdown we do clean it up and free it. There is no point to push that down the GC if we are to just free it after. Relying on the fact that dynamic content will avoid triggering the GC altogether as their content change to frequently and is expected to be uniq among other objects, we can avoid unecessary allocation during the destruction by just switching that early on during the destructor. Reviewed-by: Marcel Hollerbach <> Differential Revision:
5 daysevas: efl_gfx_image_stretch_region_set need access to image state before it ↵Cedric BAIL
is freed. Reviewed-by: Marcel Hollerbach <> Differential Revision: