diff options
Diffstat (limited to 'dwl.c')
-rw-r--r-- | dwl.c | 28 |
1 files changed, 12 insertions, 16 deletions
@@ -315,7 +315,7 @@ static void swallow(Client *c, Client *w); /* variables */ static const char broken[] = "broken"; static pid_t child_pid = -1; -static void *exclusive_focus; +static struct wlr_surface *exclusive_focus; static struct wl_display *dpy; static struct wlr_backend *backend; static struct wlr_scene *scene; @@ -574,7 +574,7 @@ arrangelayer(Monitor *m, struct wl_list *list, struct wlr_box *usable_area, int const uint32_t both_vert = ZWLR_LAYER_SURFACE_V1_ANCHOR_TOP | ZWLR_LAYER_SURFACE_V1_ANCHOR_BOTTOM; - if (wlr_layer_surface->mapped && exclusive != (state->exclusive_zone > 0)) + if (exclusive != (state->exclusive_zone > 0)) continue; bounds = state->exclusive_zone == -1 ? full_area : *usable_area; @@ -643,8 +643,6 @@ arrangelayers(Monitor *m) ZWLR_LAYER_SHELL_V1_LAYER_TOP, }; LayerSurface *layersurface; - if (!m || !m->wlr_output->enabled) - return; /* Arrange exclusive surfaces from top->bottom */ for (i = 3; i >= 0; i--) @@ -667,8 +665,8 @@ arrangelayers(Monitor *m) layersurface->layer_surface->mapped) { /* Deactivate the focused client. */ focusclient(NULL, 0); - exclusive_focus = layersurface; - client_notify_enter(layersurface->layer_surface->surface, wlr_seat_get_keyboard(seat)); + exclusive_focus = layersurface->layer_surface->surface; + client_notify_enter(exclusive_focus, wlr_seat_get_keyboard(seat)); return; } } @@ -803,7 +801,6 @@ cleanupmon(struct wl_listener *listener, void *data) wl_list_remove(&m->destroy.link); wl_list_remove(&m->frame.link); wl_list_remove(&m->link); - wlr_output->data = NULL; wlr_output_layout_remove(output_layout, m->wlr_output); wlr_scene_output_destroy(m->scene_output); @@ -838,9 +835,8 @@ commitlayersurfacenotify(struct wl_listener *listener, void *data) { LayerSurface *layersurface = wl_container_of(listener, layersurface, surface_commit); struct wlr_layer_surface_v1 *wlr_layer_surface = layersurface->layer_surface; - struct wlr_output *wlr_output = wlr_layer_surface->output; - if (!wlr_output || !(layersurface->mon = wlr_output->data)) + if (!layersurface->mon) return; if (layers[wlr_layer_surface->current.layer] != layersurface->scene) { @@ -1131,6 +1127,8 @@ destroylayersurfacenotify(struct wl_listener *listener, void *data) wl_list_remove(&layersurface->unmap.link); wl_list_remove(&layersurface->surface_commit.link); wlr_scene_node_destroy(layersurface->scene); + if (layersurface->mon) + arrangelayers(layersurface->mon); free(layersurface); } @@ -1553,6 +1551,9 @@ mapnotify(struct wl_listener *listener, void *data) } printstatus(); + if (c->isfullscreen) + setfullscreen(c, 1); + c->mon->un_map = 1; if (!c->noswallow) { Client *p = termforwin(c); @@ -2028,8 +2029,6 @@ void setfullscreen(Client *c, int fullscreen) { c->isfullscreen = fullscreen; - if (!c->mon) - return; c->bw = fullscreen ? 0 : borderpx; client_set_fullscreen(c, fullscreen); @@ -2115,7 +2114,7 @@ setmon(Client *c, Monitor *m, unsigned int newtags) resize(c, c->geom, 0, 1); wlr_surface_send_enter(client_surface(c), m->wlr_output); c->tags = newtags ? newtags : m->tagset[m->seltags]; /* assign tags of target monitor */ - setfullscreen(c, c->isfullscreen); /* This will call arrange(c->mon) */ + arrange(m); } focusclient(focustop(selmon), 1); } @@ -2513,10 +2512,7 @@ unmaplayersurfacenotify(struct wl_listener *listener, void *data) layersurface->layer_surface->mapped = (layersurface->mapped = 0); wlr_scene_node_set_enabled(layersurface->scene, 0); - if (layersurface->layer_surface->output - && (layersurface->mon = layersurface->layer_surface->output->data)) - arrangelayers(layersurface->mon); - if (layersurface == exclusive_focus) + if (layersurface->layer_surface->surface == exclusive_focus) exclusive_focus = NULL; if (layersurface->layer_surface->surface == seat->keyboard_state.focused_surface) |