*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:
parent
c93bf5e1f3
commit
527c91f005
2 changed files with 16 additions and 9 deletions
|
@ -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;
|
||||||
|
|
24
src/tint.c
24
src/tint.c
|
@ -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);
|
||||||
|
|
Loading…
Reference in a new issue