diff options
| author | Isaac Freund <ifreund@ifreund.xyz> | 2020-04-25 23:28:26 +0200 |
|---|---|---|
| committer | Isaac Freund <ifreund@ifreund.xyz> | 2020-04-25 23:28:26 +0200 |
| commit | 5baa9f58e72dd100ff54bc1b8c047943c99f6229 (patch) | |
| tree | c1f079d86b1235016e1c94417fc47e2dfaf0a5b5 | |
| parent | 96c20f26fc06ca2b670b22563c27d303e9df1e45 (diff) | |
| download | river-5baa9f58e72dd100ff54bc1b8c047943c99f6229.tar.gz river-5baa9f58e72dd100ff54bc1b8c047943c99f6229.tar.xz | |
Deduplicate some state
| -rw-r--r-- | src/layer_surface.zig | 14 | ||||
| -rw-r--r-- | src/output.zig | 2 | ||||
| -rw-r--r-- | src/render.zig | 2 |
3 files changed, 7 insertions, 11 deletions
diff --git a/src/layer_surface.zig b/src/layer_surface.zig index 38af53a..aa73217 100644 --- a/src/layer_surface.zig +++ b/src/layer_surface.zig @@ -11,9 +11,6 @@ pub const LayerSurface = struct { output: *Output, wlr_layer_surface: *c.wlr_layer_surface_v1, - /// True if the layer surface is currently mapped - mapped: bool, - box: Box, layer: c.zwlr_layer_shell_v1_layer, @@ -36,8 +33,6 @@ pub const LayerSurface = struct { self.wlr_layer_surface = wlr_layer_surface; wlr_layer_surface.data = self; - self.mapped = false; - self.box = undefined; self.layer = layer; @@ -79,8 +74,6 @@ pub const LayerSurface = struct { Log.Debug.log("Layer surface '{}' mapped.", .{wlr_layer_surface.namespace}); - self.mapped = true; - // Add listeners that are only active while mapped self.listen_commit.notify = handleCommit; c.wl_signal_add(&wlr_layer_surface.surface.*.events.commit, &self.listen_commit); @@ -101,8 +94,6 @@ pub const LayerSurface = struct { Log.Debug.log("Layer surface '{}' unmapped.", .{self.wlr_layer_surface.namespace}); - self.mapped = false; - // remove listeners only active while the layer surface is mapped c.wl_list_remove(&self.listen_commit.link); c.wl_list_remove(&self.listen_new_popup.link); @@ -118,6 +109,11 @@ pub const LayerSurface = struct { } } + // Slight hack: This is automatically set to false by wlroots after + // this callback is exited, but we need it set to false before calling + // arrangeLayers() to avoid a crash. + self.wlr_layer_surface.mapped = false; + // This gives exclusive focus to a keyboard interactive top or overlay layer // surface if there is one. self.output.arrangeLayers(); diff --git a/src/output.zig b/src/output.zig index a2b7de9..3e969b6 100644 --- a/src/output.zig +++ b/src/output.zig @@ -268,7 +268,7 @@ pub const Output = struct { while (it) |node| : (it = node.prev) { const layer_surface = &node.data; // Only mapped surfaces may gain focus - if (layer_surface.mapped and + if (layer_surface.wlr_layer_surface.mapped and layer_surface.wlr_layer_surface.current.keyboard_interactive) { break :outer layer_surface; diff --git a/src/render.zig b/src/render.zig index 218b10a..9310c59 100644 --- a/src/render.zig +++ b/src/render.zig @@ -93,7 +93,7 @@ fn renderLayer(output: Output, layer: std.TailQueue(LayerSurface), now: *c.times var it = layer.first; while (it) |node| : (it = node.next) { const layer_surface = &node.data; - if (!layer_surface.mapped) { + if (!layer_surface.wlr_layer_surface.mapped) { continue; } var rdata = LayerSurfaceRenderData{ |
