forked from mirror/dwl
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…
Reference in a new issue