fixed memory leak
git-svn-id: http://tint2.googlecode.com/svn/trunk@21 121b4492-b84c-0410-8b4c-0d4edfb3f3cc
This commit is contained in:
parent
d29f3771de
commit
89bcccb468
6 changed files with 27 additions and 16 deletions
|
@ -22,7 +22,7 @@ endif
|
||||||
|
|
||||||
$(PROGNAME): $(FILES) $(SYSTRAYOBJ)
|
$(PROGNAME): $(FILES) $(SYSTRAYOBJ)
|
||||||
$(CC) $(CFLAGS) -I. -Iutil -Iclock -Itaskbar -Isystray -o $(PROGNAME) $(FILES) $(FLAGS)
|
$(CC) $(CFLAGS) -I. -Iutil -Iclock -Itaskbar -Isystray -o $(PROGNAME) $(FILES) $(FLAGS)
|
||||||
strip $(PROGNAME)
|
#strip $(PROGNAME)
|
||||||
|
|
||||||
install:
|
install:
|
||||||
mkdir -p $(BINDIR)
|
mkdir -p $(BINDIR)
|
||||||
|
|
18
src/config.c
18
src/config.c
|
@ -46,23 +46,27 @@
|
||||||
|
|
||||||
void cleanup_taskbar()
|
void cleanup_taskbar()
|
||||||
{
|
{
|
||||||
free_area(&panel.area);
|
GSList *l0;
|
||||||
|
Task *tsk;
|
||||||
|
|
||||||
int i, nb;
|
int i, nb;
|
||||||
Task *tsk, *next;
|
|
||||||
|
|
||||||
nb = panel.nb_desktop * panel.nb_monitor;
|
nb = panel.nb_desktop * panel.nb_monitor;
|
||||||
for (i=0 ; i < nb ; i++) {
|
for (i=0 ; i < nb ; i++) {
|
||||||
/* TODO: voir ce code !!
|
l0 = panel.taskbar[i].area.list;
|
||||||
for (tsk = panel.taskbar[i].tasklist; tsk ; tsk = next) {
|
while (l0) {
|
||||||
next = tsk->next;
|
tsk = l0->data;
|
||||||
|
l0 = l0->next;
|
||||||
|
// careful : remove_task change l0->next
|
||||||
remove_task (tsk);
|
remove_task (tsk);
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
|
free_area (&panel.taskbar[i].area);
|
||||||
}
|
}
|
||||||
|
|
||||||
free(panel.taskbar);
|
free(panel.taskbar);
|
||||||
panel.taskbar = 0;
|
panel.taskbar = 0;
|
||||||
|
|
||||||
|
free_area(&panel.area);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -65,7 +65,7 @@ void add_task (Window win)
|
||||||
new_tsk->title = 0;
|
new_tsk->title = 0;
|
||||||
}
|
}
|
||||||
if (new_tsk->icon_data) {
|
if (new_tsk->icon_data) {
|
||||||
XFree (new_tsk->icon_data);
|
free (new_tsk->icon_data);
|
||||||
new_tsk->icon_data = 0;
|
new_tsk->icon_data = 0;
|
||||||
}
|
}
|
||||||
free(new_tsk);
|
free(new_tsk);
|
||||||
|
@ -73,6 +73,7 @@ void add_task (Window win)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//printf("add_task %d %s\n", index(desktop, monitor), new_tsk->title);
|
||||||
Taskbar *tskbar;
|
Taskbar *tskbar;
|
||||||
tskbar = &panel.taskbar[index(desktop, monitor)];
|
tskbar = &panel.taskbar[index(desktop, monitor)];
|
||||||
new_tsk->area.parent = tskbar;
|
new_tsk->area.parent = tskbar;
|
||||||
|
@ -92,13 +93,14 @@ void remove_task (Task *tsk)
|
||||||
tskbar->area.list = g_slist_remove(tskbar->area.list, tsk);
|
tskbar->area.list = g_slist_remove(tskbar->area.list, tsk);
|
||||||
resize_tasks (tskbar);
|
resize_tasks (tskbar);
|
||||||
redraw (&tskbar->area);
|
redraw (&tskbar->area);
|
||||||
|
//printf("remove_task %d %s\n", index(tskbar->desktop, tskbar->monitor), tsk->title);
|
||||||
|
|
||||||
if (tsk->title) {
|
if (tsk->title) {
|
||||||
free (tsk->title);
|
free (tsk->title);
|
||||||
tsk->title = 0;
|
tsk->title = 0;
|
||||||
}
|
}
|
||||||
if (tsk->icon_data) {
|
if (tsk->icon_data) {
|
||||||
XFree (tsk->icon_data);
|
free (tsk->icon_data);
|
||||||
tsk->icon_data = 0;
|
tsk->icon_data = 0;
|
||||||
}
|
}
|
||||||
XFreePixmap (server.dsp, tsk->area.pmap);
|
XFreePixmap (server.dsp, tsk->area.pmap);
|
||||||
|
|
|
@ -66,14 +66,17 @@ void task_refresh_tasklist ()
|
||||||
|
|
||||||
nb = panel.nb_desktop * panel.nb_monitor;
|
nb = panel.nb_desktop * panel.nb_monitor;
|
||||||
for (i=0 ; i < nb ; i++) {
|
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;
|
tsk = l0->data;
|
||||||
|
l0 = l0->next;
|
||||||
|
|
||||||
if (tsk->win == active_win) panel.task_active = tsk;
|
if (tsk->win == active_win) panel.task_active = tsk;
|
||||||
|
|
||||||
for (j = 0; j < num_results; j++) {
|
for (j = 0; j < num_results; j++) {
|
||||||
if (tsk->win == win[j]) break;
|
if (tsk->win == win[j]) break;
|
||||||
}
|
}
|
||||||
|
// careful : remove_task change l0->next
|
||||||
if (tsk->win != win[j]) remove_task (tsk);
|
if (tsk->win != win[j]) remove_task (tsk);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -288,9 +288,11 @@ void event_property_notify (Window win, Atom at)
|
||||||
}
|
}
|
||||||
/* Window icon changed */
|
/* Window icon changed */
|
||||||
else if (at == server.atom._NET_WM_ICON) {
|
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->area.redraw = 1;
|
||||||
tsk->icon_data = 0;
|
|
||||||
panel.refresh = 1;
|
panel.refresh = 1;
|
||||||
}
|
}
|
||||||
/* Window desktop changed */
|
/* Window desktop changed */
|
||||||
|
|
BIN
src/tint2
BIN
src/tint2
Binary file not shown.
Loading…
Reference in a new issue