*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; Taskbar *tskbar;
Task *new_tsk2=0; Task *new_tsk2=0;
int i, j; 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 (i=0 ; i < nb_panel ; i++) {
for (j=0 ; j < panel1[i].nb_desktop ; j++) { for (j=0 ; j < panel1[i].nb_desktop ; j++) {
if (new_tsk.desktop != ALLDESKTOP && new_tsk.desktop != j) continue; 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]; Panel *panel = &panel1[i];
if (panel_mode == MULTI_DESKTOP && panel->g_taskbar.use_active) { if (panel_mode == MULTI_DESKTOP && panel->g_taskbar.use_active) {
// redraw both taskbar // redraw both taskbar
panel->taskbar[old_desktop].area.is_active = 0; if (server.nb_desktop > old_desktop) {
panel->taskbar[old_desktop].area.resize = 1; // 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.is_active = 1;
panel->taskbar[server.desktop].area.resize = 1; panel->taskbar[server.desktop].area.resize = 1;
panel_refresh = 1; panel_refresh = 1;
@ -421,13 +424,15 @@ void event_property_notify (XEvent *e)
Taskbar *tskbar; Taskbar *tskbar;
Task *tsk; Task *tsk;
GSList *l; GSList *l;
tskbar = &panel->taskbar[old_desktop]; if (server.nb_desktop > old_desktop) {
for (l = tskbar->area.list; l ; l = l->next) { tskbar = &panel->taskbar[old_desktop];
tsk = l->data; for (l = tskbar->area.list; l ; l = l->next) {
if (tsk->desktop == ALLDESKTOP) { tsk = l->data;
tsk->area.on_screen = 0; if (tsk->desktop == ALLDESKTOP) {
tskbar->area.resize = 1; tsk->area.on_screen = 0;
panel_refresh = 1; tskbar->area.resize = 1;
panel_refresh = 1;
}
} }
} }
tskbar = &panel->taskbar[server.desktop]; tskbar = &panel->taskbar[server.desktop];
@ -710,6 +715,7 @@ int main (int argc, char *argv[])
if (panel_refresh) { if (panel_refresh) {
panel_refresh = 0; panel_refresh = 0;
// QUESTION: do we need this first refresh_systray, because we check refresh_systray once again later...
if (refresh_systray) { if (refresh_systray) {
panel = (Panel*)systray.area.panel; panel = (Panel*)systray.area.panel;
XSetWindowBackgroundPixmap (server.dsp, panel->main_win, None); XSetWindowBackgroundPixmap (server.dsp, panel->main_win, None);