[EGIT] [core/efl] master 01/01: Revert the wobbly window code in wayland_egl engine - fun is over guys

2016-07-10 Thread Carsten Haitzler
raster pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=72438ab2a1ebb551552aad85053393b023fecb2c

commit 72438ab2a1ebb551552aad85053393b023fecb2c
Author: Carsten Haitzler (Rasterman) 
Date:   Mon Jul 11 14:53:36 2016 +0900

Revert the wobbly window code in wayland_egl engine - fun is over guys

So ok. haha. Amusing. But this is inappropriate.

1. It's not an INTENDED effect in theme so unless the theme ius doing
it - it shouldn't happen.
2. There are places to do this and it's NOT inside an engine. There
are high level filter and other mechanisms.
3. Actually this shouldn't be even done client-side. It should be done
compositor-side when moving a window around. Knowing velocity vector
etc. is useful to a client so the protocol can stay but doing the
animation client-side is "wrong". Some windows wobble and others do
not based on toolkit? really? sure we have to live with the CSD
difference but this? The compositor can do this JUYST fine. leave it
to compositor... OR do this properly with filters client-side. e.g. a
2d displacement map with evas filters would do the job as long as it
interpolates. If you want a way of forcing ALL objects in the canvas
to redirect to an intermediate buffer then do it up there at the
canvas level. It then works in GL and software, as opposed to only GL.

Also this is now causing issues for users:

 hi, from

https://git.enlightenment.org/core/efl.git/commit/?id=fb76fe55a52ac212b6870f1d74470a79ea5c5246
i run EFL_WAYLAND_DISABLE_WWW=1 terminology -> but it crashes in
wayland_egl/www.c in the setup_shaders function  HELP?

so the fun was fune until we do a release (now) and until this causes
problems for users. Back to tried and tested code.

If you want to do this... do it right at the portable layers above.

...

Revert "wayland-egl: Fix use after free"
Revert "wayland_egl: Fix redirect to texture"
Revert "evas-wayland-egl: Add www protocol handling to wayland-egl engine"
Revert "gl_common: Add API for redirecting render to texture"

This reverts commit 2760afbb0e8c8adfb35b1dee016be7883fa07323.
This reverts commit c937248eac0d0996f3cbc31a348b92c8baac2ec3.
This reverts commit c67f50b40aaf2595e21373bf89b53bc1edec44a4.
This reverts commit 0f7f4b6de07707031482f6e3e7f7c69f7fb7e855.
---
 src/Makefile_Evas.am   |   4 +-
 .../evas/engines/gl_common/evas_gl_common.h|  19 -
 .../evas/engines/gl_common/evas_gl_context.c   |  77 +-
 src/modules/evas/engines/wayland_egl/evas_engine.c |  43 -
 src/modules/evas/engines/wayland_egl/evas_engine.h |  27 -
 .../evas/engines/wayland_egl/evas_wl_main.c|  69 +-
 src/modules/evas/engines/wayland_egl/www.c | 885 -
 src/modules/evas/engines/wayland_egl/www.h |  52 --
 8 files changed, 4 insertions(+), 1172 deletions(-)

diff --git a/src/Makefile_Evas.am b/src/Makefile_Evas.am
index 0560f93..a1f20d9 100644
--- a/src/Makefile_Evas.am
+++ b/src/Makefile_Evas.am
@@ -1215,9 +1215,7 @@ dist_installed_evasmainheaders_DATA += 
modules/evas/engines/wayland_egl/Evas_Eng
 WAYLAND_EGL_SOURCES = \
 modules/evas/engines/wayland_egl/evas_engine.c \
 modules/evas/engines/wayland_egl/evas_wl_main.c \
-modules/evas/engines/wayland_egl/evas_engine.h \
-modules/evas/engines/wayland_egl/www.c \
-modules/evas/engines/wayland_egl/www.h
+modules/evas/engines/wayland_egl/evas_engine.h
 if EVAS_STATIC_BUILD_WAYLAND_EGL
 lib_evas_libevas_la_SOURCES += $(WAYLAND_EGL_SOURCES)
 lib_evas_libevas_la_CPPFLAGS += @evas_engine_wayland_egl_cflags@
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 809d88b..92e968b 100644
--- a/src/modules/evas/engines/gl_common/evas_gl_common.h
+++ b/src/modules/evas/engines/gl_common/evas_gl_common.h
@@ -60,7 +60,6 @@
 typedef struct _Evas_GL_Program   Evas_GL_Program;
 typedef struct _Evas_GL_SharedEvas_GL_Shared;
 typedef struct _Evas_Engine_GL_ContextEvas_Engine_GL_Context;
-typedef struct _Evas_GL_Redirect  Evas_GL_Redirect;
 typedef struct _Evas_GL_Texture_Pool  Evas_GL_Texture_Pool;
 typedef struct _Evas_GL_Texture_AllocaEvas_GL_Texture_Alloca;
 typedef struct _Evas_GL_Texture   Evas_GL_Texture;
@@ -343,17 +342,6 @@ struct _Evas_Engine_GL_Context
int gles_version;
 
RGBA_Image *font_surface;
-
-   GLuint current_fb;
-};
-
-struct _Evas_GL_Redirect
-{
-  Evas_Engine_GL_Context *gc;
-  GLuint fb;
-  GLuint texture;
-  GLuint depth_buffer;
-  Eina_Bool active : 1;
 };
 
 struct _Evas_GL_Texture_Pool
@@ -540,13 +528,6 @@ typedef void (*Evas_Gl_Symbols)(void 
*(*GetProcAddress)(const char *sym));
 
 EAPI void __evas_gl_err(int err, const char *file, const char *func, int line, 

[EGIT] [core/efl] master 01/01: ecore_x: NULL derefs.

2016-07-10 Thread Benjamin Jacobs
raster pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=e03d4142ef22bc15c24a3969e32933e17bab1c23

commit e03d4142ef22bc15c24a3969e32933e17bab1c23
Author: Benjamin Jacobs 
Date:   Mon Jul 11 14:19:59 2016 +0900

ecore_x: NULL derefs.

Reviewers: raster, devilhorns

Subscribers: raster, cedric, jpeg

Differential Revision: https://phab.enlightenment.org/D4018
---
 src/lib/ecore_x/xcb/ecore_xcb.c | 9 ++---
 src/lib/ecore_x/xlib/ecore_x.c  | 3 ++-
 2 files changed, 8 insertions(+), 4 deletions(-)

diff --git a/src/lib/ecore_x/xcb/ecore_xcb.c b/src/lib/ecore_x/xcb/ecore_xcb.c
index 15107fb..9e08aef 100644
--- a/src/lib/ecore_x/xcb/ecore_xcb.c
+++ b/src/lib/ecore_x/xcb/ecore_xcb.c
@@ -504,9 +504,12 @@ ecore_x_client_message8_send(Ecore_X_Window win, 
Ecore_X_Atom type,
ev.format = 8;
ev.window = win;
ev.type = type;
-   if (len > 20) len = 20;
-   memcpy(ev.data.data8, data, len);
-   memset(ev.data.data8 + len, 0, 20 - len);
+   if (len > 20)
+ len = 20;
+   if (data && len > 0)
+ memcpy(ev.data.data8, data, len);
+   if (len < 20)
+ memset(ev.data.data8 + len, 0, 20 - len);
 
cookie = xcb_send_event(_ecore_xcb_conn, 0, win,
XCB_EVENT_MASK_NO_EVENT, (const char *)&ev);
diff --git a/src/lib/ecore_x/xlib/ecore_x.c b/src/lib/ecore_x/xlib/ecore_x.c
index 546257b..ae8b5bd 100644
--- a/src/lib/ecore_x/xlib/ecore_x.c
+++ b/src/lib/ecore_x/xlib/ecore_x.c
@@ -2124,7 +2124,8 @@ ecore_x_client_message8_send(Ecore_X_Window win,
if (len > 20)
  len = 20;
 
-   memcpy(xev.xclient.data.b, data, len);
+   if (data && len > 0)
+ memcpy(xev.xclient.data.b, data, len);
if (len < 20)
  memset(xev.xclient.data.b + len, 0, 20 - len);
 

-- 




[EGIT] [core/efl] master 01/01: edje - language emit - handle null language and convert to none

2016-07-10 Thread Carsten Haitzler
raster pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=899d2d957a790aa3fb0bd6dbcfbed64ea76ba14f

commit 899d2d957a790aa3fb0bd6dbcfbed64ea76ba14f
Author: Carsten Haitzler (Rasterman) 
Date:   Mon Jul 11 13:46:21 2016 +0900

edje - language emit - handle null language and convert to none

cleans up an emit string being edje,language,(null) if no language is
set. use none instead of (null).
---
 src/lib/edje/edje_load.c |  6 --
 src/lib/edje/edje_util.c | 10 --
 2 files changed, 12 insertions(+), 4 deletions(-)

diff --git a/src/lib/edje/edje_load.c b/src/lib/edje/edje_load.c
index e7c70b1..85dc114 100644
--- a/src/lib/edje/edje_load.c
+++ b/src/lib/edje/edje_load.c
@@ -1370,8 +1370,10 @@ _edje_object_file_set_internal(Evas_Object *obj, const 
Eina_File *file, const ch
_edje_user_definition_remove(eud, eud->u.box.child);
 }
}
-
- snprintf(lang, sizeof(lang), "edje,language,%s", _edje_language);
+ if (_edje_language)
+   snprintf(lang, sizeof(lang), "edje,language,%s", 
_edje_language);
+ else
+ snprintf(lang, sizeof(lang), "edje,language,%s", "none");
  edje_object_signal_emit(obj, lang, "edje");
 
  if (edje_object_mirrored_get(obj))
diff --git a/src/lib/edje/edje_util.c b/src/lib/edje/edje_util.c
index 83f8d1c..4f82e32 100644
--- a/src/lib/edje/edje_util.c
+++ b/src/lib/edje/edje_util.c
@@ -364,7 +364,10 @@ _edje_object_language_set(Eo *obj, Edje *ed, const char 
*locale)
eina_stringshare_replace_length(&ed->language, locale, length);
 
signal = alloca(length + 15);
-   snprintf(signal, length + 15, "edje,language,%s", ed->language);
+   if (ed->language)
+ snprintf(signal, length + 15, "edje,language,%s", ed->language);
+   else
+ snprintf(signal, length + 15, "edje,language,%s", "none");
 
_edje_language_signal_emit(ed, obj, signal);
 }
@@ -397,7 +400,10 @@ edje_language_set(const char *locale)
eina_stringshare_replace(&_edje_language, loc);
 
signal = alloca(length + 15);
-   snprintf(signal, length + 15, "edje,language,%s", loc);
+   if (loc)
+ snprintf(signal, length + 15, "edje,language,%s", loc);
+   else
+ snprintf(signal, length + 15, "edje,language,%s", "none");
 
EINA_LIST_FOREACH(_edje_edjes, l, obj)
  {

-- 




[EGIT] [core/efl] master 01/01: edje: update a style when a style is added as class's member

2016-07-10 Thread Youngbok Shin
raster pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=8e93b88175f2c97677fbb40628953bd1a12f3578

commit 8e93b88175f2c97677fbb40628953bd1a12f3578
Author: Youngbok Shin 
Date:   Mon Jul 11 13:13:38 2016 +0900

edje: update a style when a style is added as class's member

Summary:
If there is no member styles when a text_class is updated,
newly added styles can't be updated.
So, newly added styles as member of text_class should be updated.
@fix

Test Plan:
Test case is included.

1. Run "elementary_test -to "font overlay""
2. Press Next button. Check the font size.
3. Press Prev button.
4. Put font_size as 50
5. Click Apply button.
6. Press Next button. Check the font size is not changed.

Reviewers: cedric, tasn, herdsman, raster

Subscribers: jpeg, z-wony, Blackmole

Differential Revision: https://phab.enlightenment.org/D4125
---
 data/elementary/objects/test.edc |  27 +
 src/bin/elementary/test.c|   2 +
 src/bin/elementary/test_config.c | 119 ++
 src/lib/edje/edje_textblock_styles.c | 191 +++
 4 files changed, 253 insertions(+), 86 deletions(-)

diff --git a/data/elementary/objects/test.edc b/data/elementary/objects/test.edc
index 90db73c..e58a595 100644
--- a/data/elementary/objects/test.edc
+++ b/data/elementary/objects/test.edc
@@ -833,4 +833,31 @@ group { name: "page_layout";
  }
   }
}
+   group { name: "font_overlay_layout";
+  styles {
+ style { name: "test_class_style";
+base: "font=Sans font_size=20 color=#fff 
text_class=font_overlay_test wrap=mixed";
+ }
+  }
+  parts {
+ part { name: "bg";
+type: RECT;
+scale: 1;
+description { state: "default" 0.0;
+   min: 400 300;
+   color: 0 0 0 0;
+}
+ }
+ part { name: "elm.text";
+type: TEXTBLOCK;
+scale: 1;
+description { state: "default" 0.0;
+   fixed: 1 1;
+   text {
+  style: "test_class_style";
+   }
+}
+ }
+  }
+   }
 }
diff --git a/src/bin/elementary/test.c b/src/bin/elementary/test.c
index 9f6eb8d..917983e 100644
--- a/src/bin/elementary/test.c
+++ b/src/bin/elementary/test.c
@@ -266,6 +266,7 @@ void test_external_video(void *data, Evas_Object *obj, void 
*event_info);
 void test_external_icon(void *data, Evas_Object *obj, void *event_info);
 void test_external_combobox(void *data, Evas_Object *obj, void *event_info);
 void test_config(void *data, Evas_Object *obj, void *event_info);
+void test_config_font_overlay(void *data, Evas_Object *obj, void *event_info);
 void test_video(void *data, Evas_Object *obj, void *event_info);
 void test_eio(void *data, Evas_Object *obj, void *event_info);
 void test_web(void *data, Evas_Object *obj, void *event_info);
@@ -916,6 +917,7 @@ add_tests:
ADD_TEST(NULL, "Miscellaneous", "Accessibility", test_access);
ADD_TEST(NULL, "Miscellaneous", "Accessibility2", test_access2);
ADD_TEST(NULL, "Miscellaneous", "Accessibility3", test_access3);
+   ADD_TEST(NULL, "Miscellaneous", "Font overlay", test_config_font_overlay);
 
//--//
ADD_TEST(NULL, "Application client/server", "Task switcher", 
test_task_switcher);
diff --git a/src/bin/elementary/test_config.c b/src/bin/elementary/test_config.c
index bf032a7..2f19092 100644
--- a/src/bin/elementary/test_config.c
+++ b/src/bin/elementary/test_config.c
@@ -532,3 +532,122 @@ test_config(void *data, Evas_Object *obj, void 
*event_info EINA_UNUSED)
evas_object_resize(win, 400, 500);
evas_object_show(win);
 }
+
+static void
+_font_overlay_page_next(void *data, Evas_Object *obj EINA_UNUSED, void 
*event_info EINA_UNUSED)
+{
+   Evas_Object *layout;
+   Evas_Object *nf = (Evas_Object *)data;
+   char buf[255];
+
+   layout = elm_layout_add(nf);
+   snprintf(buf, sizeof(buf), "%s/objects/test.edj", elm_app_data_dir_get());
+   elm_layout_file_set(layout, buf, "font_overlay_layout");
+   elm_layout_text_set(layout, "elm.text", "TEXTBLOCK part of test_class");
+   evas_object_show(layout);
+
+   elm_naviframe_item_push(nf, "Font Overlay", NULL, NULL, layout, NULL);
+}
+
+static void
+_apply_font_overlay_btn_clicked_cb(void *data, Evas_Object *obj EINA_UNUSED, 
void *event_info EINA_UNUSED)
+{
+   Evas_Object *nf = (Evas_Object *)data;
+   Evas_Object *entry;
+   const char *font;
+   const char *font_size_temp;
+   int font_size;
+
+   entry = (Evas_Object *)evas_object_data_get(nf, "font_entry");
+   font = elm_entry_entry_get(entry);
+   entry = (Evas_Object *)evas_object_data_get(nf, "font_size_entry");
+   font_size_temp = elm_entry_entry_get(entry);
+   font_size = atoi(font_size_temp);
+
+   printf("Font overlay set: Font [%s], FontSize [%d]\n", font, font_s

[EGIT] [core/efl] master 01/01: Accessibility: Read pre-edit text.

2016-07-10 Thread Shilpa Singh
raster pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=5b791420ea03d27d6126a8e048491e056008606b

commit 5b791420ea03d27d6126a8e048491e056008606b
Author: Shilpa Singh 
Date:   Mon Jul 11 10:36:38 2016 +0900

Accessibility: Read pre-edit text.

Summary:
Edje_entry:  In order to read pre-edit characters as well,
send entry_change_info with preedit,changed
Elm_entry: In order to read pre-edit characters as well,
send text to screen reader on preedit,changed.

Test Plan:
1. Change keyboard language to korean/enable prediction
2. Check the reading, text should be read even before committing

Signed-off-by: Shilpa Singh 

Reviewers: thiepha, jihoon, cedric, raster

Reviewed By: raster

Subscribers: raster, kimcinoo, cedric, jpeg

Differential Revision: https://phab.enlightenment.org/D4145
---
 src/lib/edje/edje_entry.c  | 12 ++--
 src/lib/elementary/elm_entry.c | 20 
 2 files changed, 26 insertions(+), 6 deletions(-)

diff --git a/src/lib/edje/edje_entry.c b/src/lib/edje/edje_entry.c
index 5fda862..c5ed2b3 100644
--- a/src/lib/edje/edje_entry.c
+++ b/src/lib/edje/edje_entry.c
@@ -18,6 +18,7 @@ static void _edje_entry_imf_cursor_location_set(Entry *en);
 static void _edje_entry_imf_cursor_info_set(Entry *en);
 static void _range_del_emit(Edje *ed, Evas_Textblock_Cursor *c EINA_UNUSED, 
Evas_Object *o EINA_UNUSED, Entry *en);
 static void _text_filter_format_prepend(Edje *ed, Entry *en, 
Evas_Textblock_Cursor *c, const char *text);
+static void _free_entry_change_info(void *_info);
 
 struct _Entry
 {
@@ -4279,6 +4280,7 @@ _edje_entry_imf_event_preedit_changed_cb(void *data, 
Ecore_IMF_Context *ctx EINA
Edje *ed = data;
Edje_Real_Part *rp = ed->focused_part;
Entry *en = NULL;
+   Edje_Entry_Change_Info *info = NULL;
int cursor_pos;
int preedit_start_pos, preedit_end_pos;
char *preedit_string;
@@ -4368,8 +4370,6 @@ _edje_entry_imf_event_preedit_changed_cb(void *data, 
Ecore_IMF_Context *ctx EINA
 if ((rp->part->entry_mode == EDJE_ENTRY_EDIT_MODE_PASSWORD) &&
 _edje_password_show_last)
   {
- Edje_Entry_Change_Info *info;
-
  _edje_entry_hide_visible_password(ed, en->rp);
  info = _text_filter_markup_prepend(ed, en, en->cursor,
   eina_strbuf_string_get(buf),
@@ -4387,14 +4387,13 @@ _edje_entry_imf_event_preedit_changed_cb(void *data, 
Ecore_IMF_Context *ctx EINA
 en->pw_timer = ecore_timer_add
 (_edje_password_show_last_timeout,
 _password_timer_cb, en);
-  free(info);
}
   }
 else
-  _text_filter_markup_prepend(ed, en, en->cursor,
+  info = _text_filter_markup_prepend(ed, en, en->cursor,
   eina_strbuf_string_get(buf),
   NULL, NULL,
-  EINA_TRUE, EINA_FALSE);
+  EINA_TRUE, EINA_TRUE);
 eina_strbuf_free(buf);
  }
 
@@ -4425,7 +4424,8 @@ _edje_entry_imf_event_preedit_changed_cb(void *data, 
Ecore_IMF_Context *ctx EINA
 
_edje_entry_imf_cursor_info_set(en);
_anchors_get(en->cursor, rp->object, en);
-   _edje_emit(ed, "preedit,changed", rp->part->name);
+   _edje_emit_full(ed, "preedit,changed", rp->part->name, info,
+   _free_entry_change_info);
_edje_emit(ed, "cursor,changed", rp->part->name);
 
/* delete attribute list */
diff --git a/src/lib/elementary/elm_entry.c b/src/lib/elementary/elm_entry.c
index 160a3bf..87c555f 100644
--- a/src/lib/elementary/elm_entry.c
+++ b/src/lib/elementary/elm_entry.c
@@ -2196,7 +2196,27 @@ _entry_preedit_changed_signal_cb(void *data,
  const char *emission EINA_UNUSED,
  const char *source EINA_UNUSED)
 {
+   char *text = NULL;
+   Edje_Entry_Change_Info *edje_info = (Edje_Entry_Change_Info *)
+  edje_object_signal_callback_extra_data_get();
_entry_changed_handle(data, ELM_ENTRY_EVENT_PREEDIT_CHANGED);
+
+   if (_elm_config->atspi_mode)
+ {
+Elm_Atspi_Text_Change_Info atspi_info;
+if (edje_info && edje_info->insert)
+  {
+ text = elm_entry_markup_to_utf8(edje_info->change.insert.content);
+ atspi_info.content = text;
+ atspi_info.pos = edje_info->change.insert.pos;
+ atspi_info.len = edje_info->change.insert.plain_length;
+ 
elm_interface_atspi_accessible_event_emit(ELM_INTERFACE_ATSPI_ACCESSIBLE_MIXIN,
+   data,
+   
ELM_INTERFACE_ATSPI_TEXT_EVENT_ACCESS_TEXT_INSERTED,
+ 

Re: [E-devel] JSON

2016-07-10 Thread Andrew Williams
Hi Felipe,

Thanks - is it in a Dev repo somewhere I could peek at or are you keeping
it under wraps until APIs stabilise?

Cheers,
Andy
On Sun, 10 Jul 2016 at 16:47, Felipe Magno de Almeida <
felipe.m.alme...@gmail.com> wrote:

> On Sat, Jul 9, 2016 at 7:29 PM, Andrew Williams 
> wrote:
> > Hi all,
>
> Hello Andrew,
>
> > So it's a web world and APIs are cool right - and it's all json or XML.
> > I can't find anywhere (outside of the is bindings) where we use json...
> >
> > Assuming I need to read such an API are there any preferences or advice
> for
> > how (library, string parsing) it should be done in an efl app to best fit
> > with how we do things?
>
> There's a JSON and XML data model we want to push, however the
> Data Model API is still in beta, so its development has not really
> finished because modifications in API are still coming in. But for 1.19
> this should be stable.
>
> > Thanks :)
> > Andrew
>
> Regards,
> --
> Felipe Magno de Almeida
>
>
> --
> Attend Shape: An AT&T Tech Expo July 15-16. Meet us at AT&T Park in San
> Francisco, CA to explore cutting-edge tech and listen to tech luminaries
> present their vision of the future. This family event has something for
> everyone, including kids. Get more information and register today.
> http://sdm.link/attshape
> ___
> enlightenment-devel mailing list
> enlightenment-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/enlightenment-devel
>
--
Attend Shape: An AT&T Tech Expo July 15-16. Meet us at AT&T Park in San
Francisco, CA to explore cutting-edge tech and listen to tech luminaries
present their vision of the future. This family event has something for
everyone, including kids. Get more information and register today.
http://sdm.link/attshape
___
enlightenment-devel mailing list
enlightenment-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel


Re: [E-devel] JSON

2016-07-10 Thread Felipe Magno de Almeida
On Sat, Jul 9, 2016 at 7:29 PM, Andrew Williams  wrote:
> Hi all,

Hello Andrew,

> So it's a web world and APIs are cool right - and it's all json or XML.
> I can't find anywhere (outside of the is bindings) where we use json...
>
> Assuming I need to read such an API are there any preferences or advice for
> how (library, string parsing) it should be done in an efl app to best fit
> with how we do things?

There's a JSON and XML data model we want to push, however the
Data Model API is still in beta, so its development has not really
finished because modifications in API are still coming in. But for 1.19
this should be stable.

> Thanks :)
> Andrew

Regards,
-- 
Felipe Magno de Almeida

--
Attend Shape: An AT&T Tech Expo July 15-16. Meet us at AT&T Park in San
Francisco, CA to explore cutting-edge tech and listen to tech luminaries
present their vision of the future. This family event has something for
everyone, including kids. Get more information and register today.
http://sdm.link/attshape
___
enlightenment-devel mailing list
enlightenment-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel