Enlightenment CVS committal Author : kwo Project : e16 Module : e
Dir : e16/e/src Modified Files: menus.c Log Message: Free un-loadable menu pixmaps some time after menu is closed. =================================================================== RCS file: /cvs/e/e16/e/src/menus.c,v retrieving revision 1.275 retrieving revision 1.276 diff -u -3 -r1.275 -r1.276 --- menus.c 18 May 2007 21:18:24 -0000 1.275 +++ menus.c 19 May 2007 08:41:40 -0000 1.276 @@ -46,6 +46,8 @@ #define DEBUG_MENU_EVENTS 0 +#define MENU_UNLOAD_CHECK_IMTERVAL 300 /* Seconds */ + static struct { Menu *first; @@ -108,6 +110,7 @@ char shown; char stuck; char redraw; + char filled; /* Has been filled */ Menu *parent; Menu *child; MenuItem *sel_item; @@ -578,7 +581,6 @@ Efree(m->title); if (m->data) Efree(m->data); - FreePmapMask(&m->pmm); Efree(m); } @@ -618,6 +620,31 @@ m->items = NULL; m->num = 0; m->sel_item = NULL; + + FreePmapMask(&m->pmm); + + m->filled = 0; +} + +static void +MenuFreePixmaps(Menu * m) +{ + int i, j; + MenuItem *mi; + + for (i = 0; i < m->num; i++) + { + mi = m->items[i]; + if (!mi) + continue; + + for (j = 0; j < 3; j++) + FreePmapMask(mi->pmm + j); + } + + FreePmapMask(&m->pmm); + + m->filled = 0; } void @@ -711,10 +738,7 @@ else if (m->icon_size == 0) w = h = Conf.menus.icon_size; if (w <= 0 || h <= 0) - { - EImageGetSize(im, &w, &h); - EImageFree(im); - } + EImageGetSize(im, &w, &h); m->items[i]->icon_w = w; m->items[i]->icon_h = h; m->items[i]->icon_win = @@ -724,6 +748,7 @@ maxh = h; if (w > maxx2) maxx2 = w; + EImageFree(im); } else m->items[i]->icon_iclass = NULL; @@ -899,6 +924,8 @@ MenuDrawItem(m, m->items[i], 0, -1); EShapePropagate(m->win); } + + m->filled = 1; } static void @@ -1956,14 +1983,18 @@ ts = time(0); ECORE_LIST_FOR_EACH(menu_list, m) { - if (!m->loader || m->shown || m->num == 0 || ts - m->last_access < 300) + if (m->shown || !m->filled || + ts - m->last_access < MENU_UNLOAD_CHECK_IMTERVAL) continue; - MenuEmpty(m, 0); + if (m->loader) + MenuEmpty(m, 0); + else + MenuFreePixmaps(m); m->last_change = 0; } - DoIn("MenusCheck", 300.0, MenusTimeout, 0, NULL); + DoIn("MenusCheck", 1. * MENU_UNLOAD_CHECK_IMTERVAL, MenusTimeout, 0, NULL); } /* @@ -1980,7 +2011,8 @@ break; case ESIGNAL_START: - DoIn("MenusCheck", 300.0, MenusTimeout, 0, NULL); + DoIn("MenusCheck", 1. * MENU_UNLOAD_CHECK_IMTERVAL, MenusTimeout, 0, + NULL); break; case ESIGNAL_AREA_SWITCH_START: ------------------------------------------------------------------------- This SF.net email is sponsored by DB2 Express Download DB2 Express C - the FREE version of DB2 express and take control of your XML. No limits. Just data. Click to get it now. http://sourceforge.net/powerbar/db2/ _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs