diff options
| -rw-r--r-- | dwl.c | 18 | 
1 files changed, 18 insertions, 0 deletions
@@ -195,6 +195,7 @@ static void applyexclusive(struct wlr_box *usable_area, uint32_t anchor,  		int32_t margin_bottom, int32_t margin_left);  static void applyrules(Client *c);  static void arrange(Monitor *m); +static void arrangefloat(Monitor *m, int sign);  static void arrangelayer(Monitor *m, struct wl_list *list,  		struct wlr_box *usable_area, bool exclusive);  static void arrangelayers(Monitor *m); @@ -470,6 +471,17 @@ arrange(Monitor *m)  }  void +arrangefloat(Monitor *m, int sign) +{ +	Client *c; +	wl_list_for_each(c, &clients, link) { +		if (c->isfloating) +			resize(c, c->geom.x + m->w.width * sign, c->geom.y, +					c->geom.width, c->geom.height, 0); +	} +} + +void  arrangelayer(Monitor *m, struct wl_list *list, struct wlr_box *usable_area, bool exclusive)  {  	LayerSurface *layersurface; @@ -693,6 +705,7 @@ cleanupmon(struct wl_listener *listener, void *data)  	free(m);  	updatemons(); +	arrangefloat(m, -1);  }  void @@ -821,6 +834,11 @@ createmon(struct wl_listener *listener, void *data)  	/* When adding monitors, the geometries of all monitors must be updated */  	updatemons(); +	wl_list_for_each(m, &mons, link) { +		/* the first monitor in the list is the most recently added */ +		arrangefloat(m, 1); +		return; +	}  }  void  | 
