aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--river/Output.zig26
-rw-r--r--river/Root.zig5
2 files changed, 18 insertions, 13 deletions
diff --git a/river/Output.zig b/river/Output.zig
index a297bc9..4c34436 100644
--- a/river/Output.zig
+++ b/river/Output.zig
@@ -395,22 +395,22 @@ fn handleEnable(listener: *wl.Listener(*wlr.Output), wlr_output: *wlr.Output) vo
}
fn handleMode(listener: *wl.Listener(*wlr.Output), _: *wlr.Output) void {
- const self = @fieldParentPtr(Self, "mode", listener);
+ const output = @fieldParentPtr(Self, "mode", listener);
- {
- var width: c_int = undefined;
- var height: c_int = undefined;
- self.wlr_output.effectiveResolution(&width, &height);
- self.layers.background_color_rect.setSize(width, height);
-
- var it = self.layers.fullscreen.children.iterator(.forward);
- const background_color_rect = @fieldParentPtr(wlr.SceneRect, "node", it.next().?);
- background_color_rect.setSize(width, height);
+ output.updateBackgroundRect();
+ output.arrangeLayers();
+ server.root.applyPending();
+}
- log.info("new output mode, width: {}, height: {}", .{ width, height });
- }
+pub fn updateBackgroundRect(output: *Self) void {
+ var width: c_int = undefined;
+ var height: c_int = undefined;
+ output.wlr_output.effectiveResolution(&width, &height);
+ output.layers.background_color_rect.setSize(width, height);
- server.root.applyPending();
+ var it = output.layers.fullscreen.children.iterator(.forward);
+ const fullscreen_background = @fieldParentPtr(wlr.SceneRect, "node", it.next().?);
+ fullscreen_background.setSize(width, height);
}
fn handleFrame(listener: *wl.Listener(*wlr.Output), _: *wlr.Output) void {
diff --git a/river/Root.zig b/river/Root.zig
index 9fb516f..f989796 100644
--- a/river/Root.zig
+++ b/river/Root.zig
@@ -729,6 +729,11 @@ fn processOutputConfig(
self.output_layout.add(output.wlr_output, head.state.x, head.state.y);
output.tree.node.setEnabled(true);
output.tree.node.setPosition(head.state.x, head.state.y);
+ // Even though we call this in the output's handler for the mode event
+ // it is necessary to call it here as well since changing e.g. only
+ // the transform will require the dimensions of the background to be
+ // updated but will not trigger a mode event.
+ output.updateBackgroundRect();
output.arrangeLayers();
} else {
self.removeOutput(output);