Dear,
I added a new widget naviframe.
This widget is for application's view manager such as elm_pager.
But has optional functions more for users convenience.
Not completed yet for decorations. but basic frame is completed.
Do someone review it's APIs and functionalities?
------------------------------------
Let's run together for the best moment!
-Regards, Hermet-
-----Original Message-----
From: "Enlightenment SVN"<[email protected]>
To: [email protected]
Cc:
Sent: 11-07-13(수) 13:21:50
Subject: E SVN: hermet IN trunk/elementary: data/images data/themes src/bin
src/libLog:
elementary/naviframe - added new widget.
This widget is for application's view manager such as elm_pager
But has optional functions more for users convenience.
Not completed yet for decorations. but basic frame is completed.
Need to have a review.
Author: hermet
Date: 2011-07-12 21:21:50 -0700 (Tue, 12 Jul 2011)
New Revision: 61313
Trac: http://trac.enlightenment.org/e/changeset/61313
Added:
trunk/elementary/data/images/icon_right_arrow.png
trunk/elementary/src/bin/test_naviframe.c
trunk/elementary/src/lib/elc_naviframe.c
Modified:
trunk/elementary/data/themes/default.edc trunk/elementary/src/bin/Makefile.am
trunk/elementary/src/bin/test.c trunk/elementary/src/lib/Elementary.h.in
trunk/elementary/src/lib/Makefile.am
Property changes on: trunk/elementary/data/images/icon_right_arrow.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Modified: trunk/elementary/data/themes/default.edc
===================================================================
--- trunk/elementary/data/themes/default.edc 2011-07-13 01:41:56 UTC (rev 61312)
+++ trunk/elementary/data/themes/default.edc 2011-07-13 04:21:50 UTC (rev 61313)
@@ -2970,6 +2970,193 @@
}
}
}
+ group { name: "elm/button/base/naviframe/back_btn/default";
+ images {
+ image: "bt_base1.png" COMP;
+ image: "bt_base2.png" COMP;
+ image: "bt_hilight.png" COMP;
+ image: "bt_shine.png" COMP;
+ image: "bt_glow.png" COMP;
+ image: "bt_dis_base.png" COMP;
+ image: "bt_dis_hilight.png" COMP;
+ image: "icon_left_arrow.png" COMP;
+ }
+ parts {
+ part { name: "button_image";
+ mouse_events: 1;
+ description { state: "default" 0.0;
+ min: 15 15;
+ image {
+ normal: "bt_base2.png";
+ border: 7 7 7 7;
+ }
+ image.middle: SOLID;
+ }
+ description { state: "clicked" 0.0;
+ inherit: "default" 0.0;
+ image.normal: "bt_base1.png";
+ }
+ description { state: "disabled" 0.0;
+ inherit: "default" 0.0;
+ image {
+ normal: "bt_dis_base.png";
+ border: 4 4 4 4;
+ }
+ }
+ }
+ part { name: "prev_image";
+ type: IMAGE;
+ scale: 1;
+ description { state: "default" 0.0;
+ min: 30 30;
+ max: 30 30;
+ fixed: 1 1;
+ align: 0.5 0.5;
+ image.normal: "icon_left_arrow.png";
+ }
+ }
+ part { name: "over1";
+ mouse_events: 0;
+ description { state: "default" 0.0;
+ rel2.relative: 1.0 0.5;
+ image {
+ normal: "bt_hilight.png";
+ border: 7 7 7 0;
+ }
+ }
+ description { state: "disabled" 0.0;
+ inherit: "default" 0.0;
+ image {
+ normal: "bt_dis_hilight.png";
+ border: 4 4 4 0;
+ }
+ }
+ }
+ part { name: "over2";
+ mouse_events: 1;
+ repeat_events: 1;
+ ignore_flags: ON_HOLD;
+ description { state: "default" 0.0;
+ image {
+ normal: "bt_shine.png";
+ border: 7 7 7 7;
+ }
+ }
+ description { state: "disabled" 0.0;
+ inherit: "default" 0.0;
+ visible: 0;
+ }
+ }
+ part { name: "over3";
+ mouse_events: 1;
+ repeat_events: 1;
+ description { state: "default" 0.0;
+ color: 255 255 255 0;
+ image {
+ normal: "bt_glow.png";
+ border: 12 12 12 12;
+ }
+ fill.smooth : 0;
+ }
+ description { state: "clicked" 0.0;
+ inherit: "default" 0.0;
+ color: 255 255 255 255;
+ }
+ }
+ part { name: "disabler";
+ type: RECT;
+ description { state: "default" 0.0;
+ color: 0 0 0 0;
+ visible: 0;
+ }
+ description { state: "disabled" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ }
+ }
+ }
+ programs {
+ program {
+ name: "button_click";
+ signal: "mouse,down,1";
+ source: "over2";
+ action: SIGNAL_EMIT "elm,action,press" "";
+ after: "button_click_anim";
+ }
+ program {
+ name: "button_click_anim";
+ action: STATE_SET "clicked" 0.0;
+ target: "button_image";
+ }
+ program {
+ name: "button_unclick";
+ signal: "mouse,up,1";
+ source: "over3";
+ action: SIGNAL_EMIT "elm,action,unpress" "";
+ after: "button_unclick_anim";
+ }
+ program {
+ name: "button_pressed_anim";
+ signal: "elm,anim,activate";
+ source: "elm";
+ action: STATE_SET "clicked" 0.0;
+ target: "button_image";
+ target: "over3";
+ after: "button_unpressed_anim";
+ }
+ program {
+ name: "button_unpressed_anim";
+ action: STATE_SET "default" 0.0;
+ transition: DECELERATE 0.5;
+ target: "button_image";
+ target: "over3";
+ }
+ program {
+ name: "button_unclick_anim";
+ action: STATE_SET "default" 0.0;
+ target: "button_image";
+ }
+ program {
+ name: "button_click2";
+ signal: "mouse,down,1";
+ source: "over3";
+ action: STATE_SET "clicked" 0.0;
+ target: "over3";
+ }
+ program {
+ name: "button_unclick2";
+ signal: "mouse,up,1";
+ source: "over3";
+ action: STATE_SET "default" 0.0;
+ transition: DECELERATE 0.5;
+ target: "over3";
+ }
+ program {
+ name: "button_unclick3";
+ signal: "mouse,clicked,1";
+ source: "over2";
+ action: SIGNAL_EMIT "elm,action,click" "";
+ }
+ program { name: "disable";
+ signal: "elm,state,disabled";
+ source: "elm";
+ action: STATE_SET "disabled" 0.0;
+ target: "button_image";
+ target: "over1";
+ target: "over2";
+ target: "disabler";
+ }
+ program { name: "enable";
+ signal: "elm,state,enabled";
+ source: "elm";
+ action: STATE_SET "default" 0.0;
+ target: "button_image";
+ target: "over1";
+ target: "over2";
+ target: "disabler";
+ }
+ }
+ }
///////////////////////////////////////////////////////////////////////////////
group { name: "elm/toggle/base/default";
@@ -36691,4 +36878,378 @@
}
}
}
+/////////////////////////////////////////////////////////////////////////
+ group { name:"elm/naviframe/base/default";
+ images {
+ image: "frame_1.png" COMP;
+ image: "frame_2.png" COMP;
+ image: "dia_grad.png" COMP;
+ }
+ parts {
+ part { name: "base0";
+ mouse_events: 0;
+ description { state: "default" 0.0;
+ image.normal: "dia_grad.png";
+ fill {
+ smooth: 0;
+ size {
+ relative: 0.0 1.0;
+ offset: 64 0;
+ }
+ }
+ }
+ }
+ part { name: "base1";
+ type: IMAGE;
+ description { state: "default" 0.0;
+ image {
+ normal: "frame_2.png";
+ border: 5 5 32 26;
+ middle: 0;
+ }
+ fill.smooth : 0;
+ }
+ }
+ part { name: "over";
+ mouse_events: 0;
+ description { state: "default" 0.0;
+ rel1.offset: 4 4;
+ rel2.offset: 5 5;
+ image {
+ normal: "frame_1.png";
+ border: 2 2 28 22;
+ middle: 0;
+ }
+ fill.smooth : 0;
+ }
+ }
+ }
+ }
+ group { name:"elm/naviframe/item/basic/default";
+ parts {
+ part { name: "title_clip";
+ type: RECT;
+ mouse_events: 0;
+ description { state: "default" 0.0;
+ min: 1 50;
+ align: 0.0 0.0;
+ fixed: 0 1;
+ rel1 { relative: 0.0 0.0; }
+ rel2 { relative: 1.0 0.0; }
+ }
+ description { state: "hide" 0.0;
+ inherit: "default" 0.0;
+ min: 0 0;
+ max: 0 0;
+ fixed: 1 1;
+ }
+ }
+ part { name: "content_clip";
+ type: RECT;
+ mouse_events: 0;
+ description { state: "default" 0.0;
+ rel1.to_y: "title_clip";
+ }
+ }
+ part { name: "elm.swallow.content";
+ type: SWALLOW;
+ scale: 1;
+ repeat_events: 0;
+ clip_to: "content_clip";
+ description { state: "default" 0.0;
+ align: 0.0 0.0;
+ rel1.relative: 1.0 1.0;
+ rel1.to_y: "title_clip";
+ rel2.relative: 2.0 1.0;
+ }
+ description { state: "show" 0.0;
+ inherit: "default" 0.0;
+ rel1.relative: 0.0 1.0;
+ rel2.relative: 1.0 1.0;
+ }
+ description { state: "pushed" 0.0;
+ inherit: "default" 0.0;
+ rel1.relative: -1.0 1.0;
+ rel2.relative: 0.0 1.0;
+ }
+ description { state: "popped" 0.0;
+ inherit: "default" 0.0;
+ rel1.relative: 1.0 1.0;
+ rel2.relative: 2.0 1.0;
+ }
+ }
+ part { name: "elm.swallow.title";
+ type: SWALLOW;
+ scale: 1;
+ repeat_events: 0;
+ clip_to: "title_clip";
+ description { state: "default" 0.0;
+ min: 1 50;
+ align: 0.0 0.0;
+ fixed: 0 1;
+ rel1 { relative: 0.0 0.0; }
+ rel2 { relative: 1.0 0.0; }
+ }
+ description { state: "hide" 0.0;
+ inherit: "default" 0.0;
+ min: 0 0;
+ max: 0 0;
+ fixed: 1 1;
+ }
+ }
+ }
+ programs {
+ program { name: "show";
+ signal: "elm,state,show";
+ source: "elm";
+ action: STATE_SET "show" 0.0;
+ target: "elm.swallow.content";
+ transition: DECELERATE 0.5;
+ after: "show_finished";
+ }
+ program { name: "pushed";
+ signal: "elm,state,pushed";
+ source: "elm";
+ action: STATE_SET "pushed" 0.0;
+ target: "elm.swallow.content";
+ transition: DECELERATE 0.5;
+ after: "pushed_finished";
+ }
+ program { name: "popped";
+ signal: "elm,state,popped";
+ source: "elm";
+ action: STATE_SET "popped" 0.0;
+ target: "elm.swallow.content";
+ transition: DECELERATE 0.5;
+ after: "popped_finished";
+ }
+ program { name: "visible";
+ signal: "elm,state,visible";
+ source: "elm";
+ action: STATE_SET "show" 0.0;
+ target: "elm.swallow.content";
+ }
+ program { name: "title_show";
+ signal: "elm,state,title,show";
+ source: "elm";
+ action: STATE_SET "default" 0.0;
+ target: "title_clip";
+ }
+ program { name: "title_hide";
+ signal: "elm,state,title,hide";
+ source: "elm";
+ action: STATE_SET "hide" 0.0;
+ target: "title_clip";
+ }
+ program { name: "show_finished";
+ action: SIGNAL_EMIT "elm,action,show,finished" "";
+ }
+ program { name: "pushed_finished";
+ action: SIGNAL_EMIT "elm,action,pushed,finished" "";
+ }
+ program { name: "popped_finished";
+ action: SIGNAL_EMIT "elm,action,popped,finished" "";
+ }
+ }
+ }
+ group { name:"elm/naviframe/item/no_transit/default";
+ parts {
+ part { name: "clip";
+ type: RECT;
+ mouse_events: 0;
+ description { state: "default" 0.0;
+ }
+ }
+ part { name: "elm.swallow.content";
+ type: SWALLOW;
+ scale: 1;
+ repeat_events: 0;
+ clip_to: "clip";
+ description { state: "default" 0.0;
+ align: 0.0 0.0;
+ rel1.relative: 0.0 1.0;
+ rel1.to_y: "elm.swallow.title";
+ rel2.relative: 1.0 1.0;
+ visible: 0;
+ }
+ description { state: "show" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ }
+ }
+ part { name: "elm.swallow.title";
+ type: SWALLOW;
+ scale: 1;
+ repeat_events: 0;
+ clip_to: "clip";
+ description { state: "default" 0.0;
+ min: 1 50;
+ align: 0.5 0.0;
+ fixed: 0 1;
+ rel1 { relative: 0.0 0.0; offset: 4 4; }
+ rel2 { relative: 1.0 0.0; offset: -5 -5; }
+ visible: 0;
+ }
+ description { state: "hide" 0.0;
+ inherit: "default" 0.0;
+ min: 0 0;
+ max: 0 0;
+ fixed: 1 1;
+ }
+ }
+ }
+ programs {
+ program { name: "show";
+ signal: "elm,state,show";
+ source: "elm";
+ action: STATE_SET "show" 0.0;
+ target: "elm.swallow.content";
+ after: "show_finished";
+ }
+ program { name: "pushed";
+ signal: "elm,state,pushed";
+ source: "elm";
+ action: STATE_SET "default" 0.0;
+ target: "elm.swallow.content";
+ after: "pushed_finished";
+ }
+ program { name: "popped";
+ signal: "elm,state,popped";
+ source: "elm";
+ action: STATE_SET "default" 0.0;
+ target: "elm.swallow.content";
+ after: "popped_finished";
+ }
+ program { name: "visible";
+ signal: "elm,state,visible";
+ source: "elm";
+ action: STATE_SET "show" 0.0;
+ target: "elm.swallow.content";
+ }
+ program { name: "title_show";
+ signal: "elm,state,title,show";
+ source: "elm";
+ action: STATE_SET "default" 0.0;
+ target: "elm.swallow.title";
+ }
+ program { name: "title_hide";
+ signal: "elm,state,title,hide";
+ source: "elm";
+ action: STATE_SET "hide" 0.0;
+ target: "elm.swallow.title";
+ }
+ program { name: "show_finished";
+ action: SIGNAL_EMIT "elm,action,show,finished" "";
+ }
+ program { name: "pushed_finished";
+ action: SIGNAL_EMIT "elm,action,pushed,finished" "";
+ }
+ program { name: "popped_finished";
+ action: SIGNAL_EMIT "elm,action,popped,finished" "";
+ }
+ }
+ }
+ group { name:"elm/naviframe/title/default";
+ images {
+ image: "flip_base.png" COMP;
+ image: "flip_shad.png" COMP;
+ }
+ parts {
+ part { name: "base";
+ type: IMAGE;
+ description {
+ image.normal: "flip_base.png";
+ }
+ }
+ part { name: "elm.swallow.prev_btn";
+ type: SWALLOW;
+ scale: 1;
+ description { state: "default" 0.0;
+ min: 80 40;
+ max: 80 40;
+ align: 0 0;
+ fixed: 1 1;
+ rel1.offset: 5 5;
+ rel2.offset: -1 -6;
+ }
+ }
+ part { name: "elm.swallow.next_btn";
+ type: SWALLOW;
+ scale: 1;
+ description { state: "default" 0.0;
+ min: 80 40;
+ max: 80 40;
+ align: 1 0;
+ fixed: 1 1;
+ rel1.offset: 0 5;
+ rel2.offset: -6 -6;
+ }
+ }
+ part { name: "elm.swallow.icon";
+ type: SWALLOW;
+ scale: 1;
+ description { state: "default" 0.0;
+ min: 40 40;
+ max: 40 40;
+ align: 1 0.5;
+ rel1.to: "elm.text.title";
+ rel1.relative: 0 0;
+ rel2.to: "elm.text.title";
+ rel2.relative: 0 1;
+ }
+ }
+ part { name: "elm.text.title";
+ type: TEXT;
+ scale: 1;
+ repeat_events: 1;
+ description { state: "default" 0.0;
+ text { font: "Sans,Edje-Vera";
+ size: 10;
+ min: 0 0;
+ max: 1 0;
+ align: 0.5 0.5;
+ }
+ color: 0 0 0 255;
+ align: 0.5 0.5;
+ }
+ }
+ part { name: "elm.text.subtitle";
+ type: TEXT;
+ scale: 1;
+ repeat_events: 1;
+ description { state: "default" 0.0;
+ text { font: "Sans,Edje-Vera";
+ size: 8;
+ min: 0 0;
+ max: 1 0;
+ align: 0.5 1;
+ }
+ rel1.to_y: "elm.text.title";
+ rel1.relative: 0 1;
+ color: 50 50 50 255;
+ align: 0.5 0;
+ }
+ }
+ part { name: "shade";
+ type: IMAGE;
+ mouse_events: 0;
+ description {
+ align: 0.5 1;
+ rel1.to_y: "elm.text.title";
+ rel1.relative: 0 1;
+ rel1.offset: 0 0;
+ rel2.offset: -1 5;
+ image.normal: "flip_shad.png";
+ }
+ }
+ }
+ programs {
+ program {
+ name: "title_clicked";
+ signal: "mouse,clicked,1";
+ source: "base";
+ action: SIGNAL_EMIT "elm,action,clicked" "elm";
+ }
+ }
+ }
}
Modified: trunk/elementary/src/bin/Makefile.am
===================================================================
--- trunk/elementary/src/bin/Makefile.am 2011-07-13 01:41:56 UTC (rev 61312)
+++ trunk/elementary/src/bin/Makefile.am 2011-07-13 04:21:50 UTC (rev 61313)
@@ -81,6 +81,7 @@
test_map.c \
test_menu.c \
test_multi.c \
+test_naviframe.c \
test_notify.c \
test_pager.c \
test_panel.c \
Modified: trunk/elementary/src/bin/test.c
===================================================================
--- trunk/elementary/src/bin/test.c 2011-07-13 01:41:56 UTC (rev 61312)
+++ trunk/elementary/src/bin/test.c 2011-07-13 04:21:50 UTC (rev 61313)
@@ -139,6 +139,7 @@
void test_glview_simple(void *data, Evas_Object *obj, void *event_info);
void test_glview(void *data, Evas_Object *obj, void *event_info);
void test_3d(void *data, Evas_Object *obj, void *event_info);
+void test_naviframe(void *data, Evas_Object *obj, void *event_info);
#ifdef HAVE_EIO
void test_eio(void *data, Evas_Object *obj, void *event_info);
#endif
@@ -416,6 +417,7 @@
ADD_TEST("3D", test_3d);
ADD_TEST("Genscroller", test_genscroller);
ADD_TEST("Gesture Layer", test_gesture_layer);
+ ADD_TEST("Naviframe", test_naviframe);
#undef ADD_TEST
if (autorun)
Modified: trunk/elementary/src/lib/Elementary.h.in
===================================================================
--- trunk/elementary/src/lib/Elementary.h.in 2011-07-13 01:41:56 UTC (rev 61312)
+++ trunk/elementary/src/lib/Elementary.h.in 2011-07-13 04:21:50 UTC (rev 61313)
@@ -7852,6 +7852,37 @@
EAPI Evas_Object *elm_player_add(Evas_Object *parent);
EAPI void elm_player_video_set(Evas_Object *player, Evas_Object *video);
+ /* naviframe */
+ typedef struct _Elm_Naviframe_Item Elm_Naviframe_Item;
+
+ typedef enum
+ {
+ ELM_NAVIFRAME_PREV_BUTTON,
+ ELM_NAVIFRAME_NEXT_BUTTON
+ } Elm_Naviframe_Button_Type;
+
+ EAPI Evas_Object *elm_naviframe_add(Evas_Object *parent) EINA_ARG_NONNULL(1);
+ EAPI Elm_Naviframe_Item *elm_naviframe_item_push(Evas_Object *obj, const char
*title_label, Evas_Object *prev_btn, Evas_Object *next_btn, Evas_Object
*content, const char *item_style) EINA_ARG_NONNULL(1, 5);
+ EAPI Evas_Object *elm_naviframe_item_pop(Evas_Object *obj)
EINA_ARG_NONNULL(1);
+ EAPI void elm_naviframe_content_preserve_on_pop_set(Evas_Object *obj,
Eina_Bool preserve) EINA_ARG_NONNULL(1);
+ EAPI Eina_Bool elm_naviframe_content_preserve_on_pop_get(const Evas_Object
*obj) EINA_ARG_NONNULL(1);
+ EAPI void elm_naviframe_item_content_set(Elm_Naviframe_Item *item,
Evas_Object *content) EINA_ARG_NONNULL(1);
+ EAPI Evas_Object *elm_naviframe_item_content_get(const Elm_Naviframe_Item
*it) EINA_ARG_NONNULL(1);
+ EAPI void elm_naviframe_item_title_label_set(Elm_Naviframe_Item *it, const
char *label) EINA_ARG_NONNULL(1);
+ EAPI const char *elm_naviframe_item_title_label_get(const Elm_Naviframe_Item
*it) EINA_ARG_NONNULL(1);
+ EAPI void elm_naviframe_item_subtitle_label_set(Elm_Naviframe_Item *it, const
char *label) EINA_ARG_NONNULL(1);
+ EAPI const char *elm_naviframe_item_subtitle_label_get(const
Elm_Naviframe_Item *it) EINA_ARG_NONNULL(1);
+ EAPI Elm_Naviframe_Item *elm_naviframe_top_item_get(const Evas_Object *obj)
EINA_ARG_NONNULL(1);
+ EAPI Elm_Naviframe_Item *elm_naviframe_bottom_item_get(const Evas_Object
*obj) EINA_ARG_NONNULL(1);
+ EAPI void elm_naviframe_item_button_set(Elm_Naviframe_Item *it, Evas_Object
*btn, Elm_Naviframe_Button_Type btn_type) EINA_ARG_NONNULL(1);
+ EAPI Evas_Object *elm_naviframe_item_button_get(const Elm_Naviframe_Item *it,
Elm_Naviframe_Button_Type btn_type) EINA_ARG_NONNULL(1);
+ EAPI void elm_naviframe_item_icon_set(Elm_Naviframe_Item *it, Evas_Object
*icon) EINA_ARG_NONNULL(1);
+ EAPI Evas_Object *elm_naviframe_item_icon_get(const Elm_Naviframe_Item *it)
EINA_ARG_NONNULL(1);
+ EAPI void elm_naviframe_item_style_set(Elm_Naviframe_Item *it, const char
*item_style) EINA_ARG_NONNULL(1);
+ EAPI const char *elm_naviframe_item_style_get(const Elm_Naviframe_Item *it)
EINA_ARG_NONNULL(1);
+ EAPI void elm_naviframe_item_title_visible_set(Elm_Naviframe_Item *it,
Eina_Bool visible) EINA_ARG_NONNULL(1);
+ EAPI Eina_Bool elm_naviframe_item_title_visible_get(const Elm_Naviframe_Item
*it) EINA_ARG_NONNULL(1);
+
#ifdef __cplusplus
}
#endif
Modified: trunk/elementary/src/lib/Makefile.am
===================================================================
--- trunk/elementary/src/lib/Makefile.am 2011-07-13 01:41:56 UTC (rev 61312)
+++ trunk/elementary/src/lib/Makefile.am 2011-07-13 04:21:50 UTC (rev 61313)
@@ -49,6 +49,7 @@
elc_fileselector.c \
elc_fileselector_entry.c \
elc_hoversel.c \
+elc_naviframe.c \
elc_player.c \
elc_scrolled_entry.c \
elm_actionslider.c \
------------------------------------------------------------------------------
AppSumo Presents a FREE Video for the SourceForge Community by Eric
Ries, the creator of the Lean Startup Methodology on "Lean Startup
Secrets Revealed." This video shows you how to validate your ideas,
optimize your ideas and identify your business strategy.
http://p.sf.net/sfu/appsumosfdev2dev
_______________________________________________
enlightenment-svn mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/enlightenment-svn
------------------------------------------------------------------------------
AppSumo Presents a FREE Video for the SourceForge Community by Eric
Ries, the creator of the Lean Startup Methodology on "Lean Startup
Secrets Revealed." This video shows you how to validate your ideas,
optimize your ideas and identify your business strategy.
http://p.sf.net/sfu/appsumosfdev2dev
_______________________________________________
enlightenment-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel