fix various segfaults when selmon is NULL

This commit is contained in:
Leonardo Hernández Hernández 2022-09-07 23:04:18 -05:00
parent e46238b95e
commit c00faae263
No known key found for this signature in database
GPG key ID: E538897EE11B9624

20
dwl.c
View file

@ -880,7 +880,10 @@ createlayersurface(struct wl_listener *listener, void *data)
struct wlr_layer_surface_v1_state old_state; struct wlr_layer_surface_v1_state old_state;
if (!wlr_layer_surface->output) if (!wlr_layer_surface->output)
wlr_layer_surface->output = selmon->wlr_output; wlr_layer_surface->output = selmon ? selmon->wlr_output : NULL;
if (!wlr_layer_surface->output)
wlr_layer_surface_v1_destroy(wlr_layer_surface);
layersurface = ecalloc(1, sizeof(LayerSurface)); layersurface = ecalloc(1, sizeof(LayerSurface));
layersurface->type = LayerShell; layersurface->type = LayerShell;
@ -1269,6 +1272,8 @@ fullscreennotify(struct wl_listener *listener, void *data)
void void
incnmaster(const Arg *arg) incnmaster(const Arg *arg)
{ {
if (!arg || !selmon)
return;
selmon->nmaster = MAX(selmon->nmaster + arg->i, 0); selmon->nmaster = MAX(selmon->nmaster + arg->i, 0);
arrange(selmon); arrange(selmon);
} }
@ -1948,6 +1953,8 @@ setfullscreen(Client *c, int fullscreen)
void void
setlayout(const Arg *arg) setlayout(const Arg *arg)
{ {
if (!selmon)
return;
if (!arg || !arg->v || arg->v != selmon->lt[selmon->sellt]) if (!arg || !arg->v || arg->v != selmon->lt[selmon->sellt])
selmon->sellt ^= 1; selmon->sellt ^= 1;
if (arg && arg->v) if (arg && arg->v)
@ -1963,7 +1970,7 @@ setmfact(const Arg *arg)
{ {
float f; float f;
if (!arg || !selmon->lt[selmon->sellt]->arrange) if (!arg || !selmon || !selmon->lt[selmon->sellt]->arrange)
return; return;
f = arg->f < 1.0 ? arg->f + selmon->mfact : arg->f - 1.0; f = arg->f < 1.0 ? arg->f + selmon->mfact : arg->f - 1.0;
if (f < 0.1 || f > 0.9) if (f < 0.1 || f > 0.9)
@ -2250,8 +2257,7 @@ void
tagmon(const Arg *arg) tagmon(const Arg *arg)
{ {
Client *sel = selclient(); Client *sel = selclient();
if (!sel) if (sel)
return;
setmon(sel, dirtomon(arg->i), 0); setmon(sel, dirtomon(arg->i), 0);
} }
@ -2324,7 +2330,7 @@ toggletag(const Arg *arg)
void void
toggleview(const Arg *arg) toggleview(const Arg *arg)
{ {
unsigned int newtagset = selmon->tagset[selmon->seltags] ^ (arg->ui & TAGMASK); unsigned int newtagset = selmon ? selmon->tagset[selmon->seltags] ^ (arg->ui & TAGMASK) : 0;
if (newtagset) { if (newtagset) {
selmon->tagset[selmon->seltags] = newtagset; selmon->tagset[selmon->seltags] = newtagset;
@ -2445,7 +2451,7 @@ urgent(struct wl_listener *listener, void *data)
void void
view(const Arg *arg) view(const Arg *arg)
{ {
if ((arg->ui & TAGMASK) == selmon->tagset[selmon->seltags]) if (selmon && (arg->ui & TAGMASK) == selmon->tagset[selmon->seltags])
return; return;
selmon->seltags ^= 1; /* toggle sel tagset */ selmon->seltags ^= 1; /* toggle sel tagset */
if (arg->ui & TAGMASK) if (arg->ui & TAGMASK)
@ -2507,7 +2513,7 @@ zoom(const Arg *arg)
{ {
Client *c, *sel = selclient(); Client *c, *sel = selclient();
if (!sel || !selmon->lt[selmon->sellt]->arrange || sel->isfloating) if (!sel || !selmon || !selmon->lt[selmon->sellt]->arrange || sel->isfloating)
return; return;
/* Search for the first tiled window that is not sel, marking sel as /* Search for the first tiled window that is not sel, marking sel as