[EGIT] [core/efl] master 01/01: C#: Add error checking for Eina.Success_Flag return type
felipealmeida pushed a commit to branch master. http://git.enlightenment.org/core/efl.git/commit/?id=df0715a9aa27903dd549c2b4516ab2cba0274413 commit df0715a9aa27903dd549c2b4516ab2cba0274413 Author: Felipe Magno de Almeida Date: Tue Feb 11 17:48:26 2020 + C#: Add error checking for Eina.Success_Flag return type When a get and/or set from property is defined to return, explicitly, a Eina.Success_Flag, the mono generator will check the return value and generate an exception if the call fails. Resolves T8383. Reviewed-by: João Paulo Taylor Ienczak Zanette Differential Revision: https://phab.enlightenment.org/D11281 --- .../eolian_mono/eolian/mono/function_definition.hh | 147 + .../eolian_mono/eolian/mono/property_definition.hh | 7 +- src/lib/eina/eina_error.h | 9 ++ src/lib/eo/eina_types.eot | 4 + src/lib/eolian_cxx/grammar/eps.hpp | 8 +- src/tests/efl_mono/Eo.cs | 21 +++ src/tests/efl_mono/dummy_test_object.c | 58 src/tests/efl_mono/dummy_test_object.eo| 58 +++- 8 files changed, 250 insertions(+), 62 deletions(-) diff --git a/src/bin/eolian_mono/eolian/mono/function_definition.hh b/src/bin/eolian_mono/eolian/mono/function_definition.hh index 6aeaadcedb..5fc0e84fbf 100644 --- a/src/bin/eolian_mono/eolian/mono/function_definition.hh +++ b/src/bin/eolian_mono/eolian/mono/function_definition.hh @@ -39,6 +39,7 @@ #include "using_decl.hh" #include "generation_contexts.hh" #include "blacklist.hh" +#include "grammar/eps.hpp" namespace eolian_mono { @@ -369,6 +370,7 @@ struct property_wrapper_definition_generator { using efl::eolian::grammar::attribute_reorder; using efl::eolian::grammar::counter; + using efl::eolian::grammar::eps; using efl::eolian::grammar::attributes::parameter_direction; using efl::eolian::grammar::attributes::parameter_def; @@ -457,6 +459,7 @@ struct property_wrapper_definition_generator bool is_get_public = get_scope == "public "; std::string set_scope = property.setter.is_engaged() ? eolian_mono::function_scope_get(*property.setter) : ""; bool is_set_public = set_scope == "public "; + bool get_has_return_error = false, set_has_return_error = false; // No need to generate this wrapper as no accessor is public. if (is_interface && (!is_get_public && !is_set_public)) @@ -490,6 +493,12 @@ struct property_wrapper_definition_generator set_scope = ""; } + if (property.getter && property.getter->explicit_return_type.c_type == "Eina_Success_Flag") + get_has_return_error = true; + + if (property.setter && property.setter->explicit_return_type.c_type == "Eina_Success_Flag") + set_has_return_error = true; + if (parameters.size() == 1) { if (!as_generator( @@ -510,73 +519,95 @@ struct property_wrapper_definition_generator return false; } - if (property.getter.is_engaged() && is_interface) + if (property.getter) { -if (is_get_public) +auto managed_getter_name = name_helpers::managed_method_name(*property.getter); +if (is_interface) +{ + if (is_get_public) + { +if (!as_generator(scope_tab(2) << scope_tab << set_scope << "get;\n" + ).generate(sink, attributes::unused, context)) + return false; + } +} +else if (get_params == 0) { - if (!as_generator(scope_tab(2) << scope_tab << set_scope << "get;\n" -).generate(sink, attributes::unused, context)) + if (!as_generator + (scope_tab(2) << scope_tab << get_scope + << "get " << "{ return " + managed_getter_name + "(); }\n" + ).generate(sink, attributes::unused, context)) return false; } - } - else if (property.getter.is_engaged() && get_params == 0/*parameters.size() == 1 && property.getter.is_engaged()*/) - { -if (!as_generator -(scope_tab(2) << scope_tab << get_scope - << "get " << "{ return " + name_helpers::managed_method_name(*property.getter) + "(); }\n" -).generate(sink, attributes::unused, context)) - return false; - } - else if (parameters.size() >= 1 && property.getter) - { -if (!as_generator - (scope_tab(2) << scope_tab << get_scope << "get " - << "{\n" - << *attribute_reorder<1, -1, 1> -(scope_tab(4) << type(true) << " _out_" - << argument(false) << " = default(" << type(true) << ");\n" -) - << scope_tab(4) << name_helpers::managed_method_name(*property.getter) -
[EGIT] [core/efl] master 01/01: csharp: Add IntPtr to/from IEnumerable conversion for "accessor" types
felipealmeida pushed a commit to branch master. http://git.enlightenment.org/core/efl.git/commit/?id=eba07471a0cb9baed2204856078f44cc2d31f7d9 commit eba07471a0cb9baed2204856078f44cc2d31f7d9 Author: João Paulo Taylor Ienczak Zanette Date: Tue Feb 18 19:17:56 2020 + csharp: Add IntPtr to/from IEnumerable conversion for "accessor" types Adds a special case for "accessor" complex types in `implicit operator` for structs and `IntPtr`s, in which an IEnumerator must be converted to/from an IntPtr. Reviewed-by: YeongJong Lee Reviewed-by: Felipe Magno de Almeida Differential Revision: https://phab.enlightenment.org/D11210 --- .../eolian_mono/eolian/mono/struct_definition.hh | 15 src/bin/eolian_mono/eolian/mono/struct_fields.hh | 7 src/tests/efl_mono/StructHelpers.cs| 16 ++-- src/tests/efl_mono/Structs.cs | 44 ++ src/tests/efl_mono/dummy_test_object.eo| 1 + 5 files changed, 80 insertions(+), 3 deletions(-) diff --git a/src/bin/eolian_mono/eolian/mono/struct_definition.hh b/src/bin/eolian_mono/eolian/mono/struct_definition.hh index 6f19088d52..038ab1d0fd 100644 --- a/src/bin/eolian_mono/eolian/mono/struct_definition.hh +++ b/src/bin/eolian_mono/eolian/mono/struct_definition.hh @@ -90,6 +90,13 @@ struct to_internal_field_convert_generator .generate(sink, std::make_tuple(field_name, field_name), context)) return false; } + else if ((complex && (complex->outer.base_type == "accessor"))) +{ + if (!as_generator( + indent << scope_tab << scope_tab << "_internal_struct." << string << " = Efl.Eo.Globals.IEnumerableToAccessor(_external_struct." << string << ", " << (field.type.has_own ? "true" : "false") << ");\n") + .generate(sink, std::make_tuple(field_name, field_name), context)) + return false; +} else if ((complex && (complex->outer.base_type == "hash")) || field.type.c_type == "Eina_Binbuf *" || field.type.c_type == "const Eina_Binbuf *") { @@ -172,6 +179,7 @@ struct to_internal_field_convert_generator .generate(sink, std::make_tuple(field_name, field_name), context)) return false; } + return true; } } const to_internal_field_convert {}; @@ -231,6 +239,13 @@ struct to_external_field_convert_generator .generate(sink, std::make_tuple(field.type, field_name), context)) return false; } + else if (complex && complex->outer.base_type == "accessor") +{ + if (!as_generator( + "Efl.Eo.Globals.AccessorTo" << type << "(" << string << ");") + .generate(sink, std::make_tuple(field.type, field_name), context)) + return false; +} else if (field.type.is_ptr && helpers::need_pointer_conversion(regular) && !helpers::need_struct_conversion(regular)) { if (!as_generator( diff --git a/src/bin/eolian_mono/eolian/mono/struct_fields.hh b/src/bin/eolian_mono/eolian/mono/struct_fields.hh index a9f400bbc5..9d861a0b65 100644 --- a/src/bin/eolian_mono/eolian/mono/struct_fields.hh +++ b/src/bin/eolian_mono/eolian/mono/struct_fields.hh @@ -103,6 +103,13 @@ struct field_argument_assignment_generator .generate(sink, std::make_tuple(field_name, field_name), context)) return false; } + else if ((complex && (complex->outer.base_type == "accessor"))) +{ + if (!as_generator( + "this." << string << " = Efl.Eo.Globals.IEnumerableToAccessor(" << string << ", " << (field.type.has_own ? "true" : "false") << ");\n") + .generate(sink, std::make_tuple(field_name, field_name), context)) + return false; +} else if ((complex && (complex->outer.base_type == "hash")) || field.type.c_type == "Eina_Binbuf *" || field.type.c_type == "const Eina_Binbuf *") { diff --git a/src/tests/efl_mono/StructHelpers.cs b/src/tests/efl_mono/StructHelpers.cs index 0ce836a332..b6ceac4bd8 100644 --- a/src/tests/efl_mono/StructHelpers.cs +++ b/src/tests/efl_mono/StructHelpers.cs @@ -151,6 +151,7 @@ internal class StructHelpers Fhash["cc"] = "ccc"; var Fiterator = ((Eina.Array)Farray).GetIterator(); +var Faccessor = ((Eina.Array)Farray).GetAccessor(); var Fany_value = new Eina.Value(Eina.ValueType.Double); Fany_value.Set(-9007199254740992.0); @@ -167,9 +168,18 @@ internal class StructHelpers var Fobj = new Dummy.Numberwrapper(); Fobj.Number = 42; -return new Dummy.StructComplex(farray: Farray, flist: Flist, fhash: Fhash, -fiterator: Fiterator, fanyValue:Fany_value, fanyValueRef: Fany_value_ref, -fbinbuf: Fbinbuf, fslice:Fslice, fobj: Fobj); +return new
[EGIT] [core/efl] master 01/01: eolian-mono: Make Get/Set internal for generated properties
felipealmeida pushed a commit to branch master. http://git.enlightenment.org/core/efl.git/commit/?id=595cb754b3aa280cdbebcb5fa0c51f287099b713 commit 595cb754b3aa280cdbebcb5fa0c51f287099b713 Author: Felipe Magno de Almeida Date: Thu Jan 30 16:49:04 2020 -0300 eolian-mono: Make Get/Set internal for generated properties Make Get and Set methods internal for properties that get the property syntax generated. Reviewed-by: João Paulo Taylor Ienczak Zanette Differential Revision: https://phab.enlightenment.org/D11252 --- .../eolian/mono/async_function_definition.hh | 5 +- src/bin/eolian_mono/eolian/mono/documentation.hh | 174 -- .../eolian_mono/eolian/mono/function_definition.hh | 96 -- src/bin/eolian_mono/eolian/mono/helpers.hh | 106 ++ src/bin/eolian_mono/eolian/mono/klass.hh | 45 ++- src/bin/eolian_mono/eolian/mono/parameter.hh | 33 ++ .../eolian_mono/eolian/mono/property_definition.hh | 383 + src/bindings/cxx/eina_cxx/eina_variant.hh | 239 - src/bindings/mono/efl_mono/GenericModel.cs | 24 +- src/bindings/mono/eo_mono/EoWrapper.cs | 2 +- src/lib/eolian_cxx/grammar/context.hpp | 25 +- src/tests/efl_mono/Eina.cs | 258 +++--- src/tests/efl_mono/EinaTestData.cs | 30 +- src/tests/efl_mono/Eo.cs | 45 +-- src/tests/efl_mono/Events.cs | 8 +- src/tests/efl_mono/Model.cs| 2 +- src/tests/efl_mono/Parts.cs| 8 +- src/tests/efl_mono/StructHelpers.cs| 4 +- 18 files changed, 1200 insertions(+), 287 deletions(-) diff --git a/src/bin/eolian_mono/eolian/mono/async_function_definition.hh b/src/bin/eolian_mono/eolian/mono/async_function_definition.hh index bc0bb6863a..3fddb03780 100644 --- a/src/bin/eolian_mono/eolian/mono/async_function_definition.hh +++ b/src/bin/eolian_mono/eolian/mono/async_function_definition.hh @@ -36,6 +36,7 @@ #include "using_decl.hh" #include "generation_contexts.hh" #include "blacklist.hh" +#include "documentation.hh" namespace eolian_mono { @@ -71,8 +72,10 @@ struct async_function_declaration_generator if(f.scope != attributes::member_scope::scope_public) return true; +auto ref = documentation_generator::function_conversion (f, context); + if (!as_generator( -scope_tab(2) << "/// Async wrapper for .\n" +scope_tab(2) << "/// Async wrapper for .\n" ).generate(sink, attributes::unused, context)) return false; diff --git a/src/bin/eolian_mono/eolian/mono/documentation.hh b/src/bin/eolian_mono/eolian/mono/documentation.hh index d15f91437d..eac5e1a179 100644 --- a/src/bin/eolian_mono/eolian/mono/documentation.hh +++ b/src/bin/eolian_mono/eolian/mono/documentation.hh @@ -23,6 +23,7 @@ #include "name_helpers.hh" #include "generation_contexts.hh" #include "blacklist.hh" +#include "property_definition.hh" #include @@ -76,7 +77,8 @@ struct documentation_generator // The name_tail parameter is the last 4 chars of the original string, which // could be ".set" or ".get" and in this case they are ignored by Eolian. // We want them to know what the documentation intended to reference. - static std::string function_conversion(const ::Eolian_Object *klass, const ::Eolian_Function *function, std::string name_tail) + template + static std::string function_conversion(const ::Eolian_Object *klass, const ::Eolian_Function *function, std::string name_tail, Context const& context) { ::Eolian_Function_Type ftype = ::eolian_function_type_get(function); const char* eo_name = ::eolian_function_name_get(function); @@ -113,26 +115,65 @@ struct documentation_generator name += name_helpers::managed_method_name({function, ftype, NULL, eolian_object_unit_get(EOLIAN_OBJECT(function))}); break; case ::EOLIAN_PROP_SET: - name += ".Set"; - name += name_helpers::property_managed_name(klass_d, eo_name); - break; case ::EOLIAN_PROP_GET: - name += ".Get"; - name += name_helpers::property_managed_name(klass_d, eo_name); - break; case ::EOLIAN_PROPERTY: + { + efl::eina::optional getter_func; + efl::eina::optional setter_func; + auto unit = (const Eolian_Unit*) context_find_tag(context).state; + if (ftype == ::EOLIAN_PROPERTY || ftype == ::EOLIAN_PROP_GET) + getter_func = attributes::function_def{function, ::EOLIAN_PROP_GET, nullptr, unit}; + if (ftype == ::EOLIAN_PROPERTY || ftype == ::EOLIAN_PROP_SET) + setter_func = attributes::function_def{function, ::EOLIAN_PROP_SET, nullptr, unit}; + attributes::property_def property{function, getter_func, setter_func,
[EGIT] [core/efl] master 01/01: Revert "canvas mask: fix incorrect render surface size."
hermet pushed a commit to branch master. http://git.enlightenment.org/core/efl.git/commit/?id=d00dadb79ab1c216ecc0519716ca25a1f92c3632 commit d00dadb79ab1c216ecc0519716ca25a1f92c3632 Author: Hermet Park Date: Tue Feb 18 20:07:08 2020 +0900 Revert "canvas mask: fix incorrect render surface size." This reverts commit e3af5eb27f70edf531d5d8de3e3f2c940536d396. Seems previous is correct. My misunderstanding. --- src/lib/evas/canvas/evas_render.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/evas/canvas/evas_render.c b/src/lib/evas/canvas/evas_render.c index 1cc0232692..aba4103907 100644 --- a/src/lib/evas/canvas/evas_render.c +++ b/src/lib/evas/canvas/evas_render.c @@ -2622,7 +2622,7 @@ evas_render_mask_subrender(Evas_Public_Data *evas, // Unreachable code until we implement support for smart masks evas_render_mapped(evas, mask->object, mask, ctx, output, mdata->surface, - -x, -y, 2, 0, 0, w, h, + -x, -y, 2, 0, 0, evas->output.w, evas->output.h, NULL, level, do_async); } ENFN->context_free(ENC, ctx); --
[EGIT] [core/enlightenment] master 02/02: personal app editor - force size up to be sanely sized for use
raster pushed a commit to branch master. http://git.enlightenment.org/core/enlightenment.git/commit/?id=3a3257e7898d860dcedee8817fc8e0ddc08e3558 commit 3a3257e7898d860dcedee8817fc8e0ddc08e3558 Author: Carsten Haitzler (Rasterman) Date: Tue Feb 18 10:55:45 2020 + personal app editor - force size up to be sanely sized for use --- src/bin/e_desktop_editor.c| 15 ++- .../conf_applications/e_int_config_apps_personal.c| 11 --- 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/src/bin/e_desktop_editor.c b/src/bin/e_desktop_editor.c index d010b2c7e..7a42deb81 100644 --- a/src/bin/e_desktop_editor.c +++ b/src/bin/e_desktop_editor.c @@ -707,6 +707,13 @@ _e_desktop_edit_basic_create_widgets(E_Config_Dialog *cfd EINA_UNUSED, Evas *eva ot = e_widget_table_add(e_win_evas_win_get(evas), 0); + o = evas_object_rectangle_add(evas); + evas_object_color_set(o, 0, 0, 0, 0); + evas_object_pass_events_set(o, EINA_TRUE); + mw = 200 * e_scale; mh = 80 * e_scale; + evas_object_size_hint_min_set(o, mw, mh); + e_widget_table_object_append(ot, o, 1, 4, 1, 1, 1, 1, 1, 1); + o = e_widget_label_add(evas, _("Name")); e_widget_table_object_append(ot, o, 0, 0, 1, 1, 1, 1, 0, 0); @@ -755,10 +762,16 @@ _e_desktop_edit_basic_create_widgets(E_Config_Dialog *cfd EINA_UNUSED, Evas *eva ot = e_widget_table_add(e_win_evas_win_get(evas), 0); + o = evas_object_rectangle_add(evas); + evas_object_color_set(o, 0, 0, 0, 0); + evas_object_pass_events_set(o, EINA_TRUE); + mw = 160 * e_scale; mh = 160 * e_scale; + evas_object_size_hint_min_set(o, mw, mh); + e_widget_table_object_append(ot, o, 0, 0, 2, 1, 1, 1, 1, 1); + editor->img_widget = e_widget_button_add (evas, "", NULL, _e_desktop_editor_cb_icon_select, cfdata, editor); _e_desktop_editor_icon_update(cfdata); - e_widget_size_min_set(editor->img_widget, 192, 192); e_widget_table_object_append(ot, editor->img_widget, 0, 0, 2, 1, 1, 1, 1, 1); diff --git a/src/modules/conf_applications/e_int_config_apps_personal.c b/src/modules/conf_applications/e_int_config_apps_personal.c index 84b854c0c..30cda9525 100644 --- a/src/modules/conf_applications/e_int_config_apps_personal.c +++ b/src/modules/conf_applications/e_int_config_apps_personal.c @@ -74,15 +74,20 @@ _basic_create(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata) Evas_Coord mw, mh; e_dialog_resizable_set(cfd->dia, 1); - + of = e_widget_table_add(e_win_evas_win_get(evas), 0); + ob = evas_object_rectangle_add(evas); + evas_object_color_set(ob, 0, 0, 0, 0); + evas_object_pass_events_set(ob, EINA_TRUE); + mw = 260 * e_scale; mh = 200 * e_scale; + evas_object_size_hint_min_set(ob, mw, mh); + e_widget_table_object_append(of, ob, 0, 1, 2, 1, 1, 1, 1, 1); + li = e_widget_ilist_add(evas, 24, 24, NULL); cfdata->obj.list = li; e_widget_ilist_multi_select_set(li, EINA_TRUE); e_widget_size_min_get(li, , ); - if (mw < (200 * e_scale)) mw = 200 * e_scale; - if (mh < (160 * e_scale)) mh = 160 * e_scale; e_widget_size_min_set(li, mw, mh); e_widget_on_change_hook_set(li, _widget_list_selection_changed, cfdata); e_widget_table_object_append(of, li, 0, 1, 2, 1, 1, 1, 1, 1); --
[EGIT] [core/enlightenment] master 01/02: e auth - use our memclear and fill it out with modern zeroing methods
raster pushed a commit to branch master. http://git.enlightenment.org/core/enlightenment.git/commit/?id=a3ae1b0ac2db92d869a9f414532cd425ac2e09a7 commit a3ae1b0ac2db92d869a9f414532cd425ac2e09a7 Author: Carsten Haitzler (Rasterman) Date: Tue Feb 18 10:25:23 2020 + e auth - use our memclear and fill it out with modern zeroing methods so memset_s still doesn't get detected (add a check anyway), but there are other alternatives, so detect and use them if found (explicit_bzero, explicit_memset) in addition to the generally "practically works" memset ptr method we had and.. just to be extra safe add an asm memory barrier to this fallback. also.. mlock the passwd memory in lokker (if it doesn't work - don't worry - there is nothing we can do, so we did our best) to avoid this memory gettign swapped etc. --- meson.build | 12 src/bin/e_auth.c| 6 ++ src/bin/e_utils.c | 30 +- src/modules/lokker/lokker.c | 7 +++ 4 files changed, 38 insertions(+), 17 deletions(-) diff --git a/meson.build b/meson.build index 3d53a720c..e62aa3cb2 100644 --- a/meson.build +++ b/meson.build @@ -186,6 +186,18 @@ if cc.has_header('execinfo.h') == true elif cc.has_function('backtrace_symbols_fd', dependencies: 'execinfo') == false execinfo_dep = dependency('execinfo', required: false) endif +if cc.has_function('explicit_bzero') == true + config_h.set('HAVE_EXPLICIT_BZERO' , '1') +endif +if cc.has_function('explicit_memset') == true + config_h.set('HAVE_EXPLICIT_MEMSET' , '1') +endif +if cc.has_function('memset_s') == true + config_h.set('HAVE_MEMSET_S' , '1') +endif +if cc.has_function('mlock') == true + config_h.set('HAVE_MLOCK', '1') +endif if cc.has_header('fnmatch.h') == false error('fnmatch.h not found') diff --git a/src/bin/e_auth.c b/src/bin/e_auth.c index 92670f5d3..3fdb2eec7 100644 --- a/src/bin/e_auth.c +++ b/src/bin/e_auth.c @@ -3,7 +3,7 @@ E_API int e_auth_begin(char *passwd) { - char buf[PATH_MAX], *p; + char buf[PATH_MAX]; Ecore_Exe *exe = NULL; int ret = 0; size_t pwlen; @@ -31,9 +31,7 @@ e_auth_begin(char *passwd) out: if (exe) ecore_exe_free(exe); - /* security - null out passwd string once we are done with it */ - for (p = passwd; *p; p++) *p = 0; - if (passwd[rand() % pwlen]) fprintf(stderr, "ACK!\n"); + e_util_memclear(passwd, pwlen); return ret; } diff --git a/src/bin/e_utils.c b/src/bin/e_utils.c index 8117e22f3..96c067989 100644 --- a/src/bin/e_utils.c +++ b/src/bin/e_utils.c @@ -1458,25 +1458,29 @@ e_util_evas_objects_above_print_smart(Evas_Object *o) } } -/* - * NOTICE: This function should not be used by external modules!!! - * - * This function is just a hack to allow us to "securely" clear sensitive - * info until memset_s() is readily available, or at least we move this hack - * to Eina. - * - * This is going to work until link time optimizations are good enough. - * Hopefully by then, we'll be able to properly use memset_s(). - */ -static void *(* const volatile memset_ptr)(void *, int, size_t) = memset; +#if defined(HAVE_MEMSET_S) +#elif defined(HAVE_EXPLICIT_BZERO) +#elif defined(HAVE_EXPLICIT_MEMSET) +#else +void *(* const volatile __memset_ptr)(void *, int, size_t) = memset; +#endif E_API void e_util_memclear(void *s, size_t n) { - memset_ptr(s, 0, n); + if (n == 0) return; +#if defined(HAVE_MEMSET_S) + memset_s(s, n, 0, n); +#elif defined(HAVE_EXPLICIT_BZERO) + explicit_bzero(s, n); +#elif defined(HAVE_EXPLICIT_MEMSET) + explicit_memset(s, 0, n); +#else + __memset_ptr(s, 0, n); + __asm__ __volatile__("": :"r"(s) : "memory"); +#endif } - E_API Ecore_Exe * e_util_open(const char *exe, void *data) { diff --git a/src/modules/lokker/lokker.c b/src/modules/lokker/lokker.c index aa0e7e482..f52ceae1c 100644 --- a/src/modules/lokker/lokker.c +++ b/src/modules/lokker/lokker.c @@ -1,4 +1,5 @@ #include "e_mod_main.h" +#include #define PASSWD_LEN256 @@ -858,6 +859,9 @@ lokker_lock(void) } edd = E_NEW(Lokker_Data, 1); if (!edd) return EINA_FALSE; +#ifdef HAVE_MLOCK + mlock(edd, sizeof(Lokker_Data)); +#endif E_LIST_FOREACH(e_comp->zones, _lokker_popup_add); total_zone_num = eina_list_count(e_comp->zones); @@ -881,5 +885,8 @@ lokker_unlock(void) E_FREE_LIST(edd->handlers, ecore_event_handler_del); if (edd->move_handler) ecore_event_handler_del(edd->move_handler); +#ifdef HAVE_MLOCK + munlock(edd, sizeof(Lokker_Data)); +#endif E_FREE(edd); } --
[EGIT] [core/efl] master 01/01: canvas mask: fix incorrect render surface size.
hermet pushed a commit to branch master. http://git.enlightenment.org/core/efl.git/commit/?id=e3af5eb27f70edf531d5d8de3e3f2c940536d396 commit e3af5eb27f70edf531d5d8de3e3f2c940536d396 Author: Hermet Park Date: Tue Feb 18 19:09:16 2020 +0900 canvas mask: fix incorrect render surface size. This render context works on a mask surface, Size should be mask's own, not canvas output size. @fix --- src/lib/evas/canvas/evas_render.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/evas/canvas/evas_render.c b/src/lib/evas/canvas/evas_render.c index aba4103907..1cc0232692 100644 --- a/src/lib/evas/canvas/evas_render.c +++ b/src/lib/evas/canvas/evas_render.c @@ -2622,7 +2622,7 @@ evas_render_mask_subrender(Evas_Public_Data *evas, // Unreachable code until we implement support for smart masks evas_render_mapped(evas, mask->object, mask, ctx, output, mdata->surface, - -x, -y, 2, 0, 0, evas->output.w, evas->output.h, + -x, -y, 2, 0, 0, w, h, NULL, level, do_async); } ENFN->context_free(ENC, ctx); --