fixed memory leak

git-svn-id: http://tint2.googlecode.com/svn/trunk@21 121b4492-b84c-0410-8b4c-0d4edfb3f3cc
This commit is contained in:
lorthiois@bbsoft.fr 2008-11-18 22:14:01 +00:00
parent d29f3771de
commit 89bcccb468
6 changed files with 27 additions and 16 deletions

View file

@ -22,7 +22,7 @@ endif
$(PROGNAME): $(FILES) $(SYSTRAYOBJ)
$(CC) $(CFLAGS) -I. -Iutil -Iclock -Itaskbar -Isystray -o $(PROGNAME) $(FILES) $(FLAGS)
strip $(PROGNAME)
#strip $(PROGNAME)
install:
mkdir -p $(BINDIR)

View file

@ -46,23 +46,27 @@
void cleanup_taskbar()
{
free_area(&panel.area);
GSList *l0;
Task *tsk;
int i, nb;
Task *tsk, *next;
nb = panel.nb_desktop * panel.nb_monitor;
for (i=0 ; i < nb ; i++) {
/* TODO: voir ce code !!
for (tsk = panel.taskbar[i].tasklist; tsk ; tsk = next) {
next = tsk->next;
l0 = panel.taskbar[i].area.list;
while (l0) {
tsk = l0->data;
l0 = l0->next;
// careful : remove_task change l0->next
remove_task (tsk);
}
*/
free_area (&panel.taskbar[i].area);
}
free(panel.taskbar);
panel.taskbar = 0;
free_area(&panel.area);
}

View file

@ -65,14 +65,15 @@ void add_task (Window win)
new_tsk->title = 0;
}
if (new_tsk->icon_data) {
XFree (new_tsk->icon_data);
free (new_tsk->icon_data);
new_tsk->icon_data = 0;
}
free(new_tsk);
fprintf(stderr, "task on all desktop : ignored\n");
return;
}
//printf("add_task %d %s\n", index(desktop, monitor), new_tsk->title);
Taskbar *tskbar;
tskbar = &panel.taskbar[index(desktop, monitor)];
new_tsk->area.parent = tskbar;
@ -92,13 +93,14 @@ void remove_task (Task *tsk)
tskbar->area.list = g_slist_remove(tskbar->area.list, tsk);
resize_tasks (tskbar);
redraw (&tskbar->area);
//printf("remove_task %d %s\n", index(tskbar->desktop, tskbar->monitor), tsk->title);
if (tsk->title) {
free (tsk->title);
tsk->title = 0;
}
if (tsk->icon_data) {
XFree (tsk->icon_data);
free (tsk->icon_data);
tsk->icon_data = 0;
}
XFreePixmap (server.dsp, tsk->area.pmap);

View file

@ -66,14 +66,17 @@ void task_refresh_tasklist ()
nb = panel.nb_desktop * panel.nb_monitor;
for (i=0 ; i < nb ; i++) {
for (l0 = panel.taskbar[i].area.list; l0 ; l0 = l0->next) {
l0 = panel.taskbar[i].area.list;
while (l0) {
tsk = l0->data;
l0 = l0->next;
if (tsk->win == active_win) panel.task_active = tsk;
for (j = 0; j < num_results; j++) {
if (tsk->win == win[j]) break;
}
// careful : remove_task change l0->next
if (tsk->win != win[j]) remove_task (tsk);
}
}

View file

@ -288,9 +288,11 @@ void event_property_notify (Window win, Atom at)
}
/* Window icon changed */
else if (at == server.atom._NET_WM_ICON) {
if (tsk->icon_data != 0) XFree (tsk->icon_data);
if (tsk->icon_data) {
free (tsk->icon_data);
tsk->icon_data = 0;
}
tsk->area.redraw = 1;
tsk->icon_data = 0;
panel.refresh = 1;
}
/* Window desktop changed */

BIN
src/tint2

Binary file not shown.