]> Dogcows Code - chaz/tint2/blobdiff - src/tint.c
*fix* segfault fixed when removing last desktop and we've been on last desktop
[chaz/tint2] / src / tint.c
index bb7586d6f4f72f69dc1a3ad3feb887688221f143..cdb72a88cfa70751b525e927e21895c6aec783a1 100644 (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
-                                       panel->taskbar[old_desktop].area.is_active = 0;
-                                       panel->taskbar[old_desktop].area.resize = 1;
+                                       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,13 +424,15 @@ void event_property_notify (XEvent *e)
                                Taskbar *tskbar;
                                Task *tsk;
                                GSList *l;
-                               tskbar = &panel->taskbar[old_desktop];
-                               for (l = tskbar->area.list; l ; l = l->next) {
-                                       tsk = l->data;
-                                       if (tsk->desktop == ALLDESKTOP) {
-                                               tsk->area.on_screen = 0;
-                                               tskbar->area.resize = 1;
-                                               panel_refresh = 1;
+                               if (server.nb_desktop > old_desktop) {
+                                       tskbar = &panel->taskbar[old_desktop];
+                                       for (l = tskbar->area.list; l ; l = l->next) {
+                                               tsk = l->data;
+                                               if (tsk->desktop == ALLDESKTOP) {
+                                                       tsk->area.on_screen = 0;
+                                                       tskbar->area.resize = 1;
+                                                       panel_refresh = 1;
+                                               }
                                        }
                                }
                                tskbar = &panel->taskbar[server.desktop];
@@ -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);
This page took 0.020322 seconds and 4 git commands to generate.