[EGIT] [core/efl] master 01/01: Win: fix modal feature during window closing
jackdanielz pushed a commit to branch master. http://git.enlightenment.org/core/efl.git/commit/?id=7d127c1d07eae22dddfffa527db2048dd665c12f commit 7d127c1d07eae22dddfffa527db2048dd665c12f Author: Daniel ZaouiDate: Thu Nov 17 07:54:36 2016 +0200 Win: fix modal feature during window closing During window deletion, decreasing modality depends on the window visibility. Because the visibility was set to false before treating the modality, it was never decreased, leading to never have still existing windows being reachable. Now, we check window visibility before it is modified. @fix --- src/lib/elementary/efl_ui_win.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/elementary/efl_ui_win.c b/src/lib/elementary/efl_ui_win.c index 8f83f43..03e385d 100644 --- a/src/lib/elementary/efl_ui_win.c +++ b/src/lib/elementary/efl_ui_win.c @@ -2196,7 +2196,6 @@ _efl_ui_win_hide(Eo *obj, Efl_Ui_Win_Data *sd) } _elm_win_state_eval_queue(); - efl_gfx_visible_set(efl_super(obj, MY_CLASS), EINA_FALSE); if ((sd->modal) && (evas_object_visible_get(obj))) { @@ -2205,6 +2204,7 @@ _efl_ui_win_hide(Eo *obj, Efl_Ui_Win_Data *sd) DECREMENT_MODALITY() } + efl_gfx_visible_set(efl_super(obj, MY_CLASS), EINA_FALSE); TRAP(sd, hide); if (sd->frame_obj) --
[E-devel] FW: FW: FW: FW: FW: FW: Propose a Eina_Path
Well... If you argue only path should be an interface, I don't agree with you. I think path is nothing more than data structure & utility functions. If you say path is not a base data type, matrix, vector, curve and etc should not be in eina. They will harm consistency. I totally agree with raster that they are mostly used for graphics. and Path also. -Original Message- From: "Cedric BAIL"To: "Enlightenment developer list" ; Cc: Sent: 2016-11-17 (목) 02:50:52 Subject: Re: [E-devel] FW: FW: FW: FW: FW: Propose a Eina_Path Hey Hermet, On Tue, Nov 15, 2016 at 10:20 PM, Hermet Park wrote: > Cedric, I got your point. > > If you are worrying the bindings of path, then what about others? Other structure don't need 20 functions to be created and populated. Even matrix, most language come with a math package to do whatever you want with them, the only thing really necessary is to be able to convert those structure back to the C layout that we expect. They are more part of the base data type you find everywhere like list, hash, array and friends. > I haven't planned the current eina structures bindings - vector, matrix, > etc, etc. > > Do we have plans about it? Do we need them in our API ? What API would be useful ? Vector, matrix and rectangle can be treated just as a simple structure with existing math package handling them, only C doesn't really provide that. Path is not the same. Without this 20 API you really won't go far creating your path. We are not talking about manipulating the path, but filling/setting it. As you are pointing out, you plan to use this Path information in more place in our API (Ector, Evas and Elementary), this means exposing it as part of our core API. Either bindings have to manually bind all the useful functions and keep track of them over time, or it is an Eo object and the internal representation doesn't matter to anyone. Which is actually the case. Cedric -- ___ enlightenment-devel mailing list enlightenment-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-devel -- ___ enlightenment-devel mailing list enlightenment-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-devel
Re: [E-devel] FW: FW: FW: FW: FW: Propose a Eina_Path
On Wed, 16 Nov 2016 09:55:54 -0800 Cedric BAILsaid: > On Tue, Nov 15, 2016 at 7:00 PM, Carsten Haitzler > wrote: > > On Tue, 15 Nov 2016 14:59:30 -0800 Cedric BAIL said: > >> On Mon, Nov 14, 2016 at 10:51 PM, Carsten Haitzler > >> wrote: > >> > On Tue, 15 Nov 2016 12:03:14 +0900 (KST) Hermet Park > >> > said: > >> >> As considering further, we'd rather avoid path interface for the > >> >> optimization point. > >> >> > >> >> Current downside of the evas_vg, it needs to copy the path data to the > >> >> ector, since both ector and evas_vg inherit gfx_shape. > >> >> > >> >> But If the path is an independent instance, > >> >> it's possible that evas_vg just pass the path instance to the ector with > >> >> the ref count increase. Plus, ector and evas_vg track the path changes > >> >> flexibly. > >> >> > >> >> Additionally, user just need to set one path data for several vg > >> >> objects if those vg objects may need to have same path information. > >> >> > >> >> So, again, I aim to Eina again. > >> >> > >> >> What do you think? > >> > > >> > it already has rectangles, and "tile buffer" which is really a rectangle > >> > "update region" system which are really just data structures. it has > >> > matrix stuff which frankle is used 90% of the time for gfx. quadtrees > >> > are data structs almost exclusively used for gfx (2d regions/arrays of > >> > stuff). it has vectors. gfx. eina has a lot of "basic gfx related data > >> > types" in it. i don't see another lib as being useful here. another lib > >> > simply adds MORE problems. we have issues already where we have SO > >> > MANY .so's on some systems efl fails because we cant dlopen more libs at > >> > all. ran out of __thread slots. this is not an optimization. it's a real > >> > bug that we cant solve without either: > >> > > >> > 1. telling people to upgrade.patch libc > >> > or > >> > 2. us reducing the number of .so's we have. > >> > > >> > forget optimizing. we need to do this just to stop having things fail > >> > entirely. dont add another lib that then has to be merged anyway. > >> > > >> > now to naming... i dislike eina_path - like many i think of file path > >> > first, not gfx path. if anything maybe call it eina_shape? or > >> > eina_outline or eina_poly? (polygons, beziers - just be rough and call > >> > them polyline/curve segments). > >> > >> As said before, if you want to have the structure defined in Eina as a > >> data structure, maybe, but the entire API, the 20 functions that cover > >> path in efl_gfx_shape.eo, should remain in an eo object due to > >> bindings. It makes absolutely no sense to expose all this operation as > >> just a C API when we are manipulating an object that needs to be > >> accessible with no integration in every language. For once, this is > >> right in Eo as it is a useful API in every binding that has no reason > >> to be manually binded. Which get me back to my proposal, move them to > >> efl_gfx_path.{eo,c} and use add a function to share the array between > >> two instance of efl_gfx_path without any cost (This is something that > >> can stay completely internal and the structure of the internal data > >> doesn't need to be exposed). > > > > if you want to move all the other stuff form eina to efl_gfx - fine. well > > that means duplicating it to keep abi. rects, matrixes, vectors etc. but > > you still have the problem that apis are higher cost with eo so the c costs > > of messing with paths beyond higher level (here is an array of points - > > deal with it" will be there. if all the apis are very high level then this > > cost is not such a bad thing. it depends on the api really. > > Setting path data to efl_gfx_path won't ever be a performance problem > or other use of Eo will seriously be a problem. efl_gfx_path API is > about defining the path, not computing it. Computing it, is what > actually take time and ressource, by a huge factor. The API we are > talking here does line, bezier curve, parse SVG path and so on. There > is nothing there that should ever be costly to "set" compared to > computing the request. The computation will be always internal, as > object in Ector, Evas and Elementary will inherit from efl_gfx_path. that depends how u do it. like if you do: count = path.point_count_get(); p = path.point_get(count - 1); p.x = 10; p.y = 20; path.point_xy_set(count - 1, p.x, p.y); i mean if the api is "get small value, set it, query, etc." then you will have an apit hat is going in and out a lot for small amounts of transaction WORK per in and out. then the in and out costs become high. i didnt look at any api being proposed at this point (the details) other than purpose and name. -- - Codito, ergo sum - "I code, therefore I am" -- The Rasterman (Carsten Haitzler)ras...@rasterman.com
[EGIT] [core/efl] master 01/02: eet: add NULL-check to eet_connection_empty API to avoid segfault
cedric pushed a commit to branch master. http://git.enlightenment.org/core/efl.git/commit/?id=0b6e04d94fc3ff6447b6fbf0fcdbdd8b6958e621 commit 0b6e04d94fc3ff6447b6fbf0fcdbdd8b6958e621 Author: Artem PopovDate: Wed Nov 16 15:30:29 2016 -0800 eet: add NULL-check to eet_connection_empty API to avoid segfault @fix Summary: Only eet_connection_empty hasn't checking on NULL and try to read from field of object. Add NULL-check for connection and return result of empty connection. Reviewers: jpeg, cedric, myoungwoon Subscribers: t.naumenko, NikaWhite Differential Revision: https://phab.enlightenment.org/D4399 Signed-off-by: Cedric BAIL --- src/lib/eet/eet_connection.c | 1 + src/lib/eet/eet_data.c | 1 + 2 files changed, 2 insertions(+) diff --git a/src/lib/eet/eet_connection.c b/src/lib/eet/eet_connection.c index 7945692..735e112 100644 --- a/src/lib/eet/eet_connection.c +++ b/src/lib/eet/eet_connection.c @@ -157,6 +157,7 @@ _eet_connection_raw_send(Eet_Connection *conn, EAPI Eina_Bool eet_connection_empty(Eet_Connection *conn) { + EINA_SAFETY_ON_NULL_RETURN_VAL(conn, EINA_TRUE); return conn->size ? EINA_FALSE : EINA_TRUE; } diff --git a/src/lib/eet/eet_data.c b/src/lib/eet/eet_data.c index cabafc3..d4ba25f 100644 --- a/src/lib/eet/eet_data.c +++ b/src/lib/eet/eet_data.c @@ -5281,6 +5281,7 @@ eet_data_descriptor_encode_cipher(Eet_Data_Descriptor *edd, int size; EINA_SAFETY_ON_NULL_RETURN_VAL(edd, NULL); + EINA_SAFETY_ON_NULL_RETURN_VAL(data_in, NULL); ret = _eet_data_descriptor_encode(NULL, edd, data_in, ); if (cipher_key && ret) --
[EGIT] [core/efl] master 02/02: evas: reduce usage of __thread directive.
cedric pushed a commit to branch master. http://git.enlightenment.org/core/efl.git/commit/?id=53dd596f437ae53b96d746f0a5cf0963642f76ad commit 53dd596f437ae53b96d746f0a5cf0963642f76ad Author: Cedric BAILDate: Wed Nov 16 16:05:56 2016 -0800 evas: reduce usage of __thread directive. Moved rects caching into draw context to avoid the use of __thread slot. Draw context are defined per thread anyway and should be just fine. This doesn't really change the picture regarding glibc problem when to many __thread are needed, but slightly improve the global picture. Also this patch doesn't affect our performance in expedite benchmark as far as I can tell. --- src/lib/evas/common/evas_draw_main.c | 5 src/lib/evas/common/evas_font_draw.c | 24 +++ src/lib/evas/common/evas_map_image.c | 48 +- src/lib/evas/common/evas_rectangle_main.c | 24 +++ src/lib/evas/common/evas_scale_main.c | 24 +++ src/lib/evas/include/evas_common_private.h | 4 +++ src/lib/evas/include/evas_inline.x | 12 7 files changed, 41 insertions(+), 100 deletions(-) diff --git a/src/lib/evas/common/evas_draw_main.c b/src/lib/evas/common/evas_draw_main.c index 289d6df..b87c473 100644 --- a/src/lib/evas/common/evas_draw_main.c +++ b/src/lib/evas/common/evas_draw_main.c @@ -122,6 +122,10 @@ evas_common_draw_context_dup(RGBA_Draw_Context *dc) pixman_image_ref(dc2->col.pixman_color_image); #endif #endif + + dc2->cache.rects = NULL; + dc2->cache.used = 0; + return dc2; } @@ -141,6 +145,7 @@ evas_common_draw_context_free(RGBA_Draw_Context *dc) #endif evas_common_draw_context_apply_clean_cutouts(>cutout); + evas_common_draw_context_cutouts_real_free(dc->cache.rects); free(dc); } diff --git a/src/lib/evas/common/evas_font_draw.c b/src/lib/evas/common/evas_font_draw.c index 79c8900..b4b0a99 100644 --- a/src/lib/evas/common/evas_font_draw.c +++ b/src/lib/evas/common/evas_font_draw.c @@ -348,12 +348,6 @@ error: EAPI Eina_Bool evas_common_font_draw_cb(RGBA_Image *dst, RGBA_Draw_Context *dc, int x, int y, Evas_Glyph_Array *glyphs, Evas_Common_Font_Draw_Cb cb) { -#ifdef HAVE_THREAD_SPECIFIER - static __thread int rects_used = 0; - static __thread Cutout_Rects *rects = NULL; -#else - Cutout_Rects *rects = NULL; -#endif int ext_x, ext_y, ext_w, ext_h; int im_w, im_h; RGBA_Gfx_Func func; @@ -408,26 +402,16 @@ evas_common_font_draw_cb(RGBA_Image *dst, RGBA_Draw_Context *dc, int x, int y, E /* our clip is 0 size.. abort */ if ((dc->clip.w > 0) && (dc->clip.h > 0)) { - rects = evas_common_draw_context_apply_cutouts(dc, rects); - for (i = 0; i < rects->active; ++i) + dc->cache.rects = evas_common_draw_context_apply_cutouts(dc, dc->cache.rects); + for (i = 0; i < dc->cache.rects->active; ++i) { - r = rects->rects + i; + r = dc->cache.rects->rects + i; evas_common_draw_context_set_clip(dc, r->x, r->y, r->w, r->h); ret |= cb(dst, dc, x, y, glyphs, func, r->x, r->y, r->w, r->h, im_w, im_h); } -#ifdef HAVE_THREAD_SPECIFIER - rects_used++; - if (rects_used >= 4096) - { - evas_common_draw_context_cutouts_real_free(rects); - rects = NULL; - rects_used = 0; - } -#else - evas_common_draw_context_cutouts_real_free(rects); -#endif + evas_common_draw_context_cache_update(dc); } dc->clip.use = c; dc->clip.x = cx; dc->clip.y = cy; dc->clip.w = cw; dc->clip.h = ch; diff --git a/src/lib/evas/common/evas_map_image.c b/src/lib/evas/common/evas_map_image.c index 2a48b20..339db5a 100644 --- a/src/lib/evas/common/evas_map_image.c +++ b/src/lib/evas/common/evas_map_image.c @@ -752,12 +752,6 @@ evas_common_map_rgba_cb(RGBA_Image *src, RGBA_Image *dst, int smooth, int level, Evas_Common_Map_RGBA_Cb cb) { -#ifdef HAVE_THREAD_SPECIFIER - static __thread int rects_used = 0; - static __thread Cutout_Rects *rects = NULL; -#else - Cutout_Rects *rects = NULL; -#endif Cutout_Rect *r; int c, cx, cy, cw, ch; int i; @@ -789,24 +783,14 @@ evas_common_map_rgba_cb(RGBA_Image *src, RGBA_Image *dst, dc->clip.use = c; dc->clip.x = cx; dc->clip.y = cy; dc->clip.w = cw; dc->clip.h = ch; return; } - rects = evas_common_draw_context_apply_cutouts(dc, rects); - for (i = 0; i < rects->active; ++i) + dc->cache.rects = evas_common_draw_context_apply_cutouts(dc, dc->cache.rects); + for (i = 0; i < dc->cache.rects->active; ++i) { -r = rects->rects + i; +r =
[EGIT] [core/efl] master 01/03: evas/gl: Added support for stencil buffer creation while creating gl Surface.
cedric pushed a commit to branch master. http://git.enlightenment.org/core/efl.git/commit/?id=16cb5f7af90ea8a47261d0ae48fbbaa4ad2a847f commit 16cb5f7af90ea8a47261d0ae48fbbaa4ad2a847f Author: Subhransu MohantyDate: Wed Nov 16 13:14:48 2016 -0800 evas/gl: Added support for stencil buffer creation while creating gl Surface. Reviewers: jpeg, cedric Reviewed By: jpeg, cedric Subscribers: cedric, jpeg Differential Revision: https://phab.enlightenment.org/D4404 Signed-off-by: Cedric BAIL --- .../evas/engines/gl_common/evas_gl_common.h| 6 +++--- .../evas/engines/gl_common/evas_gl_context.c | 2 +- src/modules/evas/engines/gl_common/evas_gl_image.c | 4 ++-- .../evas/engines/gl_common/evas_gl_texture.c | 22 ++ src/modules/evas/engines/gl_generic/evas_engine.c | 6 +++--- 5 files changed, 27 insertions(+), 13 deletions(-) diff --git a/src/modules/evas/engines/gl_common/evas_gl_common.h b/src/modules/evas/engines/gl_common/evas_gl_common.h index d044c16..8b56abe 100644 --- a/src/modules/evas/engines/gl_common/evas_gl_common.h +++ b/src/modules/evas/engines/gl_common/evas_gl_common.h @@ -351,7 +351,7 @@ struct _Evas_Engine_GL_Context struct _Evas_GL_Texture_Pool { Evas_Engine_GL_Context *gc; - GLuint texture, fb; + GLuint texture, fb, stencil; GLuint intformat, format, dataformat; int w, h; int references; @@ -650,7 +650,7 @@ void evas_gl_common_rect_draw(Evas_Engine_GL_Context *gc, int x, in void evas_gl_texture_pool_empty(Evas_GL_Texture_Pool *pt); Evas_GL_Texture *evas_gl_common_texture_new(Evas_Engine_GL_Context *gc, RGBA_Image *im, Eina_Bool disable_atlas); Evas_GL_Texture *evas_gl_common_texture_native_new(Evas_Engine_GL_Context *gc, unsigned int w, unsigned int h, int alpha, Evas_GL_Image *im); -Evas_GL_Texture *evas_gl_common_texture_render_new(Evas_Engine_GL_Context *gc, unsigned int w, unsigned int h, int alpha); +Evas_GL_Texture *evas_gl_common_texture_render_new(Evas_Engine_GL_Context *gc, unsigned int w, unsigned int h, int alpha, int stencil); Evas_GL_Texture *evas_gl_common_texture_dynamic_new(Evas_Engine_GL_Context *gc, Evas_GL_Image *im); void evas_gl_common_texture_update(Evas_GL_Texture *tex, RGBA_Image *im); void evas_gl_common_texture_upload(Evas_GL_Texture *tex, RGBA_Image *im, unsigned int bytes_count); @@ -679,7 +679,7 @@ Evas_GL_Image *evas_gl_common_image_alpha_set(Evas_GL_Image *im, int alpha); void evas_gl_common_image_scale_hint_set(Evas_GL_Image *im, int hint); void evas_gl_common_image_content_hint_set(Evas_GL_Image *im, int hint); void evas_gl_common_image_cache_flush(Evas_Engine_GL_Context *gc); -Evas_GL_Image*evas_gl_common_image_surface_new(Evas_Engine_GL_Context *gc, unsigned int w, unsigned int h, int alpha); +Evas_GL_Image*evas_gl_common_image_surface_new(Evas_Engine_GL_Context *gc, unsigned int w, unsigned int h, int alpha, int stencil); void evas_gl_common_image_dirty(Evas_GL_Image *im, unsigned int x, unsigned int y, unsigned int w, unsigned int h); void evas_gl_common_image_update(Evas_Engine_GL_Context *gc, Evas_GL_Image *im); void evas_gl_common_image_map_draw(Evas_Engine_GL_Context *gc, Evas_GL_Image *im, int npoints, RGBA_Map_Point *p, int smooth, int level); diff --git a/src/modules/evas/engines/gl_common/evas_gl_context.c b/src/modules/evas/engines/gl_common/evas_gl_context.c index df2cad2..fbe3b26 100644 --- a/src/modules/evas/engines/gl_common/evas_gl_context.c +++ b/src/modules/evas/engines/gl_common/evas_gl_context.c @@ -1050,7 +1050,7 @@ evas_gl_common_context_new(void) gc->shared->references++; _evas_gl_common_viewport_set(gc); - gc->def_surface = evas_gl_common_image_surface_new(gc, 1, 1, 1); + gc->def_surface = evas_gl_common_image_surface_new(gc, 1, 1, 1, EINA_FALSE); return gc; diff --git a/src/modules/evas/engines/gl_common/evas_gl_image.c b/src/modules/evas/engines/gl_common/evas_gl_image.c index b863bce..99f75be 100644 --- a/src/modules/evas/engines/gl_common/evas_gl_image.c +++ b/src/modules/evas/engines/gl_common/evas_gl_image.c @@ -722,7 +722,7 @@ evas_gl_common_image_free(Evas_GL_Image *im) } Evas_GL_Image * -evas_gl_common_image_surface_new(Evas_Engine_GL_Context *gc, unsigned int w, unsigned int h, int alpha) +evas_gl_common_image_surface_new(Evas_Engine_GL_Context *gc, unsigned int w, unsigned int h, int alpha, int stencil) { Evas_GL_Image *im; @@ -738,7 +738,7 @@ evas_gl_common_image_surface_new(Evas_Engine_GL_Context *gc, unsigned int w, uns im->alpha = alpha; im->w = w; im->h = h; - im->tex = evas_gl_common_texture_render_new(gc, w, h, alpha); + im->tex = evas_gl_common_texture_render_new(gc,
[EGIT] [core/efl] master 03/03: elmentary_test: test_entry4
cedric pushed a commit to branch master. http://git.enlightenment.org/core/efl.git/commit/?id=417871e19b0a278bf23adc6c3497c2ed3da17836 commit 417871e19b0a278bf23adc6c3497c2ed3da17836 Author: Umesh TanwarDate: Wed Nov 16 13:25:42 2016 -0800 elmentary_test: test_entry4 Summary: If entry is set into layout, entry does not need to be explicitly shown as layout is already show. Though it does not lead any error, but it is not necessary too. @fix Signed-off-by: Umesh Tanwar Test Plan: elementary_test->entry4 Reviewers: singh.amitesh Subscribers: cedric, jpeg Differential Revision: https://phab.enlightenment.org/D4405 Signed-off-by: Cedric BAIL --- src/bin/elementary/test_entry.c | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/bin/elementary/test_entry.c b/src/bin/elementary/test_entry.c index e833cf8..9512978 100644 --- a/src/bin/elementary/test_entry.c +++ b/src/bin/elementary/test_entry.c @@ -1799,7 +1799,6 @@ test_entry4(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_in elm_object_text_set(en, "This is a single line"); elm_entry_single_line_set(en, EINA_TRUE); elm_object_part_content_set(ly, "element1", en); - evas_object_show(en); en = elm_entry_add(win); elm_entry_line_wrap_set(en, ELM_WRAP_NONE); @@ -1812,7 +1811,6 @@ test_entry4(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_in evas_object_size_hint_weight_set(en, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); evas_object_size_hint_align_set(en, EVAS_HINT_FILL, EVAS_HINT_FILL); elm_object_part_content_set(ly, "element2", en); - evas_object_show(en); en = elm_entry_add(win); elm_entry_scrollable_set(en, EINA_TRUE); @@ -1833,7 +1831,6 @@ test_entry4(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_in ); evas_object_smart_callback_add(en, "anchor,clicked", scrolled_anchor_test, en); elm_object_part_content_set(ly, "element3", en); - evas_object_show(en); evas_object_show(win); } --
[EGIT] [core/efl] master 02/03: efl_ui_image: guarantee user's mouse up event callback is called.
cedric pushed a commit to branch master. http://git.enlightenment.org/core/efl.git/commit/?id=e64fa28284b4d00c90af260ea76dc3c9b7b541ec commit e64fa28284b4d00c90af260ea76dc3c9b7b541ec Author: Jaehyun ChoDate: Wed Nov 16 13:22:44 2016 -0800 efl_ui_image: guarantee user's mouse up event callback is called. Summary: Without propagating event by hit_rect, user's mouse up event callback may not be called if image file is replaced in user's mouse down event callback. Test Plan: 1. Register mouse up event callback for elm_image by calling evas_object_event_callback_add() with EVAS_CALLBACK_MOUSE_UP. 2. Register mouse down event callback for elm_image by calling evas_object_event_callback_add() with EVAS_CALLBACK_MOUSE_DOWN. 3. Replace image file of elm_image by calling elm_image_file_set() in mouse down event callback. 4. Mouse down on elm_image. 5. Mouse up on elm_image. 6. Since image file object is newly created in mouse down event callback, mouse up event is not triggered for the newly created image file object. As a result, mouse up event is not propagated to elm_image and user's mouse up callback for elm_image is not called. Reviewers: cedric, woohyun, eunue, jpeg Reviewed By: jpeg Subscribers: jpeg Differential Revision: https://phab.enlightenment.org/D4401 Signed-off-by: Cedric BAIL --- src/lib/elementary/efl_ui_image.c | 1 - 1 file changed, 1 deletion(-) diff --git a/src/lib/elementary/efl_ui_image.c b/src/lib/elementary/efl_ui_image.c index 409c4dd..f874020 100644 --- a/src/lib/elementary/efl_ui_image.c +++ b/src/lib/elementary/efl_ui_image.c @@ -520,7 +520,6 @@ _efl_ui_image_efl_canvas_group_group_add(Eo *obj, Efl_Ui_Image_Data *priv) priv->hit_rect = evas_object_rectangle_add(evas_object_evas_get(obj)); evas_object_smart_member_add(priv->hit_rect, obj); elm_widget_sub_object_add(obj, priv->hit_rect); - evas_object_propagate_events_set(priv->hit_rect, EINA_FALSE); evas_object_color_set(priv->hit_rect, 0, 0, 0, 0); evas_object_show(priv->hit_rect); --
[EGIT] [core/efl] master 01/01: ecore_drm2: Make sure something's on screen after dpms wake
derekf pushed a commit to branch master. http://git.enlightenment.org/core/efl.git/commit/?id=168a127c8ccb209a60481ff95e44f9b5464fa890 commit 168a127c8ccb209a60481ff95e44f9b5464fa890 Author: Derek ForemanDate: Wed Nov 16 15:05:40 2016 -0600 ecore_drm2: Make sure something's on screen after dpms wake Flip to the previous buffer on dpms wake to make sure we show something --- src/lib/ecore_drm2/ecore_drm2_outputs.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/lib/ecore_drm2/ecore_drm2_outputs.c b/src/lib/ecore_drm2/ecore_drm2_outputs.c index b39c99f..3e97077 100644 --- a/src/lib/ecore_drm2/ecore_drm2_outputs.c +++ b/src/lib/ecore_drm2/ecore_drm2_outputs.c @@ -1028,6 +1028,9 @@ ecore_drm2_output_dpms_set(Ecore_Drm2_Output *output, int level) #endif sym_drmModeConnectorSetProperty(output->fd, output->conn_id, output->dpms->prop_id, level); + + if (level == 0) /* DPMS on */ + ecore_drm2_fb_flip(NULL, output); } EAPI char * --
[EGIT] [core/efl] master 02/02: ecore_evas_drm: Stop errant page from flip handler
derekf pushed a commit to branch master. http://git.enlightenment.org/core/efl.git/commit/?id=24608d995084eb0f15dcb872c309dae235ad3069 commit 24608d995084eb0f15dcb872c309dae235ad3069 Author: Derek ForemanDate: Wed Nov 16 14:26:18 2016 -0600 ecore_evas_drm: Stop errant page from flip handler This was required due to bugs elsewhere, and could potentially cause stutters in display. Now that we don't need it we're better off without. --- src/modules/ecore_evas/engines/drm/ecore_evas_drm.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/modules/ecore_evas/engines/drm/ecore_evas_drm.c b/src/modules/ecore_evas/engines/drm/ecore_evas_drm.c index e86c4a3..5115b7d 100644 --- a/src/modules/ecore_evas/engines/drm/ecore_evas_drm.c +++ b/src/modules/ecore_evas/engines/drm/ecore_evas_drm.c @@ -658,8 +658,6 @@ _cb_pageflip(int fd EINA_UNUSED, unsigned int frame EINA_UNUSED, unsigned int se double t = (double)sec + ((double)usec / 100); ecore_evas_animator_tick(ee, NULL, t); -edata->pending = EINA_TRUE; -ecore_drm2_fb_flip(NULL, edata->output); } else if (ret) { --
[EGIT] [core/efl] master 01/02: ecore_evas_drm: Don't do a flip if we know a frame is coming
derekf pushed a commit to branch master. http://git.enlightenment.org/core/efl.git/commit/?id=8611aa83bc9c17932362ce142b7534bf50461d2c commit 8611aa83bc9c17932362ce142b7534bf50461d2c Author: Derek ForemanDate: Wed Nov 16 14:23:19 2016 -0600 ecore_evas_drm: Don't do a flip if we know a frame is coming If the async renderer is running then something's going to trigger a pageflip naturally, and if we do one now we'll block it. --- src/modules/ecore_evas/engines/drm/ecore_evas_drm.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/modules/ecore_evas/engines/drm/ecore_evas_drm.c b/src/modules/ecore_evas/engines/drm/ecore_evas_drm.c index 5e34d13..e86c4a3 100644 --- a/src/modules/ecore_evas/engines/drm/ecore_evas_drm.c +++ b/src/modules/ecore_evas/engines/drm/ecore_evas_drm.c @@ -686,7 +686,7 @@ _drm_animator_register(Ecore_Evas *ee) edata = ee->engine.data; edata->ticking = EINA_TRUE; - if (!edata->pending) ecore_drm2_fb_flip(NULL, edata->output); + if (!edata->pending && !ee->in_async_render) ecore_drm2_fb_flip(NULL, edata->output); edata->pending = EINA_TRUE; } --
[EGIT] [core/efl] master 01/01: Ecore Wayland: Remove ECORE_WL2_SEAT_CAPABILITIES_NO_SEAT.
bdilly pushed a commit to branch master. http://git.enlightenment.org/core/efl.git/commit/?id=9f8e2e0d9c9b4150cce2fc9bfb825d4f49ba7840 commit 9f8e2e0d9c9b4150cce2fc9bfb825d4f49ba7840 Author: Guilherme IscaroDate: Wed Nov 16 17:04:02 2016 -0200 Ecore Wayland: Remove ECORE_WL2_SEAT_CAPABILITIES_NO_SEAT. Summary: It's not possible to have an Ecore_Wl2_Input without a seat. Ecore Evas Wayland: Remove seat existence check. At this point every seat advertised is considered new, therefore it will not be in the devices list. Reviewers: barbieri, jpeg, cedric, bdilly Reviewed By: bdilly Subscribers: cedric, jpeg Differential Revision: https://phab.enlightenment.org/D4408 --- src/lib/ecore_wl2/Ecore_Wl2.h | 9 +++--- src/lib/ecore_wl2/ecore_wl2_input.c| 4 +-- .../engines/wayland/ecore_evas_wayland_common.c| 36 -- 3 files changed, 11 insertions(+), 38 deletions(-) diff --git a/src/lib/ecore_wl2/Ecore_Wl2.h b/src/lib/ecore_wl2/Ecore_Wl2.h index 2d3cc16..9dcae3a 100644 --- a/src/lib/ecore_wl2/Ecore_Wl2.h +++ b/src/lib/ecore_wl2/Ecore_Wl2.h @@ -56,11 +56,10 @@ typedef enum typedef enum { - ECORE_WL2_SEAT_CAPABILITIES_NO_SEAT = 0, - ECORE_WL2_SEAT_CAPABILITIES_NONE = 1, - ECORE_WL2_SEAT_CAPABILITIES_POINTER = 2, - ECORE_WL2_SEAT_CAPABILITIES_KEYBOARD = 4, - ECORE_WL2_SEAT_CAPABILITIES_TOUCH = 8 + ECORE_WL2_SEAT_CAPABILITIES_NONE = 0, + ECORE_WL2_SEAT_CAPABILITIES_POINTER = 1, + ECORE_WL2_SEAT_CAPABILITIES_KEYBOARD = 2, + ECORE_WL2_SEAT_CAPABILITIES_TOUCH = 4 } Ecore_Wl2_Seat_Capabilities; struct _Ecore_Wl2_Event_Connection diff --git a/src/lib/ecore_wl2/ecore_wl2_input.c b/src/lib/ecore_wl2/ecore_wl2_input.c index c7829f8..3df8f46 100644 --- a/src/lib/ecore_wl2/ecore_wl2_input.c +++ b/src/lib/ecore_wl2/ecore_wl2_input.c @@ -1589,10 +1589,8 @@ ecore_wl2_input_seat_capabilities_get(Ecore_Wl2_Input *input) Ecore_Wl2_Seat_Capabilities cap = ECORE_WL2_SEAT_CAPABILITIES_NONE; - EINA_SAFETY_ON_NULL_RETURN_VAL(input, ECORE_WL2_SEAT_CAPABILITIES_NO_SEAT); + EINA_SAFETY_ON_NULL_RETURN_VAL(input, cap); - if (!input->wl.seat) - return ECORE_WL2_SEAT_CAPABILITIES_NO_SEAT; if (input->wl.keyboard) cap |= ECORE_WL2_SEAT_CAPABILITIES_KEYBOARD; if (input->wl.pointer) diff --git a/src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_common.c b/src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_common.c index 9184c6c..2053c21 100644 --- a/src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_common.c +++ b/src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_common.c @@ -518,17 +518,18 @@ _ecore_evas_wl_common_device_event_add(int event_type, Ecore_Wl2_Device_Type dev static EE_Wl_Device * _ecore_evas_wl_common_seat_add(Ecore_Evas *ee, - const char *seat_name, unsigned int id) { Ecore_Evas_Engine_Wl_Data *wdata; EE_Wl_Device *device; Evas_Device *dev; + char buf[32]; device = calloc(1, sizeof(EE_Wl_Device)); EINA_SAFETY_ON_NULL_RETURN_VAL(device, NULL); - dev = evas_device_add_full(ee->evas, seat_name, "Wayland seat", + snprintf(buf, sizeof(buf), "seat-%u", id); + dev = evas_device_add_full(ee->evas, buf, "Wayland seat", NULL, NULL, EVAS_DEVICE_CLASS_SEAT, EVAS_DEVICE_SUBCLASS_NONE); @@ -555,37 +556,17 @@ _ecore_evas_wl_common_cb_global_added(void *d EINA_UNUSED, int t EINA_UNUSED, vo Ecore_Wl2_Event_Global *ev = event; Ecore_Evas *ee; Eina_List *l; - char buf[32]; if ((!ev->interface) || (strcmp(ev->interface, "wl_seat"))) return ECORE_CALLBACK_PASS_ON; - snprintf(buf, sizeof(buf), "seat-%u", ev->id); - EINA_LIST_FOREACH(ee_list, l, ee) { -Eina_List *ll; -EE_Wl_Device *device; -Ecore_Evas_Engine_Wl_Data *wdata = ee->engine.data; -Eina_Bool already_present = EINA_FALSE; - -EINA_LIST_FOREACH(wdata->devices_list, ll, device) - { - if (device->id == ev->id) - { - already_present = EINA_TRUE; - break; - } - } - -if (!already_present && !_ecore_evas_wl_common_seat_add(ee, buf, ev->id)) - goto err_add; +if (!_ecore_evas_wl_common_seat_add(ee, ev->id)) + break; } return ECORE_CALLBACK_PASS_ON; - -err_add: - return ECORE_CALLBACK_PASS_ON; } static void @@ -2043,17 +2024,12 @@ _ecore_wl2_devices_setup(Ecore_Evas *ee, Ecore_Wl2_Display *display) { EE_Wl_Device *device; Ecore_Wl2_Seat_Capabilities cap; -char buf[32]; unsigned int id; id = ecore_wl2_input_seat_id_get(input); cap = ecore_wl2_input_seat_capabilities_get(input); -
[EGIT] [core/efl] master 01/01: evas: make sync and async work in the same way and not trigger empty flush/clear.
cedric pushed a commit to branch master. http://git.enlightenment.org/core/efl.git/commit/?id=55ab71bd67429114557fb62a0ae01378aa098469 commit 55ab71bd67429114557fb62a0ae01378aa098469 Author: Cedric BAILDate: Wed Nov 16 11:30:16 2016 -0800 evas: make sync and async work in the same way and not trigger empty flush/clear. --- src/lib/evas/canvas/evas_render.c | 46 --- 1 file changed, 24 insertions(+), 22 deletions(-) diff --git a/src/lib/evas/canvas/evas_render.c b/src/lib/evas/canvas/evas_render.c index 2628de5..e1542fa 100644 --- a/src/lib/evas/canvas/evas_render.c +++ b/src/lib/evas/canvas/evas_render.c @@ -2852,37 +2852,39 @@ evas_render_updates_internal(Evas *eo_e, } } -if (do_async) - { - eina_evlog("+render_output_async_flush", eo_e, 0.0, NULL); - efl_ref(eo_e); - e->rendering = EINA_TRUE; - _rendering_evases = eina_list_append(_rendering_evases, e); - if (haveup) - _cb_always_call(eo_e, EVAS_CALLBACK_RENDER_FLUSH_PRE, NULL); - evas_thread_queue_flush((Evas_Thread_Command_Cb)done_func, done_data); - eina_evlog("-render_output_async_flush", eo_e, 0.0, NULL); - } -else if (haveup) +if (haveup) { - eina_evlog("+render_output_flush", eo_e, 0.0, NULL); - EINA_LIST_FOREACH(e->video_objects, ll, eo_obj) + if (do_async) { - _evas_object_image_video_overlay_do(eo_obj); + eina_evlog("+render_output_async_flush", eo_e, 0.0, NULL); + efl_ref(eo_e); + e->rendering = EINA_TRUE; + _rendering_evases = eina_list_append(_rendering_evases, e); + _cb_always_call(eo_e, EVAS_CALLBACK_RENDER_FLUSH_PRE, NULL); + evas_thread_queue_flush((Evas_Thread_Command_Cb)done_func, done_data); + eina_evlog("-render_output_async_flush", eo_e, 0.0, NULL); + } + else + { + eina_evlog("+render_output_flush", eo_e, 0.0, NULL); + EINA_LIST_FOREACH(e->video_objects, ll, eo_obj) +{ + _evas_object_image_video_overlay_do(eo_obj); +} + _cb_always_call(eo_e, EVAS_CALLBACK_RENDER_FLUSH_PRE, NULL); + e->engine.func->output_flush(e->engine.data.output, + EVAS_RENDER_MODE_SYNC); + _cb_always_call(eo_e, EVAS_CALLBACK_RENDER_FLUSH_POST, NULL); + eina_evlog("-render_output_flush", eo_e, 0.0, NULL); } - _cb_always_call(eo_e, EVAS_CALLBACK_RENDER_FLUSH_PRE, NULL); - e->engine.func->output_flush(e->engine.data.output, - EVAS_RENDER_MODE_SYNC); - _cb_always_call(eo_e, EVAS_CALLBACK_RENDER_FLUSH_POST, NULL); - eina_evlog("-render_output_flush", eo_e, 0.0, NULL); } -rendering = EINA_TRUE; +rendering = haveup; eina_evlog("-render_surface", eo_e, 0.0, NULL); } eina_evlog("-render_phase6", eo_e, 0.0, NULL); eina_evlog("+render_clear", eo_e, 0.0, NULL); - if (!do_async) + if (!do_async && rendering) { /* clear redraws */ e->engine.func->output_redraws_clear(e->engine.data.output); --
[EGIT] [core/efl] master 01/01: ecore_wl2: ref / unref evas devices on ecore events
bdilly pushed a commit to branch master. http://git.enlightenment.org/core/efl.git/commit/?id=6f66c6e67696faa60e006d7f8ab41d804e799970 commit 6f66c6e67696faa60e006d7f8ab41d804e799970 Author: Bruno DillyDate: Wed Nov 16 17:00:55 2016 -0200 ecore_wl2: ref / unref evas devices on ecore events Summary: It should avoid issues when device is removed after the ecore event addition but before listeners are called (so pointer would be invalid). Reviewers: iscaro Reviewed By: iscaro Subscribers: cedric, jpeg Differential Revision: https://phab.enlightenment.org/D4407 --- src/lib/ecore_wl2/ecore_wl2_input.c | 34 ++ 1 file changed, 22 insertions(+), 12 deletions(-) diff --git a/src/lib/ecore_wl2/ecore_wl2_input.c b/src/lib/ecore_wl2/ecore_wl2_input.c index a17c665..c7829f8 100644 --- a/src/lib/ecore_wl2/ecore_wl2_input.c +++ b/src/lib/ecore_wl2/ecore_wl2_input.c @@ -86,13 +86,21 @@ _ecore_wl2_mouse_dev_get(Ecore_Wl2_Input *input, int window_id) Ecore_Wl2_Input_Devices *devices; devices = _ecore_wl2_devices_get(input, window_id); - if (devices) - return devices->pointer_dev; + if (devices && devices->pointer_dev) + return efl_ref(devices->pointer_dev); return NULL; } static void +_input_event_cb_free(void *data, void *event) +{ + if (data) + efl_unref(data); + free(event); +} + +static void _ecore_wl2_input_mouse_in_send(Ecore_Wl2_Input *input, Ecore_Wl2_Window *window) { Ecore_Event_Mouse_IO *ev; @@ -108,7 +116,7 @@ _ecore_wl2_input_mouse_in_send(Ecore_Wl2_Input *input, Ecore_Wl2_Window *window) ev->modifiers = input->keyboard.modifiers; ev->dev = _ecore_wl2_mouse_dev_get(input, window->id); - ecore_event_add(ECORE_EVENT_MOUSE_IN, ev, NULL, NULL); + ecore_event_add(ECORE_EVENT_MOUSE_IN, ev, _input_event_cb_free, ev->dev); } static void @@ -127,7 +135,7 @@ _ecore_wl2_input_mouse_out_send(Ecore_Wl2_Input *input, Ecore_Wl2_Window *window ev->modifiers = input->keyboard.modifiers; ev->dev = _ecore_wl2_mouse_dev_get(input, window->id); - ecore_event_add(ECORE_EVENT_MOUSE_OUT, ev, NULL, NULL); + ecore_event_add(ECORE_EVENT_MOUSE_OUT, ev, _input_event_cb_free, ev->dev); } static void @@ -166,7 +174,7 @@ _ecore_wl2_input_mouse_move_send(Ecore_Wl2_Input *input, Ecore_Wl2_Window *windo info->sy = input->pointer.sy; } - ecore_event_add(ECORE_EVENT_MOUSE_MOVE, ev, NULL, NULL); + ecore_event_add(ECORE_EVENT_MOUSE_MOVE, ev, _input_event_cb_free, ev->dev); } static void @@ -205,7 +213,7 @@ _ecore_wl2_input_mouse_wheel_send(Ecore_Wl2_Input *input, unsigned int axis, int } ev->dev = _ecore_wl2_mouse_dev_get(input, ev->window); - ecore_event_add(ECORE_EVENT_MOUSE_WHEEL, ev, NULL, NULL); + ecore_event_add(ECORE_EVENT_MOUSE_WHEEL, ev, _input_event_cb_free, ev->dev); } static void @@ -296,7 +304,8 @@ _ecore_wl2_input_mouse_down_send(Ecore_Wl2_Input *input, Ecore_Wl2_Window *windo ev->dev = _ecore_wl2_mouse_dev_get(input, window->id); } - ecore_event_add(ECORE_EVENT_MOUSE_BUTTON_DOWN, ev, NULL, NULL); + ecore_event_add(ECORE_EVENT_MOUSE_BUTTON_DOWN, ev, + _input_event_cb_free, ev->dev); if ((info) && (!info->triple_click)) { @@ -366,7 +375,8 @@ _ecore_wl2_input_mouse_up_send(Ecore_Wl2_Input *input, Ecore_Wl2_Window *window, ev->event_window = window->id; ev->dev = _ecore_wl2_mouse_dev_get(input, window->id); - ecore_event_add(ECORE_EVENT_MOUSE_BUTTON_UP, ev, NULL, NULL); + ecore_event_add(ECORE_EVENT_MOUSE_BUTTON_UP, ev, + _input_event_cb_free, ev->dev); } static void @@ -479,8 +489,8 @@ _ecore_wl2_keyboard_dev_get(Ecore_Wl2_Input *input, int window_id) Ecore_Wl2_Input_Devices *devices; devices = _ecore_wl2_devices_get(input, window_id); - if (devices) - return devices->keyboard_dev; + if (devices && devices->keyboard_dev) + return efl_ref(devices->keyboard_dev); return NULL; } @@ -524,9 +534,9 @@ _ecore_wl2_input_key_send(Ecore_Wl2_Input *input, Ecore_Wl2_Window *window, xkb_ /* DBG("Emitting Key event (%s,%s,%s,%s)\n", ev->keyname, ev->key, ev->compose, ev->string); */ if (state) - ecore_event_add(ECORE_EVENT_KEY_DOWN, ev, NULL, NULL); + ecore_event_add(ECORE_EVENT_KEY_DOWN, ev, _input_event_cb_free, ev->dev); else - ecore_event_add(ECORE_EVENT_KEY_UP, ev, NULL, NULL); + ecore_event_add(ECORE_EVENT_KEY_UP, ev, _input_event_cb_free, ev->dev); } void --
Re: [E-devel] FW: FW: FW: FW: FW: Propose a Eina_Path
On Tue, Nov 15, 2016 at 7:00 PM, Carsten Haitzlerwrote: > On Tue, 15 Nov 2016 14:59:30 -0800 Cedric BAIL said: >> On Mon, Nov 14, 2016 at 10:51 PM, Carsten Haitzler >> wrote: >> > On Tue, 15 Nov 2016 12:03:14 +0900 (KST) Hermet Park >> > said: >> >> As considering further, we'd rather avoid path interface for the >> >> optimization point. >> >> >> >> Current downside of the evas_vg, it needs to copy the path data to the >> >> ector, since both ector and evas_vg inherit gfx_shape. >> >> >> >> But If the path is an independent instance, >> >> it's possible that evas_vg just pass the path instance to the ector with >> >> the ref count increase. Plus, ector and evas_vg track the path changes >> >> flexibly. >> >> >> >> Additionally, user just need to set one path data for several vg objects >> >> if >> >> those vg objects may need to have same path information. >> >> >> >> So, again, I aim to Eina again. >> >> >> >> What do you think? >> > >> > it already has rectangles, and "tile buffer" which is really a rectangle >> > "update region" system which are really just data structures. it has matrix >> > stuff which frankle is used 90% of the time for gfx. quadtrees are data >> > structs almost exclusively used for gfx (2d regions/arrays of stuff). it >> > has vectors. gfx. eina has a lot of "basic gfx related data types" in it. i >> > don't see another lib as being useful here. another lib simply adds MORE >> > problems. we have issues already where we have SO MANY .so's on some >> > systems efl fails because we cant dlopen more libs at all. ran out of >> > __thread slots. this is not an optimization. it's a real bug that we cant >> > solve without either: >> > >> > 1. telling people to upgrade.patch libc >> > or >> > 2. us reducing the number of .so's we have. >> > >> > forget optimizing. we need to do this just to stop having things fail >> > entirely. dont add another lib that then has to be merged anyway. >> > >> > now to naming... i dislike eina_path - like many i think of file path >> > first, >> > not gfx path. if anything maybe call it eina_shape? or eina_outline or >> > eina_poly? (polygons, beziers - just be rough and call them polyline/curve >> > segments). >> >> As said before, if you want to have the structure defined in Eina as a >> data structure, maybe, but the entire API, the 20 functions that cover >> path in efl_gfx_shape.eo, should remain in an eo object due to >> bindings. It makes absolutely no sense to expose all this operation as >> just a C API when we are manipulating an object that needs to be >> accessible with no integration in every language. For once, this is >> right in Eo as it is a useful API in every binding that has no reason >> to be manually binded. Which get me back to my proposal, move them to >> efl_gfx_path.{eo,c} and use add a function to share the array between >> two instance of efl_gfx_path without any cost (This is something that >> can stay completely internal and the structure of the internal data >> doesn't need to be exposed). > > if you want to move all the other stuff form eina to efl_gfx - fine. well that > means duplicating it to keep abi. rects, matrixes, vectors etc. but you still > have the problem that apis are higher cost with eo so the c costs of messing > with paths beyond higher level (here is an array of points - deal with it" > will > be there. if all the apis are very high level then this cost is not such a bad > thing. it depends on the api really. Setting path data to efl_gfx_path won't ever be a performance problem or other use of Eo will seriously be a problem. efl_gfx_path API is about defining the path, not computing it. Computing it, is what actually take time and ressource, by a huge factor. The API we are talking here does line, bezier curve, parse SVG path and so on. There is nothing there that should ever be costly to "set" compared to computing the request. The computation will be always internal, as object in Ector, Evas and Elementary will inherit from efl_gfx_path. -- Cedric BAIL -- ___ enlightenment-devel mailing list enlightenment-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-devel
Re: [E-devel] FW: FW: FW: FW: FW: Propose a Eina_Path
Hey Hermet, On Tue, Nov 15, 2016 at 10:20 PM, Hermet Parkwrote: > Cedric, I got your point. > > If you are worrying the bindings of path, then what about others? Other structure don't need 20 functions to be created and populated. Even matrix, most language come with a math package to do whatever you want with them, the only thing really necessary is to be able to convert those structure back to the C layout that we expect. They are more part of the base data type you find everywhere like list, hash, array and friends. > I haven't planned the current eina structures bindings - vector, matrix, > etc, etc. > > Do we have plans about it? Do we need them in our API ? What API would be useful ? Vector, matrix and rectangle can be treated just as a simple structure with existing math package handling them, only C doesn't really provide that. Path is not the same. Without this 20 API you really won't go far creating your path. We are not talking about manipulating the path, but filling/setting it. As you are pointing out, you plan to use this Path information in more place in our API (Ector, Evas and Elementary), this means exposing it as part of our core API. Either bindings have to manually bind all the useful functions and keep track of them over time, or it is an Eo object and the internal representation doesn't matter to anyone. Which is actually the case. Cedric -- ___ enlightenment-devel mailing list enlightenment-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-devel
[EGIT] [core/enlightenment] master 01/01: fix missing definition of DRM_FORMAT_XRGB8888
devilhorns pushed a commit to branch master. http://git.enlightenment.org/core/enlightenment.git/commit/?id=0a696f5fa3c38ba9a41083ff686a80268d6b4ccd commit 0a696f5fa3c38ba9a41083ff686a80268d6b4ccd Author: Chris MichaelDate: Wed Nov 16 09:15:12 2016 -0500 fix missing definition of DRM_FORMAT_XRGB As we do not compile-time link with libdrm inside Ecore_Drm2 anymore, we need to include relivant bits of drm_fourcc header here in order to define DRM_FORMAT_XRGB else we fail to compile Enlightenment Wayland Signed-off-by: Chris Michael --- src/bin/e_alert_main.c | 54 -- 1 file changed, 43 insertions(+), 11 deletions(-) diff --git a/src/bin/e_alert_main.c b/src/bin/e_alert_main.c index 7317896..3cfcd6c 100644 --- a/src/bin/e_alert_main.c +++ b/src/bin/e_alert_main.c @@ -1,7 +1,7 @@ #include "config.h" #ifdef HAVE_DRM2 -# define EFL_BETA_API_SUPPORT +# define EFL_BETA_API_SUPPORT #endif #include @@ -20,17 +20,49 @@ #include #include -# ifdef HAVE_WL_DRM -# include -# ifdef HAVE_DRM2 -# include -# include -# else -# include -# endif -# include -# include +#ifdef HAVE_WL_DRM +# include +# ifdef HAVE_DRM2 +# include +# else +# include # endif +# include +# include +#endif + +#ifdef HAVE_WL_DRM +# ifdef HAVE_DRM2 +/* DRM_FORMAT_XRGB and fourcc_code borrowed from + * + * Copyright 2011 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * VA LINUX SYSTEMS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR + * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + */ +# define fourcc_code(a, b, c, d) \ + ((uint32_t)(a) | ((uint32_t)(b) << 8) | \ + ((uint32_t)(c) << 16) | ((uint32_t)(d) << 24)) +# define DRM_FORMAT_XRGB \ + fourcc_code('X', 'R', '2', '4') /* [31:0] x:R:G:B 8:8:8:8 little endian */ +# endif +#endif #define WINDOW_WIDTH 320 #define WINDOW_HEIGHT 240 --
[EGIT] [core/efl] master 01/02: evas: Try to fix bad clipping of non-frame objects
jpeg pushed a commit to branch master. http://git.enlightenment.org/core/efl.git/commit/?id=ac5ca9281c5ea374fb6d77c867cf478f29e70a83 commit ac5ca9281c5ea374fb6d77c867cf478f29e70a83 Author: Jean-Philippe AndreDate: Mon Nov 7 20:36:59 2016 +0900 evas: Try to fix bad clipping of non-frame objects Test cases (in WL or X with client-side decorations on): 1. elementary_test -to Animation Resize the window to a small size (eg, 100x100) and observe the balls overflowing outside the window content part. This tests unclipped normal objects. 2. elementary_test "Window Plug" (requires also Window Socket) Drag the handles outside the window, observe overflow in the framespace area. This tests mapped images ('can_map'). 3. elementary_test -to "Gesture Layer" Drag a photo around. This tests non-image mapped objects. NOTE: This test is badly broken! This patch fixes both of those issues. I'm not sure what I'm breaking, though. --- src/lib/evas/canvas/evas_render.c | 29 ++--- 1 file changed, 14 insertions(+), 15 deletions(-) diff --git a/src/lib/evas/canvas/evas_render.c b/src/lib/evas/canvas/evas_render.c index 9fadd92..d75a84f 100644 --- a/src/lib/evas/canvas/evas_render.c +++ b/src/lib/evas/canvas/evas_render.c @@ -185,18 +185,14 @@ _accumulate_time(double before, Eina_Bool async) static int _render_busy = 0; static inline Eina_Bool -_is_obj_in_framespace(Evas_Object_Protected_Data *obj, Evas_Public_Data *evas) +_is_obj_in_framespace(Evas_Object_Protected_Data *obj, Evas_Public_Data *evas EINA_UNUSED) { - if (obj->is_frame) return EINA_TRUE; - - return RECTS_INTERSECT(0, -evas->framespace.y, - evas->viewport.w, evas->viewport.h, - obj->cur->geometry.x, obj->cur->geometry.y, - obj->cur->geometry.w, obj->cur->geometry.h); + return obj->is_frame; } static inline void -_evas_render_framespace_context_clip_clip(Evas_Public_Data *evas, void *ctx) +_evas_render_framespace_context_clip_clip(Evas_Public_Data *evas, void *ctx, + int ox, int oy) { int fx, fy, fw, fh; @@ -205,7 +201,7 @@ _evas_render_framespace_context_clip_clip(Evas_Public_Data *evas, void *ctx) fw = evas->viewport.w - evas->framespace.w; fh = evas->viewport.h - evas->framespace.h; - ENFN->context_clip_clip(ENDT, ctx, fx, fy, fw, fh); + ENFN->context_clip_clip(ENDT, ctx, fx + ox, fy + oy, fw, fh); } static void @@ -1663,8 +1659,6 @@ evas_render_mapped(Evas_Public_Data *evas, Evas_Object *eo_obj, } } ENFN->context_clip_clip(ENDT, ctx, ecx, ecy, ecw, ech); -if (!_is_obj_in_framespace(obj, evas)) - _evas_render_framespace_context_clip_clip(evas, ctx); if (obj->cur->cache.clip.visible || !proxy_src_clip) { @@ -1857,7 +1851,10 @@ evas_render_mapped(Evas_Public_Data *evas, Evas_Object *eo_obj, clipper->cur->cache.clip.h); ENFN->context_clip_set(ENDT, ctx, x + off_x, y + off_y, w, h); if (!_is_obj_in_framespace(obj, evas)) - _evas_render_framespace_context_clip_clip(evas, ctx); + { +_evas_render_framespace_context_clip_clip + (evas, ctx, off_x - evas->framespace.x, off_y - evas->framespace.y); + } if (proxy_src_clip) ENFN->context_clip_clip(ENDT, ctx, ecx, ecy, ecw, ech); @@ -1871,6 +1868,11 @@ evas_render_mapped(Evas_Public_Data *evas, Evas_Object *eo_obj, } } } + else if (!_is_obj_in_framespace(obj, evas)) + { + _evas_render_framespace_context_clip_clip +(evas, ctx, off_x - evas->framespace.x, off_y - evas->framespace.y); + } #ifdef REND_DBG int _c, _cx, _cy, _cw, _ch; @@ -2444,9 +2446,6 @@ evas_render_updates_internal_loop(Evas *eo_e, Evas_Public_Data *e, e->engine.func->context_clip_set(e->engine.data.output, context, x, y, w, h); - - if (!_is_obj_in_framespace(obj, e)) -_evas_render_framespace_context_clip_clip(e, context); /* Clipper masks */ if (_evas_render_object_is_mask(obj->cur->clipper)) --
[EGIT] [core/efl] master 02/02: elm/evas: Fix disappearance of window icons with CSD
jpeg pushed a commit to branch master. http://git.enlightenment.org/core/efl.git/commit/?id=f50b0fed133b63887e43686bf3410bec422c5025 commit f50b0fed133b63887e43686bf3410bec422c5025 Author: Jean-Philippe AndreDate: Wed Nov 16 18:09:37 2016 +0900 elm/evas: Fix disappearance of window icons with CSD After a few patches trying to fix clipping of frame or non-frame objects the icon finally ended up invisible. Even if the elm_icon was marked as is_frame, its internal evas object image would not have the flag set, thus it would be clipped out. Solution: Propagate the is_frame flag to all smart children, not only when setting it but also when adding new members. A hack with the API indicates that the frame edje is a very special object that does not propagate the flag. See also: 7ce79be1a1748c32c4d0e58358ce2242902cf89b 0f6c33eff106f7235351dd51ce7835041f548cc1 9c9c8809a7d90a5ab61c2c930c4cdaeb1d8e8c6a ac5ca9281c5ea374fb6d77c867cf478f29e70a83 --- src/lib/elementary/efl_ui_win.c | 18 +- src/lib/evas/canvas/efl_canvas_object.eo | 18 +++--- src/lib/evas/canvas/evas_object_main.c | 10 ++ src/lib/evas/canvas/evas_object_smart.c | 3 +++ src/lib/evas/canvas/evas_render.c| 19 ++- src/lib/evas/include/evas_private.h | 1 + 6 files changed, 52 insertions(+), 17 deletions(-) diff --git a/src/lib/elementary/efl_ui_win.c b/src/lib/elementary/efl_ui_win.c index 3ad9322..8f83f43 100644 --- a/src/lib/elementary/efl_ui_win.c +++ b/src/lib/elementary/efl_ui_win.c @@ -3926,9 +3926,14 @@ _elm_win_frame_add(Efl_Ui_Win_Data *sd, const char *style) return; } - edje_object_part_swallow(sd->frame_obj, "elm.swallow.client", sd->edje); + /* Small hack: The special value 2 means this is the top frame object. +* We propagate to the children now (the edc group contents), but subsequent +* calls to smart_member_add will not propagate the flag further. Note that +* this little hack will fall apart if edje creates and destroys objects on +* the fly. */ + efl_canvas_object_is_frame_object_set(sd->frame_obj, 2); - evas_object_is_frame_object_set(sd->frame_obj, EINA_TRUE); + edje_object_part_swallow(sd->frame_obj, "elm.swallow.client", sd->edje); if (sd->icon) evas_object_show(sd->icon); @@ -3952,8 +3957,8 @@ _elm_win_frame_add(Efl_Ui_Win_Data *sd, const char *style) } } - edje_object_part_swallow(sd->frame_obj, "elm.swallow.icon", -sd->icon); + edje_object_part_swallow(sd->frame_obj, "elm.swallow.icon", sd->icon); + efl_canvas_object_is_frame_object_set(sd->icon, EINA_TRUE); evas_object_event_callback_add (sd->frame_obj, EVAS_CALLBACK_MOVE, _elm_win_frame_obj_move, sd); @@ -5201,7 +5206,10 @@ _efl_ui_win_icon_object_set(Eo *obj, Efl_Ui_Win_Data *sd, Evas_Object *icon) evas_object_event_callback_add(sd->icon, EVAS_CALLBACK_DEL, _elm_win_on_icon_del, obj); if (sd->frame_obj) - edje_object_part_swallow(sd->frame_obj, "elm.swallow.icon", sd->icon); + { + edje_object_part_swallow(sd->frame_obj, "elm.swallow.icon", sd->icon); + evas_object_is_frame_object_set(sd->icon, EINA_TRUE); + } } #ifdef HAVE_ELEMENTARY_X _elm_win_xwin_update(sd); diff --git a/src/lib/evas/canvas/efl_canvas_object.eo b/src/lib/evas/canvas/efl_canvas_object.eo index 8d2cb41..aeb93e9 100644 --- a/src/lib/evas/canvas/efl_canvas_object.eo +++ b/src/lib/evas/canvas/efl_canvas_object.eo @@ -273,13 +273,17 @@ abstract Efl.Canvas.Object (Efl.Object, Efl.Gfx, Efl.Gfx.Stack, Efl.Animator, return: bool; [[$true if the seat was removed from the focus list or $false otherwise.]] } @property is_frame_object { -[[Property to identify if an object is a frame]] - set { -[[@since 1.2]] - } - get { -[[@since 1.2]] - } + [[If $true the object belongs to the window border decorations. + + This will be $false by default, and should be $false for all objects + created by the application, unless swallowed in some very specific + parts of the window. + + It is very unlikely that an application needs to call this manually, + as the window will handle this feature automatically. + + @since 1.2 + ]] values { is_frame: bool; [[$true if the object is a frame, $false otherwise]] } diff --git a/src/lib/evas/canvas/evas_object_main.c b/src/lib/evas/canvas/evas_object_main.c index c74d01d..46e8266 100644 --- a/src/lib/evas/canvas/evas_object_main.c +++ b/src/lib/evas/canvas/evas_object_main.c @@ -2048,6 +2048,16 @@ _is_frame_flag_set(Evas_Object_Protected_Data *obj, Eina_Bool is_frame) const Eina_Inlist *l;
[EGIT] [core/efl] master 01/02: Ecore Evas Wayland: Create the devices during Ecore_Evas setup.
jpeg pushed a commit to branch master. http://git.enlightenment.org/core/efl.git/commit/?id=9ba11c5cd020b6ec5cb78dfaeda2d4c0472659ab commit 9ba11c5cd020b6ec5cb78dfaeda2d4c0472659ab Author: Guilherme IscaroDate: Mon Nov 14 11:03:56 2016 +0900 Ecore Evas Wayland: Create the devices during Ecore_Evas setup. Summary: When launching an Elementary App using Wayland the elm_config will automatically connect to the Wayland's display server and all events regarding seats are lost, since by the time that Ecore_Evas is created the global events were already dispatched. To fix this problem, everytime an Ecore_Evas is created, the code must check if there are any seat capabilities available, if so, the devices will be created. Reviewers: bdilly, barbieri, cedric, jpeg Subscribers: devilhorns, cedric, jpeg Differential Revision: https://phab.enlightenment.org/D4390 --- src/lib/ecore_wl2/Ecore_Wl2.h | 33 + src/lib/ecore_wl2/ecore_wl2_input.c| 26 src/lib/ecore_wl2/ecore_wl2_window.c | 7 + .../engines/wayland/ecore_evas_wayland_common.c| 143 + 4 files changed, 186 insertions(+), 23 deletions(-) diff --git a/src/lib/ecore_wl2/Ecore_Wl2.h b/src/lib/ecore_wl2/Ecore_Wl2.h index 402206c..2d3cc16 100644 --- a/src/lib/ecore_wl2/Ecore_Wl2.h +++ b/src/lib/ecore_wl2/Ecore_Wl2.h @@ -54,6 +54,15 @@ typedef enum ECORE_WL2_DRAG_ACTION_LAST = 5, } Ecore_Wl2_Drag_Action; +typedef enum +{ + ECORE_WL2_SEAT_CAPABILITIES_NO_SEAT = 0, + ECORE_WL2_SEAT_CAPABILITIES_NONE = 1, + ECORE_WL2_SEAT_CAPABILITIES_POINTER = 2, + ECORE_WL2_SEAT_CAPABILITIES_KEYBOARD = 4, + ECORE_WL2_SEAT_CAPABILITIES_TOUCH = 8 +} Ecore_Wl2_Seat_Capabilities; + struct _Ecore_Wl2_Event_Connection { Ecore_Wl2_Display *display; @@ -440,6 +449,14 @@ EAPI Eina_Iterator *ecore_wl2_display_globals_get(Ecore_Wl2_Display *display); EAPI void ecore_wl2_display_screen_size_get(Ecore_Wl2_Display *display, int *w, int *h); /** + * Get all the Ecore_Wl2_Input from the display. + * @param display The display + * @return A Eina_Iterator of Ecore_Wl2_Input or @c NULL on error + * @since 1.19 + */ +EAPI Eina_Iterator *ecore_wl2_display_inputs_get(Ecore_Wl2_Display *display); + +/** * Find an Ecore_Wl2_Window based on id * * @param display The display to search for the window @@ -887,6 +904,22 @@ EAPI void ecore_wl2_input_ungrab(Ecore_Wl2_Input *input); EAPI struct wl_seat *ecore_wl2_input_seat_get(Ecore_Wl2_Input *input); /** + * Get the seat capabilities for a given input. + * + * @param input The input + * @since 1.19 + */ +EAPI Ecore_Wl2_Seat_Capabilities ecore_wl2_input_seat_capabilities_get(Ecore_Wl2_Input *input); + +/** + * Get the wayland's seat id from an input. + * @param input The input + * @return The seat id + * @since 1.19 + */ +EAPI unsigned int ecore_wl2_input_seat_id_get(Ecore_Wl2_Input *input); + +/** * @defgroup Ecore_Wl2_Dnd_Group Wayland Library Drag-n-Drop Functions * @ingroup Ecore_Wl2_Group * diff --git a/src/lib/ecore_wl2/ecore_wl2_input.c b/src/lib/ecore_wl2/ecore_wl2_input.c index 830c6ad..a17c665 100644 --- a/src/lib/ecore_wl2/ecore_wl2_input.c +++ b/src/lib/ecore_wl2/ecore_wl2_input.c @@ -1572,3 +1572,29 @@ ecore_wl2_input_seat_get(Ecore_Wl2_Input *input) return input->wl.seat; } + +EAPI Ecore_Wl2_Seat_Capabilities +ecore_wl2_input_seat_capabilities_get(Ecore_Wl2_Input *input) +{ + + Ecore_Wl2_Seat_Capabilities cap = ECORE_WL2_SEAT_CAPABILITIES_NONE; + + EINA_SAFETY_ON_NULL_RETURN_VAL(input, ECORE_WL2_SEAT_CAPABILITIES_NO_SEAT); + + if (!input->wl.seat) + return ECORE_WL2_SEAT_CAPABILITIES_NO_SEAT; + if (input->wl.keyboard) + cap |= ECORE_WL2_SEAT_CAPABILITIES_KEYBOARD; + if (input->wl.pointer) + cap |= ECORE_WL2_SEAT_CAPABILITIES_POINTER; + if (input->wl.touch) + cap |= ECORE_WL2_SEAT_CAPABILITIES_TOUCH; + return cap; +} + +EAPI unsigned int +ecore_wl2_input_seat_id_get(Ecore_Wl2_Input *input) +{ + EINA_SAFETY_ON_NULL_RETURN_VAL(input, 0); + return input->id; +} diff --git a/src/lib/ecore_wl2/ecore_wl2_window.c b/src/lib/ecore_wl2/ecore_wl2_window.c index b2aa63f..2c19f05 100644 --- a/src/lib/ecore_wl2/ecore_wl2_window.c +++ b/src/lib/ecore_wl2/ecore_wl2_window.c @@ -993,6 +993,13 @@ ecore_wl2_window_input_get(Ecore_Wl2_Window *window) return NULL; } +EAPI Eina_Iterator * +ecore_wl2_display_inputs_get(Ecore_Wl2_Display *display) +{ + EINA_SAFETY_ON_NULL_RETURN_VAL(display, NULL); + return eina_inlist_iterator_new(display->inputs); +} + EAPI Eina_Bool ecore_wl2_window_has_shell_surface(Ecore_Wl2_Window *window) { diff --git a/src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_common.c b/src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_common.c index db60d98..9184c6c 100644 --- a/src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_common.c +++
[EGIT] [core/efl] master 02/02: ecore_con: correctly include sys/ioctl.h
jpeg pushed a commit to branch master. http://git.enlightenment.org/core/efl.git/commit/?id=c0d8f1cc3763570b20b90c024cfad01c11db273d commit c0d8f1cc3763570b20b90c024cfad01c11db273d Author: Vincent TorriDate: Wed Nov 16 18:26:56 2016 +0900 ecore_con: correctly include sys/ioctl.h I had to make distclean for this patch to work. Differential Revision: https://phab.enlightenment.org/D4402 --- configure.ac | 1 + src/lib/ecore_con/ecore_con.c | 6 -- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/configure.ac b/configure.ac index 3c4eb48..ca58fff 100644 --- a/configure.ac +++ b/configure.ac @@ -1777,6 +1777,7 @@ netinet/in.h \ netinet/tcp.h \ netinet/udp.h \ sys/prctl.h \ +sys/ioctl.h \ sys/resource.h \ sys/timerfd.h \ sys/un.h \ diff --git a/src/lib/ecore_con/ecore_con.c b/src/lib/ecore_con/ecore_con.c index 56a5f89..48b1d1c 100644 --- a/src/lib/ecore_con/ecore_con.c +++ b/src/lib/ecore_con/ecore_con.c @@ -26,6 +26,10 @@ # include #endif +#ifdef HAVE_SYS_IOCTL_H +# include +#endif + #ifdef HAVE_SYSTEMD # include #endif @@ -38,8 +42,6 @@ # include #endif -#include - #include "Ecore.h" #include "ecore_private.h" #include "Ecore_Con.h" --
Re: [E-devel] [EGIT] [core/enlightenment] master 02/03: Merge branch 'master' of git+ssh://git.enlightenment.org/core/enlightenment
I was away, so the reply is a bit late, but: you should "git log" or better yet: "git log --graph" before you push to make sure it does what you intended. Furthermore, always do "git pull --rebase", not "git pull". You can change this as a setting. -- Tom. On 02/11/16 11:50, Stephen Houston wrote: > Bahhh. Thought I did rebase. My bad. Git and I are still working on our > relationship. > > On Wed, Nov 2, 2016, 3:41 AM Stefan Schmidtwrote: > >> Hello. >> >> On 01/11/16 20:21, Stephen okra Houston wrote: >>> okra pushed a commit to branch master. >>> >>> >> http://git.enlightenment.org/core/enlightenment.git/commit/?id=722ef6442630a5598bec8ec55bb3d309518f7440 >>> >>> commit 722ef6442630a5598bec8ec55bb3d309518f7440 >>> Merge: 7304758 4d86c98 >>> Author: Stephen okra Houston >>> Date: Tue Nov 1 13:28:33 2016 -0500 >>> >>> Merge branch 'master' of git+ssh:// >> git.enlightenment.org/core/enlightenment >> >> Let me remind you that we do not do merges. The only exception is fast >> forward merge commits for a bigger patch series. This merge commit needs >> to have a good commit message describing the whole series though. >> >> To me this looks more as if you merge a branch you worked in into master >> without rebasing. Please avoid this in the future. >> >> regards >> Stefan Schmidt >> >> >> -- >> Developer Access Program for Intel Xeon Phi Processors >> Access to Intel Xeon Phi processor-based developer platforms. >> With one year of Intel Parallel Studio XE. >> Training and support from Colfax. >> Order your platform today. http://sdm.link/xeonphi >> ___ >> enlightenment-devel mailing list >> enlightenment-devel@lists.sourceforge.net >> https://lists.sourceforge.net/lists/listinfo/enlightenment-devel >> > -- > Developer Access Program for Intel Xeon Phi Processors > Access to Intel Xeon Phi processor-based developer platforms. > With one year of Intel Parallel Studio XE. > Training and support from Colfax. > Order your platform today. http://sdm.link/xeonphi > ___ > enlightenment-devel mailing list > enlightenment-devel@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/enlightenment-devel > -- ___ enlightenment-devel mailing list enlightenment-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-devel