X-Git-Url: https://jasonwoof.com/gitweb/?a=blobdiff_plain;f=scrotwm.c;h=5be409dfa913de6d78f45da3e555055a0c71737e;hb=f0c9f65a1151516ffc175667a56f4443c0a4859d;hp=eed00fb7b560c85dc7c2922caad13c535bb16c4f;hpb=ddfbb2ee98303fe16c6f8cc0c5279b9513365b26;p=spectrwm.git diff --git a/scrotwm.c b/scrotwm.c index eed00fb..5be409d 100644 --- a/scrotwm.c +++ b/scrotwm.c @@ -997,6 +997,9 @@ client_msg(struct ws_win *win, Atom a) { XClientMessageEvent cm; + if (win == NULL) + return; + bzero(&cm, sizeof cm); cm.type = ClientMessage; cm.window = win->id; @@ -1014,6 +1017,10 @@ config_win(struct ws_win *win) DNPRINTF(SWM_D_MISC, "config_win: win %lu x %d y %d w %d h %d\n", win->id, win->g.x, win->g.y, win->g.w, win->g.h); + + if (win == NULL) + return; + ce.type = ConfigureNotify; ce.display = display; ce.event = win->id; @@ -1123,6 +1130,9 @@ fake_keypress(struct ws_win *win, int keysym, int modifiers) { XKeyEvent event; + if (win == NULL) + return; + event.display = display; /* Ignored, but what the hell */ event.window = win->id; event.root = win->s->root; @@ -1261,7 +1271,8 @@ unfocus_win(struct ws_win *win) { if (win == NULL) return; - + if (win->ws == NULL) + return; if (win->ws->r == NULL) return; @@ -1296,6 +1307,8 @@ focus_win(struct ws_win *win) if (win == NULL) return; + if (win->ws == NULL) + return; /* use big hammer to make sure it works under all use cases */ unfocus_all(); @@ -1321,6 +1334,9 @@ switchws(struct swm_region *r, union arg *args) struct ws_win *win, *winfocus = NULL, *parent = NULL; struct workspace *new_ws, *old_ws; + if (!(r && r->s)) + return; + this_r = r; old_ws = this_r->ws; new_ws = &this_r->s->ws[wsid]; @@ -1329,7 +1345,7 @@ switchws(struct swm_region *r, union arg *args) "%d -> %d\n", r->s->idx, WIDTH(r), HEIGHT(r), X(r), Y(r), old_ws->idx, wsid); - if (new_ws == old_ws) + if (new_ws == NULL || old_ws == NULL || new_ws == old_ws) return; /* get focus window */ @@ -3499,6 +3515,9 @@ unmanage_window(struct ws_win *win) DNPRINTF(SWM_D_MISC, "unmanage_window: %lu\n", win->id); + /* needed for restart wm */ + set_win_state(win, WithdrawnState); + if (win->transient) { parent = find_window(win->transient); if (parent) @@ -4181,7 +4200,6 @@ setup_screens(void) /* attach windows to a region */ /* normal windows */ for (j = 0; j < no; j++) { - XGetWindowAttributes(display, wins[j], &wa); if (!XGetWindowAttributes(display, wins[j], &wa) || wa.override_redirect || XGetTransientForHint(display, wins[j], &d1)) @@ -4194,7 +4212,8 @@ setup_screens(void) } /* transient windows */ for (j = 0; j < no; j++) { - if (!XGetWindowAttributes(display, wins[j], &wa)) + if (!XGetWindowAttributes(display, wins[j], &wa) || + wa.override_redirect) continue; state = getstate(wins[j]);