Enlightenment CVS committal
Author : kwo
Project : e16
Module : e
Dir : e16/e/src
Modified Files:
E.h iconify.c
Log Message:
Imlib2 - Fix iconbox.
===================================================================
RCS file: /cvsroot/enlightenment/e16/e/src/E.h,v
retrieving revision 1.149
retrieving revision 1.150
diff -u -3 -r1.149 -r1.150
--- E.h 22 Nov 2003 00:15:39 -0000 1.149
+++ E.h 22 Nov 2003 16:18:57 -0000 1.150
@@ -2331,28 +2331,8 @@
void IconboxHandleEvent(XEvent * ev);
void UpdateAppIcon(EWin * ewin, int imode);
void IconboxResize(Iconbox * ib, int w, int h);
-void IB_FixPos(Iconbox * ib);
-void IB_DrawScroll(Iconbox * ib);
-EWin *IB_FindIcon(Iconbox * ib, int px, int py);
-void IB_CalcMax(Iconbox * ib);
-void IB_Scroll(Iconbox * ib, int dir);
-void IB_ShowMenu(Iconbox * ib, int x, int y);
void IB_CompleteRedraw(Iconbox * ib);
-void IB_SnapEWin(EWin * ewin);
-void IB_GetAppIcon(EWin * ewin);
-void IB_PasteDefaultBase(Drawable d, int x, int y, int w, int h);
-void IB_PasteDefaultBaseMask(Drawable d, int x, int y, int w,
- int h);
-void IB_GetEIcon(EWin * ewin);
-void IB_AddIcondef(char *title, char *name, char *class,
- char *file);
-void IB_RemoveIcondef(Icondef * idef);
-Icondef *IB_MatchIcondef(char *title, char *name, char *class);
-Icondef **IB_ListIcondef(int *num);
void IB_Setup(void);
-void IB_LoadIcondefs(void);
-void IB_ReLoadIcondefs(void);
-void IB_SaveIcondefs(void);
Iconbox **ListAllIconboxes(int *num);
Iconbox *SelectIconboxForEwin(EWin * ewin);
===================================================================
RCS file: /cvsroot/enlightenment/e16/e/src/iconify.c,v
retrieving revision 1.71
retrieving revision 1.72
diff -u -3 -r1.71 -r1.72
--- iconify.c 15 Nov 2003 22:27:17 -0000 1.71
+++ iconify.c 22 Nov 2003 16:18:57 -0000 1.72
@@ -602,7 +602,7 @@
}
}
-void
+static void
IB_SnapEWin(EWin * ewin)
{
int w, h, ord, rn, i;
@@ -683,7 +683,7 @@
FreePmapMask(&ewin->icon_pmm);
}
-void
+static void
IB_GetAppIcon(EWin * ewin)
{
/* get the applications icon pixmap and make a copy... */
@@ -729,7 +729,7 @@
FreePmapMask(&ewin->icon_pmm);
}
-void
+static void
IB_PasteDefaultBase(Drawable d, int x, int y, int w, int h)
{
ImageClass *ic;
@@ -745,7 +745,7 @@
FreePmapMask(&pmm);
}
-void
+static void
IB_PasteDefaultBaseMask(Drawable d, int x, int y, int w, int h)
{
ImageClass *ic;
@@ -773,7 +773,60 @@
FreePmapMask(&pmm);
}
-void
+static Icondef **
+IB_ListIcondef(int *num)
+{
+ return (Icondef **) ListItemType(num, LIST_TYPE_ICONDEF);
+}
+
+static Icondef *
+IB_MatchIcondef(char *title, char *name, char *class)
+{
+ /* return an icondef that matches the data given */
+ Icondef **il, *idef;
+ int i, num;
+
+ il = IB_ListIcondef(&num);
+ if (il)
+ {
+ for (i = 0; i < num; i++)
+ {
+ char match = 1;
+
+ if ((il[i]->title_match) && (!title))
+ match = 0;
+ if ((il[i]->name_match) && (!name))
+ match = 0;
+ if ((il[i]->class_match) && (!class))
+ match = 0;
+ if ((il[i]->title_match) && (title))
+ {
+ if (!matchregexp(il[i]->title_match, title))
+ match = 0;
+ }
+ if ((il[i]->name_match) && (name))
+ {
+ if (!matchregexp(il[i]->name_match, name))
+ match = 0;
+ }
+ if ((il[i]->class_match) && (class))
+ {
+ if (!matchregexp(il[i]->class_match, class))
+ match = 0;
+ }
+ if (match)
+ {
+ idef = il[i];
+ Efree(il);
+ return idef;
+ }
+ }
+ Efree(il);
+ }
+ return NULL;
+}
+
+static void
IB_GetEIcon(EWin * ewin)
{
/* get the icon defined for this window in E's iconf match file */
@@ -796,6 +849,7 @@
imlib_context_set_image(im);
w = imlib_image_get_width();
h = imlib_image_get_height();
+
ib = SelectIconboxForEwin(ewin);
if (ib)
{
@@ -848,7 +902,7 @@
AddItem(idef, "", 0, LIST_TYPE_ICONDEF);
}
-void
+static void
IB_RemoveIcondef(Icondef * idef)
{
/* remove the pointed to icondef from our database */
@@ -868,62 +922,9 @@
Efree(idef);
}
-Icondef *
-IB_MatchIcondef(char *title, char *name, char *class)
-{
- /* return an icondef that matches the data given */
- Icondef **il, *idef;
- int i, num;
-
- il = IB_ListIcondef(&num);
- if (il)
- {
- for (i = 0; i < num; i++)
- {
- char match = 1;
-
- if ((il[i]->title_match) && (!title))
- match = 0;
- if ((il[i]->name_match) && (!name))
- match = 0;
- if ((il[i]->class_match) && (!class))
- match = 0;
- if ((il[i]->title_match) && (title))
- {
- if (!matchregexp(il[i]->title_match, title))
- match = 0;
- }
- if ((il[i]->name_match) && (name))
- {
- if (!matchregexp(il[i]->name_match, name))
- match = 0;
- }
- if ((il[i]->class_match) && (class))
- {
- if (!matchregexp(il[i]->class_match, class))
- match = 0;
- }
- if (match)
- {
- idef = il[i];
- Efree(il);
- return idef;
- }
- }
- Efree(il);
- }
- return NULL;
-}
-
-Icondef **
-IB_ListIcondef(int *num)
-{
- return (Icondef **) ListItemType(num, LIST_TYPE_ICONDEF);
-}
-
static time_t last_icondefs_time = 0;
-void
+static void
IB_LoadIcondefs(void)
{
/* load the icon defs */
@@ -963,7 +964,7 @@
Efree(ff);
}
-void
+static void
IB_ReLoadIcondefs(void)
{
/* stat the icondefs and compare mod date to last known mod date - if */
@@ -1007,7 +1008,8 @@
data = NULL;
}
-void
+#if 0 /* Not used */
+static void
IB_SaveIcondefs(void)
{
/* save the icondefs */
@@ -1052,6 +1054,7 @@
last_icondefs_time = moddate(s);
}
}
+#endif
Iconbox **
ListAllIconboxes(int *num)
@@ -1194,7 +1197,7 @@
}
}
-void
+static void
IB_CalcMax(Iconbox * ib)
{
int i, x, y;
@@ -1235,7 +1238,7 @@
ib->max = 1;
}
-EWin *
+static EWin *
IB_FindIcon(Iconbox * ib, int px, int py)
{
int i, x = 0, y = 0;
@@ -1265,6 +1268,7 @@
y += ic->padding.top;
}
}
+
for (i = 0; i < ib->num_icons; i++)
{
int w, h, xx, yy;
@@ -1315,7 +1319,7 @@
return NULL;
}
-void
+static void
IB_DrawScroll(Iconbox * ib)
{
ImageClass *ic;
@@ -1815,7 +1819,7 @@
}
}
-void
+static void
IB_FixPos(Iconbox * ib)
{
if (ib->orientation)
@@ -1849,58 +1853,34 @@
}
-static void
-IB_RedrawIconboxAux1(Iconbox * ib, ImageClass * ic)
-{
- int iw, ih;
-
- if (!ib->nobg)
- {
- if (ic)
- {
- PmapMask pmm;
-
- GetWinWH(ib->icon_win, (unsigned int *)&iw, (unsigned int *)&ih);
- IclassApplyCopy(ic, ib->icon_win, iw, ih, 0, 0, STATE_NORMAL,
- &pmm, 1);
- EShapeCombineMask(disp, ib->icon_win, ShapeBounding, 0, 0,
- pmm.mask, ShapeSet);
- PastePixmap(disp, ib->pmap, pmm.pmap, pmm.mask, 0, 0);
- FreePmapMask(&pmm);
- }
- /* Else what ? */
- }
- else
- {
- GC gc;
- XGCValues gcv;
- Pixmap m;
-
- GetWinWH(ib->icon_win, (unsigned int *)&iw, (unsigned int *)&ih);
- m = ECreatePixmap(disp, ib->icon_win, iw, ih, 1);
- gc = XCreateGC(disp, m, 0, &gcv);
- XSetForeground(disp, gc, 0);
- XFillRectangle(disp, m, gc, 0, 0, iw, ih);
- XFreeGC(disp, gc);
- EFreePixmap(disp, m);
- }
-}
-
void
RedrawIconbox(Iconbox * ib)
{
- ImageClass *ic;
Pixmap m = 0;
char pq;
char was_shaded = 0;
+ int i, x, y, w, h;
+ ImageClass *ib_ic_cover, *ib_ic_box;
+ int ib_x0, ib_y0, ib_xlt, ib_ylt, ib_ww, ib_hh;
if (!ib)
return;
+ if (ib->orientation)
+ {
+ ib_ic_box = FindItem("ICONBOX_VERTICAL", 0,
+ LIST_FINDBY_NAME, LIST_TYPE_ICLASS);
+ }
+ else
+ {
+ ib_ic_box = FindItem("ICONBOX_HORIZONTAL", 0,
+ LIST_FINDBY_NAME, LIST_TYPE_ICLASS);
+ }
+
if ((ib->auto_resize) && (ib->ewin))
{
int add = 0;
- int x, y, w, h, px, py, pw, ph;
+ int px, py, pw, ph;
if (ib->ewin->shaded)
{
@@ -1913,10 +1893,8 @@
h = ib->ewin->client.h;
if (ib->orientation)
{
- ic = FindItem("ICONBOX_VERTICAL", 0, LIST_FINDBY_NAME,
- LIST_TYPE_ICLASS);
- if (ic)
- add = ic->padding.top + ic->padding.bottom;
+ if (ib_ic_box)
+ add = ib_ic_box->padding.top + ib_ic_box->padding.bottom;
if (ib->ewin->border)
{
if ((ib->ewin->border->border.top +
@@ -1945,10 +1923,8 @@
}
else
{
- ic = FindItem("ICONBOX_HORIZONTAL", 0, LIST_FINDBY_NAME,
- LIST_TYPE_ICLASS);
- if (ic)
- add = ic->padding.left + ic->padding.right;
+ if (ib_ic_box)
+ add = ib_ic_box->padding.left + ib_ic_box->padding.right;
if (ib->ewin->border)
{
if ((ib->ewin->border->border.left +
@@ -1996,10 +1972,8 @@
IB_CalcMax(ib);
if (ib->orientation)
{
- ic = FindItem("ICONBOX_VERTICAL", 0, LIST_FINDBY_NAME,
- LIST_TYPE_ICLASS);
- if (ic)
- add = ic->padding.top + ic->padding.bottom;
+ if (ib_ic_box)
+ add = ib_ic_box->padding.top + ib_ic_box->padding.bottom;
add += ib->max;
if (ib->ewin->border)
{
@@ -2029,10 +2003,8 @@
}
else
{
- ic = FindItem("ICONBOX_HORIZONTAL", 0, LIST_FINDBY_NAME,
- LIST_TYPE_ICLASS);
- if (ic)
- add = ic->padding.left + ic->padding.right;
+ if (ib_ic_box)
+ add = ib_ic_box->padding.left + ib_ic_box->padding.right;
add += ib->max;
if (ib->ewin->border)
{
@@ -2085,203 +2057,134 @@
if (ib->orientation)
{
- int i;
- int x, y;
-
- if (ib->scrollbar_side == 1)
- {
- /* right */
- EMoveResizeWindow(disp, ib->icon_win, 0, 0,
- ib->w - ib->scroll_thickness, ib->h);
- if ((ic =
- FindItem("ICONBOX_COVER_VERTICAL", 0, LIST_FINDBY_NAME,
- LIST_TYPE_ICLASS)) && (!(ib->cover_hide)))
- {
- EMoveResizeWindow(disp, ib->cover_win, 0, 0,
- ib->w - ib->scroll_thickness, ib->h);
- EMapWindow(disp, ib->cover_win);
- IclassApply(ic, ib->cover_win, -1, -1, 0, 0, STATE_NORMAL, 0);
- }
- else
- {
- EMoveResizeWindow(disp, ib->cover_win, -30000, -30000, 2, 2);
- EUnmapWindow(disp, ib->cover_win);
- }
- }
- else
- {
- /* left */
- EMoveResizeWindow(disp, ib->icon_win, ib->scroll_thickness, 0,
- ib->w - ib->scroll_thickness, ib->h);
- if ((ic =
- FindItem("ICONBOX_COVER_VERTICAL", 0, LIST_FINDBY_NAME,
- LIST_TYPE_ICLASS)) && (!(ib->cover_hide)))
- {
- EMoveResizeWindow(disp, ib->cover_win, ib->scroll_thickness,
- 0, ib->w - ib->scroll_thickness, ib->h);
- EMapWindow(disp, ib->cover_win);
- IclassApply(ic, ib->cover_win, -1, -1, 0, 0, STATE_NORMAL, 0);
- }
- else
- {
- EMoveResizeWindow(disp, ib->cover_win, -30000, -30000, 2, 2);
- EUnmapWindow(disp, ib->cover_win);
- }
- }
-
- ic = FindItem("ICONBOX_VERTICAL", 0, LIST_FINDBY_NAME,
- LIST_TYPE_ICLASS);
-
- IB_RedrawIconboxAux1(ib, ic);
+ ib_ic_cover = FindItem("ICONBOX_COVER_VERTICAL", 0,
+ LIST_FINDBY_NAME, LIST_TYPE_ICLASS);
+ ib_x0 = 0;
+ ib_y0 = -ib->pos;
+ ib_xlt = (ib->scrollbar_side == 1) ? 0 : ib->scroll_thickness;
+ ib_ylt = 0;
+ ib_ww = ib->w - ib->scroll_thickness;
+ ib_hh = ib->h;
+ }
+ else
+ {
+ ib_ic_cover = FindItem("ICONBOX_COVER_HORIZONTAL", 0,
+ LIST_FINDBY_NAME, LIST_TYPE_ICLASS);
+ ib_x0 = -ib->pos;
+ ib_y0 = 0;
+ ib_xlt = 0;
+ ib_ylt = (ib->scrollbar_side == 1) ? 0 : ib->scroll_thickness;
+ ib_ww = ib->w;
+ ib_hh = ib->h - ib->scroll_thickness;
+ }
+
+ EMoveResizeWindow(disp, ib->icon_win, ib_xlt, ib_ylt, ib_ww, ib_hh);
+
+ if (ib_ic_cover && (!(ib->cover_hide)))
+ {
+ EMoveResizeWindow(disp, ib->cover_win, ib_xlt, ib_ylt, ib_ww, ib_hh);
+ EMapWindow(disp, ib->cover_win);
+ IclassApply(ib_ic_cover, ib->cover_win, -1, -1, 0, 0, STATE_NORMAL, 0);
+ }
+ else
+ {
+ EMoveResizeWindow(disp, ib->cover_win, -30000, -30000, 2, 2);
+ EUnmapWindow(disp, ib->cover_win);
+ }
- y = -ib->pos;
- x = 0;
- if (ic)
- {
- x += ic->padding.left;
- y += ic->padding.top;
- }
- for (i = 0; i < ib->num_icons; i++)
+ if (!ib->nobg)
+ {
+ if (ib_ic_box)
{
- int w, h;
- EWin *ewin;
+ PmapMask pmm;
- w = 8;
- h = 8;
- ewin = ib->icons[i];
- if (!ewin->icon_pmm.pmap)
- UpdateAppIcon(ewin, ib->icon_mode);
- if (ewin->icon_pmm.pmap)
- {
- w = ewin->icon_w;
- h = ewin->icon_h;
- if (ib->draw_icon_base)
- {
- IB_PasteDefaultBase(ib->pmap, x, y, ib->iconsize,
- ib->iconsize);
- if (ib->nobg)
- IB_PasteDefaultBaseMask(m, x, y, ib->iconsize,
- ib->iconsize);
- }
- if (ib->draw_icon_base)
- PastePixmap(disp, ib->pmap, ewin->icon_pmm.pmap,
- ewin->icon_pmm.mask,
- x + ((ib->iconsize - w) / 2),
- y + ((ib->iconsize - h) / 2));
- else
- PastePixmap(disp, ib->pmap, ewin->icon_pmm.pmap,
- ewin->icon_pmm.mask,
- x + ((ib->iconsize - w) / 2), y);
- if (ib->nobg)
- PasteMask(disp, m, ewin->icon_pmm.mask,
- x + ((ib->iconsize - w) / 2), y, w, h);
- }
- if (ib->draw_icon_base)
- y += ib->iconsize;
- else
- y += h + 2;
+ GetWinWH(ib->icon_win, (unsigned int *)&w, (unsigned int *)&h);
+ IclassApplyCopy(ib_ic_box, ib->icon_win, w, h, 0, 0, STATE_NORMAL,
+ &pmm, 1);
+ EShapeCombineMask(disp, ib->icon_win, ShapeBounding, 0, 0,
+ pmm.mask, ShapeSet);
+ PastePixmap(disp, ib->pmap, pmm.pmap, pmm.mask, 0, 0);
+ FreePmapMask(&pmm);
}
+ /* Else what ? */
}
else
{
- int i;
- int x, y;
+ GC gc;
+ XGCValues gcv;
- if (ib->scrollbar_side == 1)
+ GetWinWH(ib->icon_win, (unsigned int *)&w, (unsigned int *)&h);
+ m = ECreatePixmap(disp, ib->icon_win, w, h, 1);
+ gc = XCreateGC(disp, m, 0, &gcv);
+ XSetForeground(disp, gc, 0);
+ XFillRectangle(disp, m, gc, 0, 0, w, h);
+ XFreeGC(disp, gc);
+ }
+
+ x = ib_x0;
+ y = ib_y0;
+ if (ib_ic_box)
+ {
+ x += ib_ic_box->padding.left;
+ y += ib_ic_box->padding.top;
+ }
+
+ for (i = 0; i < ib->num_icons; i++)
+ {
+ EWin *ewin;
+
+ w = 8;
+ h = 8;
+
+ ewin = ib->icons[i];
+
+ if (!ewin->icon_pmm.pmap)
+ UpdateAppIcon(ewin, ib->icon_mode);
+ if (ewin->icon_pmm.pmap)
{
- /* bottom */
- EMoveResizeWindow(disp, ib->icon_win, 0, 0, ib->w,
- ib->h - ib->scroll_thickness);
- if ((ic =
- FindItem("ICONBOX_COVER_HORIZONTAL", 0, LIST_FINDBY_NAME,
- LIST_TYPE_ICLASS)) && (!(ib->cover_hide)))
- {
- EMoveResizeWindow(disp, ib->cover_win, 0, 0, ib->w,
- ib->h - ib->scroll_thickness);
- EMapWindow(disp, ib->cover_win);
- IclassApply(ic, ib->cover_win, -1, -1, 0, 0, STATE_NORMAL, 0);
- }
- else
+ int xoff, yoff;
+
+ w = ewin->icon_w;
+ h = ewin->icon_h;
+ if (ib->orientation)
{
- EMoveResizeWindow(disp, ib->cover_win, -30000, -30000, 2, 2);
- EUnmapWindow(disp, ib->cover_win);
- }
- }
- else
- {
- /* top */
- EMoveResizeWindow(disp, ib->icon_win, 0, ib->scroll_thickness,
- ib->w, ib->h - ib->scroll_thickness);
- if ((ic =
- FindItem("ICONBOX_COVER_HORIZONTAL", 0, LIST_FINDBY_NAME,
- LIST_TYPE_ICLASS)) && (!(ib->cover_hide)))
- {
- EMoveResizeWindow(disp, ib->cover_win, 0,
- ib->scroll_thickness, ib->w,
- ib->h - ib->scroll_thickness);
- EMapWindow(disp, ib->cover_win);
- IclassApply(ic, ib->cover_win, -1, -1, 0, 0, STATE_NORMAL, 0);
+ xoff = (ib->iconsize - w) / 2;
+ yoff = 0;
}
else
{
- EMoveResizeWindow(disp, ib->cover_win, -30000, -30000, 2, 2);
- EUnmapWindow(disp, ib->cover_win);
+ xoff = 0;
+ yoff = (ib->iconsize - h) / 2;
}
- }
-
- ic = FindItem("ICONBOX_HORIZONTAL", 0, LIST_FINDBY_NAME,
- LIST_TYPE_ICLASS);
-
- IB_RedrawIconboxAux1(ib, ic);
-
- x = -ib->pos;
- y = 0;
- if (ic)
- {
- x += ic->padding.left;
- y += ic->padding.top;
- }
- for (i = 0; i < ib->num_icons; i++)
- {
- int w, h;
- EWin *ewin;
-
- w = 8;
- h = 8;
- ewin = ib->icons[i];
- if (!ewin->icon_pmm.pmap)
- UpdateAppIcon(ewin, ib->icon_mode);
- if (ewin->icon_pmm.pmap)
+ if (ib->draw_icon_base)
{
- w = ewin->icon_w;
- h = ewin->icon_h;
- if (ib->draw_icon_base)
- {
- IB_PasteDefaultBase(ib->pmap, x, y, ib->iconsize,
- ib->iconsize);
- if (ib->nobg)
- IB_PasteDefaultBaseMask(m, x, y, ib->iconsize,
- ib->iconsize);
- }
- if (ib->draw_icon_base)
- PastePixmap(disp, ib->pmap, ewin->icon_pmm.pmap,
- ewin->icon_pmm.mask,
- x + ((ib->iconsize - w) / 2),
- y + ((ib->iconsize - h) / 2));
- else
- PastePixmap(disp, ib->pmap, ewin->icon_pmm.pmap,
- ewin->icon_pmm.mask, x,
- y + ((ib->iconsize - h) / 2));
+ IB_PasteDefaultBase(ib->pmap, x, y, ib->iconsize,
+ ib->iconsize);
if (ib->nobg)
- PasteMask(disp, m, ewin->icon_pmm.mask, x,
- y + ((ib->iconsize - h) / 2), w, h);
+ IB_PasteDefaultBaseMask(m, x, y, ib->iconsize,
+ ib->iconsize);
}
+
if (ib->draw_icon_base)
- x += ib->iconsize;
+ PastePixmap(disp, ib->pmap, ewin->icon_pmm.pmap,
+ ewin->icon_pmm.mask,
+ x + ((ib->iconsize - w) / 2),
+ y + ((ib->iconsize - h) / 2));
else
- x += w + 2;
+ PastePixmap(disp, ib->pmap, ewin->icon_pmm.pmap,
+ ewin->icon_pmm.mask, x + xoff, y + yoff);
+
+ if (ib->nobg)
+ PasteMask(disp, m, ewin->icon_pmm.mask,
+ x + xoff, y + yoff, w, h);
}
+
+ if (ib->orientation)
+ y += (ib->draw_icon_base) ? ib->iconsize : h + 2;
+ else
+ x += (ib->draw_icon_base) ? ib->iconsize : w + 2;
}
+
if (ib->nobg)
{
EShapeCombineMask(disp, ib->icon_win, ShapeBounding, 0, 0, m, ShapeSet);
@@ -2292,11 +2195,13 @@
ESetWindowBackgroundPixmap(disp, ib->icon_win, ib->pmap);
XClearWindow(disp, ib->icon_win);
PropagateShapes(ib->win);
+
if (ib->ewin)
{
ICCCM_GetShapeInfo(ib->ewin);
PropagateShapes(ib->ewin->win);
}
+
queue_up = pq;
}
@@ -2313,7 +2218,7 @@
RedrawIconbox(ib);
}
-void
+static void
IB_Scroll(Iconbox * ib, int dir)
{
ib->pos += dir;
@@ -2321,7 +2226,7 @@
RedrawIconbox(ib);
}
-void
+static void
IB_ShowMenu(Iconbox * ib, int x, int y)
{
static Menu *p_menu = NULL;
-------------------------------------------------------
This SF.net email is sponsored by: SF.net Giveback Program.
Does SourceForge.net help you be more productive? Does it
help you create better code? SHARE THE LOVE, and help us help
YOU! Click Here: http://sourceforge.net/donate/
_______________________________________________
enlightenment-cvs mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs