diff options
| -rw-r--r-- | river/Output.zig | 26 | ||||
| -rw-r--r-- | river/Root.zig | 5 |
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); |
