aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorIsaac Freund <ifreund@ifreund.xyz>2020-04-25 23:28:26 +0200
committerIsaac Freund <ifreund@ifreund.xyz>2020-04-25 23:28:26 +0200
commit5baa9f58e72dd100ff54bc1b8c047943c99f6229 (patch)
treec1f079d86b1235016e1c94417fc47e2dfaf0a5b5 /src
parent96c20f26fc06ca2b670b22563c27d303e9df1e45 (diff)
downloadriver-5baa9f58e72dd100ff54bc1b8c047943c99f6229.tar.gz
river-5baa9f58e72dd100ff54bc1b8c047943c99f6229.tar.xz
Deduplicate some state
Diffstat (limited to 'src')
-rw-r--r--src/layer_surface.zig14
-rw-r--r--src/output.zig2
-rw-r--r--src/render.zig2
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{