diff options
| author | Leonardo Hernández Hernández <leohdz172@protonmail.com> | 2022-09-07 23:04:18 -0500 | 
|---|---|---|
| committer | Leonardo Hernández Hernández <leohdz172@protonmail.com> | 2022-09-26 19:07:45 -0500 | 
| commit | c00faae26370682c307cfb107b12123d10d49053 (patch) | |
| tree | 0fa88258658268b3f4e6101702351bd25a1d757a /dwl.c | |
| parent | e46238b95ee3e74ee7a54e592276e8b1be2f0ea0 (diff) | |
fix various segfaults when selmon is NULL
Diffstat (limited to 'dwl.c')
| -rw-r--r-- | dwl.c | 22 | 
1 files changed, 14 insertions, 8 deletions
| @@ -880,7 +880,10 @@ createlayersurface(struct wl_listener *listener, void *data)  	struct wlr_layer_surface_v1_state old_state;  	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->type = LayerShell; @@ -1269,6 +1272,8 @@ fullscreennotify(struct wl_listener *listener, void *data)  void  incnmaster(const Arg *arg)  { +	if (!arg || !selmon) +		return;  	selmon->nmaster = MAX(selmon->nmaster + arg->i, 0);  	arrange(selmon);  } @@ -1948,6 +1953,8 @@ setfullscreen(Client *c, int fullscreen)  void  setlayout(const Arg *arg)  { +	if (!selmon) +		return;  	if (!arg || !arg->v || arg->v != selmon->lt[selmon->sellt])  		selmon->sellt ^= 1;  	if (arg && arg->v) @@ -1963,7 +1970,7 @@ setmfact(const Arg *arg)  {  	float f; -	if (!arg || !selmon->lt[selmon->sellt]->arrange) +	if (!arg || !selmon || !selmon->lt[selmon->sellt]->arrange)  		return;  	f = arg->f < 1.0 ? arg->f + selmon->mfact : arg->f - 1.0;  	if (f < 0.1 || f > 0.9) @@ -2250,9 +2257,8 @@ void  tagmon(const Arg *arg)  {  	Client *sel = selclient(); -	if (!sel) -		return; -	setmon(sel, dirtomon(arg->i), 0); +	if (sel) +		setmon(sel, dirtomon(arg->i), 0);  }  void @@ -2324,7 +2330,7 @@ toggletag(const Arg *arg)  void  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) {  		selmon->tagset[selmon->seltags] = newtagset; @@ -2445,7 +2451,7 @@ urgent(struct wl_listener *listener, void *data)  void  view(const Arg *arg)  { -	if ((arg->ui & TAGMASK) == selmon->tagset[selmon->seltags]) +	if (selmon && (arg->ui & TAGMASK) == selmon->tagset[selmon->seltags])  		return;  	selmon->seltags ^= 1; /* toggle sel tagset */  	if (arg->ui & TAGMASK) @@ -2507,7 +2513,7 @@ zoom(const Arg *arg)  {  	Client *c, *sel = selclient(); -	if (!sel || !selmon->lt[selmon->sellt]->arrange || sel->isfloating) +	if (!sel || !selmon || !selmon->lt[selmon->sellt]->arrange || sel->isfloating)  		return;  	/* Search for the first tiled window that is not sel, marking sel as | 
