commit 0bb25a73ecfbf4c8f613e1a1b96be5ea683bf12a
parent e4d58c39e0b9e952e31661fc2a9d6e043928b729
Author: Guido Cella <guidocella91@gmail.com>
Date: Fri, 11 Sep 2020 14:24:39 +0200
extract function and comment it
Diffstat:
| M | dwl.c | | | 29 | ++++++++++++++++++----------- |
1 file changed, 18 insertions(+), 11 deletions(-)
diff --git a/dwl.c b/dwl.c
@@ -266,6 +266,7 @@ static void toggleview(const Arg *arg);
static void unmaplayersurface(LayerSurface *layersurface);
static void unmaplayersurfacenotify(struct wl_listener *listener, void *data);
static void unmapnotify(struct wl_listener *listener, void *data);
+static void updatemons();
static void view(const Arg *arg);
static Client *xytoclient(double x, double y);
static struct wlr_surface *xytolayersurface(struct wl_list *layer_surfaces,
@@ -691,11 +692,7 @@ cleanupmon(struct wl_listener *listener, void *data)
wl_list_remove(&m->destroy.link);
free(m);
- wl_list_for_each(m, &mons, link) {
- m->m = m->w = *wlr_output_layout_get_box(output_layout, m->wlr_output);
- arrangelayers(m);
- arrange(m);
- }
+ updatemons();
}
void
@@ -822,12 +819,8 @@ createmon(struct wl_listener *listener, void *data)
for (size_t i = 0; i < nlayers; ++i)
wl_list_init(&m->layers[i]);
- /* Get effective monitor geometry to use for window area */
- wl_list_for_each(m, &mons, link) {
- m->m = m->w = *wlr_output_layout_get_box(output_layout, m->wlr_output);
- arrangelayers(m);
- arrange(m);
- }
+ /* When adding monitors, the geometries of all monitors must be updated */
+ updatemons();
}
void
@@ -2129,6 +2122,20 @@ unmapnotify(struct wl_listener *listener, void *data)
}
void
+updatemons()
+{
+ Monitor *m;
+ wl_list_for_each(m, &mons, link) {
+ /* Get the effective monitor geometry to use for surfaces */
+ m->m = m->w = *wlr_output_layout_get_box(output_layout, m->wlr_output);
+ /* Calculate the effective monitor geometry to use for clients */
+ arrangelayers(m);
+ /* Don't move clients to the left output when plugging monitors */
+ arrange(m);
+ }
+}
+
+void
view(const Arg *arg)
{
Client *sel = selclient();