aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIsaac Freund <mail@isaacfreund.com>2023-03-02 15:10:10 +0100
committerIsaac Freund <mail@isaacfreund.com>2023-03-02 15:10:10 +0100
commit686ef11fc8462785bbeec73f0244d14e97dff578 (patch)
treeb434192734e9e6dd7d4a5bb3cc2fcc29a2d3dfe7
parentecb959f06857197f2b0cfd035189f37f88ae2c24 (diff)
downloadriver-686ef11fc8462785bbeec73f0244d14e97dff578.tar.gz
river-686ef11fc8462785bbeec73f0244d14e97dff578.tar.xz
river: render floating views above the layout
-rw-r--r--river/Output.zig9
-rw-r--r--river/Root.zig16
2 files changed, 20 insertions, 5 deletions
diff --git a/river/Output.zig b/river/Output.zig
index 4c34436..828b85d 100644
--- a/river/Output.zig
+++ b/river/Output.zig
@@ -59,8 +59,10 @@ layers: struct {
background: *wlr.SceneTree,
/// Bottom layer shell layer
bottom: *wlr.SceneTree,
- /// Tiled and floating views
- views: *wlr.SceneTree,
+ /// Views in the layout
+ layout: *wlr.SceneTree,
+ /// Floating views
+ float: *wlr.SceneTree,
/// Top layer shell layer
top: *wlr.SceneTree,
/// Fullscreen views
@@ -227,7 +229,8 @@ pub fn create(wlr_output: *wlr.Output) !void {
),
.background = try normal_content.createSceneTree(),
.bottom = try normal_content.createSceneTree(),
- .views = try normal_content.createSceneTree(),
+ .layout = try normal_content.createSceneTree(),
+ .float = try normal_content.createSceneTree(),
.top = try normal_content.createSceneTree(),
.fullscreen = try normal_content.createSceneTree(),
.overlay = try normal_content.createSceneTree(),
diff --git a/river/Root.zig b/river/Root.zig
index 518d94a..7245e58 100644
--- a/river/Root.zig
+++ b/river/Root.zig
@@ -607,13 +607,25 @@ fn commitTransaction(root: *Self) void {
view.inflight_serial = null;
- if (view.current.output != output or
+ if (view.current.output != view.inflight.output or
(output.current.fullscreen == view and output.inflight.fullscreen != view))
{
- view.tree.node.reparent(output.layers.views);
+ if (view.inflight.float) {
+ view.tree.node.reparent(output.layers.float);
+ } else {
+ view.tree.node.reparent(output.layers.layout);
+ }
view.popup_tree.node.reparent(output.layers.popups);
}
+ if (view.current.float != view.inflight.float) {
+ if (view.inflight.float) {
+ view.tree.node.reparent(output.layers.float);
+ } else {
+ view.tree.node.reparent(output.layers.layout);
+ }
+ }
+
view.updateCurrent();
const enabled = view.current.tags & output.current.tags != 0;