diff options
Diffstat (limited to '')
| -rw-r--r-- | dwl.c | 29 | 
1 files changed, 6 insertions, 23 deletions
| @@ -182,7 +182,6 @@ struct Monitor {  	unsigned int tagset[2];  	double mfact;  	int nmaster; -	int un_map; /* If a map/unmap happened on this monitor, then this should be true */  };  typedef struct { @@ -1393,8 +1392,6 @@ mapnotify(struct wl_listener *listener, void *data)  	}  	printstatus(); -	c->mon->un_map = 1; -  unset_fullscreen:  	m = c->mon ? c->mon : xytomon(c->geom.x, c->geom.y);  	wl_list_for_each(w, &clients, link) @@ -1693,30 +1690,19 @@ rendermon(struct wl_listener *listener, void *data)  	 * generally at the output's refresh rate (e.g. 60Hz). */  	Monitor *m = wl_container_of(listener, m, frame);  	Client *c; -	int skip = 0;  	struct timespec now; -	clock_gettime(CLOCK_MONOTONIC, &now); -  	/* Render if no XDG clients have an outstanding resize and are visible on  	 * this monitor. */ -	/* Checking m->un_map for every client is not optimal but works */ -	wl_list_for_each(c, &clients, link) { -		if ((c->resize && m->un_map) || (c->type == XDGShell -				&& (c->surface.xdg->pending.geometry.width != -				c->surface.xdg->current.geometry.width -				|| c->surface.xdg->pending.geometry.height != -				c->surface.xdg->current.geometry.height))) { -			/* Lie */ -			wlr_surface_send_frame_done(client_surface(c), &now); -			skip = 1; -		} -	} -	if (!skip && !wlr_scene_output_commit(m->scene_output)) +	wl_list_for_each(c, &clients, link) +		if (client_is_rendered_on_mon(c, m) && (!c->isfloating && c->resize)) +			goto skip; +	if (!wlr_scene_output_commit(m->scene_output))  		return; +skip:  	/* Let clients know a frame has been rendered */ +	clock_gettime(CLOCK_MONOTONIC, &now);  	wlr_scene_output_send_frame_done(m->scene_output, &now); -	m->un_map = 0;  }  void @@ -2281,9 +2267,6 @@ unmapnotify(struct wl_listener *listener, void *data)  		grabc = NULL;  	} -	if (c->mon) -		c->mon->un_map = 1; -  	if (client_is_unmanaged(c)) {  		if (c == exclusive_focus)  			exclusive_focus = NULL; | 
