mirror of
				https://codeberg.org/dwl/dwl.git
				synced 2025-11-03 09:01:45 -05:00 
			
		
		
		
	Restore floating win position after mon add
Compensate the coordinate changes when adding a new monitor. Every test so far confirms that monitors are always added to the left, on top of the list, so every floating window's x coordinate has to be incremented by the width of the new monitor.
This commit is contained in:
		
							parent
							
								
									0bb25a73ec
								
							
						
					
					
						commit
						537ad7e3fd
					
				
					 1 changed files with 18 additions and 0 deletions
				
			
		
							
								
								
									
										18
									
								
								dwl.c
									
										
									
									
									
								
							
							
						
						
									
										18
									
								
								dwl.c
									
										
									
									
									
								
							| 
						 | 
					@ -195,6 +195,7 @@ static void applyexclusive(struct wlr_box *usable_area, uint32_t anchor,
 | 
				
			||||||
		int32_t margin_bottom, int32_t margin_left);
 | 
							int32_t margin_bottom, int32_t margin_left);
 | 
				
			||||||
static void applyrules(Client *c);
 | 
					static void applyrules(Client *c);
 | 
				
			||||||
static void arrange(Monitor *m);
 | 
					static void arrange(Monitor *m);
 | 
				
			||||||
 | 
					static void arrangefloat(Monitor *m, int sign);
 | 
				
			||||||
static void arrangelayer(Monitor *m, struct wl_list *list,
 | 
					static void arrangelayer(Monitor *m, struct wl_list *list,
 | 
				
			||||||
		struct wlr_box *usable_area, bool exclusive);
 | 
							struct wlr_box *usable_area, bool exclusive);
 | 
				
			||||||
static void arrangelayers(Monitor *m);
 | 
					static void arrangelayers(Monitor *m);
 | 
				
			||||||
| 
						 | 
					@ -469,6 +470,17 @@ arrange(Monitor *m)
 | 
				
			||||||
	/* XXX recheck pointer focus here... or in resize()? */
 | 
						/* XXX recheck pointer focus here... or in resize()? */
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					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
 | 
					void
 | 
				
			||||||
arrangelayer(Monitor *m, struct wl_list *list, struct wlr_box *usable_area, bool exclusive)
 | 
					arrangelayer(Monitor *m, struct wl_list *list, struct wlr_box *usable_area, bool exclusive)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
| 
						 | 
					@ -693,6 +705,7 @@ cleanupmon(struct wl_listener *listener, void *data)
 | 
				
			||||||
	free(m);
 | 
						free(m);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	updatemons();
 | 
						updatemons();
 | 
				
			||||||
 | 
						arrangefloat(m, -1);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void
 | 
					void
 | 
				
			||||||
| 
						 | 
					@ -821,6 +834,11 @@ createmon(struct wl_listener *listener, void *data)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* When adding monitors, the geometries of all monitors must be updated */
 | 
						/* When adding monitors, the geometries of all monitors must be updated */
 | 
				
			||||||
	updatemons();
 | 
						updatemons();
 | 
				
			||||||
 | 
						wl_list_for_each(m, &mons, link) {
 | 
				
			||||||
 | 
							/* the first monitor in the list is the most recently added */
 | 
				
			||||||
 | 
							arrangefloat(m, 1);
 | 
				
			||||||
 | 
							return;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void
 | 
					void
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue