all repos — tint2 @ 89bcccb4680c5838ceecc993285111d3f9ecd78a

fork of the tint2 desktop panel for my custom setup - only minimized windows across all desktops for the taskbar

fixed memory leak

git-svn-id: http://tint2.googlecode.com/svn/trunk@21 121b4492-b84c-0410-8b4c-0d4edfb3f3cc
lorthiois@bbsoft.fr lorthiois@bbsoft.fr@121b4492-b84c-0410-8b4c-0d4edfb3f3cc
commit

89bcccb4680c5838ceecc993285111d3f9ecd78a

parent

d29f3771dec8a60d4438c44540915a0377126b4c

6 files changed, 27 insertions(+), 16 deletions(-)

jump to
M src/Makefilesrc/Makefile

@@ -22,7 +22,7 @@

$(PROGNAME): $(FILES) $(SYSTRAYOBJ) $(CC) $(CFLAGS) -I. -Iutil -Iclock -Itaskbar -Isystray -o $(PROGNAME) $(FILES) $(FLAGS) - strip $(PROGNAME) + #strip $(PROGNAME) install: mkdir -p $(BINDIR)
M src/config.csrc/config.c

@@ -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); }
M src/taskbar/task.csrc/taskbar/task.c

@@ -65,14 +65,15 @@ free (new_tsk->title);

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 @@ tskbar = (Taskbar*)tsk->area.parent;

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);
M src/taskbar/taskbar.csrc/taskbar/taskbar.c

@@ -66,14 +66,17 @@ active_win = window_get_active ();

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); } }
M src/tint.csrc/tint.c

@@ -288,9 +288,11 @@ if (panel.task_active == tsk) panel.task_active = 0;

} /* 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 */