JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
Prevent acessing pointer that has been freed.
authorMarco Peereboom <marco@conformal.com>
Tue, 27 Jan 2009 21:30:18 +0000 (21:30 +0000)
committerMarco Peereboom <marco@conformal.com>
Tue, 27 Jan 2009 21:30:18 +0000 (21:30 +0000)
Still one weird focus bug leftover where when the last window in a ws gets
destroyed and if there is a window on the alternate screen it gets focus.

scrotwm.c

index 029548f..ba80027 100644 (file)
--- a/scrotwm.c
+++ b/scrotwm.c
@@ -1106,7 +1106,6 @@ cycle_layout(struct swm_region *r, union arg *args)
        if (ws->cur_layout->l_stack == NULL)
                ws->cur_layout = &layouts[0];
        ignore_enter = 1;
-
        stack();
 }
 
@@ -1930,16 +1929,16 @@ destroynotify(XEvent *e)
                        ws->focus = TAILQ_PREV(win, ws_win_list, entry);
                if (ws->focus == NULL)
                        ws->focus = TAILQ_FIRST(&ws->winlist);
-               if (ws->focus == win)
+               if (ws->focus == NULL || ws->focus == win) {
                        ws->focus = NULL;
-               if (cur_focus == win)
+                       unfocus_all();
+               } else
                        focus_win(ws->focus);
-
                TAILQ_REMOVE(&ws->winlist, win, entry);
                set_win_state(win, WithdrawnState);
                free(win);
+               stack();
        }
-       stack();
 }
 
 void