*fix* segfault fixed when removing last desktop and we've been on last desktop

git-svn-id: http://tint2.googlecode.com/svn/trunk@303 121b4492-b84c-0410-8b4c-0d4edfb3f3cc
This commit is contained in:
Andreas.Fink85 2009-12-29 22:04:24 +00:00
parent c93bf5e1f3
commit 527c91f005
2 changed files with 16 additions and 9 deletions

View file

@ -75,6 +75,7 @@ Task *add_task (Window win)
Taskbar *tskbar;
Task *new_tsk2=0;
int i, j;
// QUESTION: Do we need to iterate over nb_panel (we know the monitor, why not taking panel1[monitor]???
for (i=0 ; i < nb_panel ; i++) {
for (j=0 ; j < panel1[i].nb_desktop ; j++) {
if (new_tsk.desktop != ALLDESKTOP && new_tsk.desktop != j) continue;

View file

@ -411,8 +411,11 @@ void event_property_notify (XEvent *e)
Panel *panel = &panel1[i];
if (panel_mode == MULTI_DESKTOP && panel->g_taskbar.use_active) {
// redraw both taskbar
if (server.nb_desktop > old_desktop) {
// can happen if last desktop is deleted and we've been on the last desktop
panel->taskbar[old_desktop].area.is_active = 0;
panel->taskbar[old_desktop].area.resize = 1;
}
panel->taskbar[server.desktop].area.is_active = 1;
panel->taskbar[server.desktop].area.resize = 1;
panel_refresh = 1;
@ -421,6 +424,7 @@ void event_property_notify (XEvent *e)
Taskbar *tskbar;
Task *tsk;
GSList *l;
if (server.nb_desktop > old_desktop) {
tskbar = &panel->taskbar[old_desktop];
for (l = tskbar->area.list; l ; l = l->next) {
tsk = l->data;
@ -430,6 +434,7 @@ void event_property_notify (XEvent *e)
panel_refresh = 1;
}
}
}
tskbar = &panel->taskbar[server.desktop];
for (l = tskbar->area.list; l ; l = l->next) {
tsk = l->data;
@ -710,6 +715,7 @@ int main (int argc, char *argv[])
if (panel_refresh) {
panel_refresh = 0;
// QUESTION: do we need this first refresh_systray, because we check refresh_systray once again later...
if (refresh_systray) {
panel = (Panel*)systray.area.panel;
XSetWindowBackgroundPixmap (server.dsp, panel->main_win, None);