From 9173cab6b9d417b0e9a0fe85905304c0db7512b4 Mon Sep 17 00:00:00 2001 From: Squibid Date: Thu, 18 Dec 2025 22:05:31 -0500 Subject: [PATCH] a few changes here... - foot no longer resizes by col,row because we've set every client to tiling - stop using a seperate enum for tagging in SceneNodeData - use enabling instead of positioning views out of the visible area --- runtime/share/mezzaluna/master.lua | 9 +++---- src/SceneNodeData.zig | 10 +------- src/View.zig | 9 +++++++ src/lua/View.zig | 39 ++++++++++++++++++++++++++++++ 4 files changed, 53 insertions(+), 14 deletions(-) diff --git a/runtime/share/mezzaluna/master.lua b/runtime/share/mezzaluna/master.lua index ae539cf..ae71be8 100644 --- a/runtime/share/mezzaluna/master.lua +++ b/runtime/share/mezzaluna/master.lua @@ -59,6 +59,7 @@ local master = function() return end + mez.view.set_enabled(ctx.tags[tag_id].master, true) if #ctx.tags[tag_id].stack == 0 then mez.view.set_size(ctx.tags[tag_id].master, res.width, res.height) mez.view.set_position(ctx.tags[tag_id].master, 0, 0) @@ -67,6 +68,7 @@ local master = function() mez.view.set_position(ctx.tags[tag_id].master, 0, 0) for i, stack_id in ipairs(ctx.tags[tag_id].stack) do + mez.view.set_enabled(stack_id, true) mez.view.set_size(stack_id, res.width * (1 - ctx.master_ratio), res.height / #ctx.tags[tag_id].stack) mez.view.set_position(stack_id, res.width * ctx.master_ratio, (res.height / #ctx.tags[tag_id].stack * (i - 1))) end @@ -78,12 +80,9 @@ local master = function() return end - mez.view.set_position(ctx.tags[tag_id].master, 0, -res.height) - mez.view.set_size(ctx.tags[tag_id].master, res.width, res.height) - + mez.view.set_enabled(ctx.tags[tag_id].master, false) for _, view in ipairs(ctx.tags[tag_id].stack) do - mez.view.set_position(view, 0, -res.height) - mez.view.set_size(view, res.width, res.height) + mez.view.set_enabled(view, false) end end diff --git a/src/SceneNodeData.zig b/src/SceneNodeData.zig index 764bdd5..d63607e 100644 --- a/src/SceneNodeData.zig +++ b/src/SceneNodeData.zig @@ -5,15 +5,7 @@ const LayerSurface = @import("LayerSurface.zig"); const Output = @import("Output.zig"); const Root = @import("Root.zig"); -const SceneNodeType = enum { - view, - layer_surface, - output, - output_layer, - root -}; - -pub const SceneNodeData = union(SceneNodeType) { +pub const SceneNodeData = union(enum) { view: *View, layer_surface: *LayerSurface, output: *Output, diff --git a/src/View.zig b/src/View.zig index 97f68bc..608ce0a 100644 --- a/src/View.zig +++ b/src/View.zig @@ -150,6 +150,15 @@ fn handleMap(listener: *wl.Listener(void)) void { server.events.exec("ViewMapPre", .{view.id}); + // we're gonna tell the client that it's tiled so it doesn't try anything + // stupid + _ = view.xdg_toplevel.setTiled(.{ + .top = true, + .bottom = true, + .left = true, + .right = true, + }); + view.xdg_toplevel.events.request_fullscreen.add(&view.request_fullscreen); view.xdg_toplevel.events.request_move.add(&view.request_move); view.xdg_toplevel.events.request_resize.add(&view.request_resize); diff --git a/src/lua/View.zig b/src/lua/View.zig index a38a01f..1065eff 100644 --- a/src/lua/View.zig +++ b/src/lua/View.zig @@ -1,6 +1,7 @@ const std = @import("std"); const zlua = @import("zlua"); const wlr = @import("wlroots"); +const wl = @import("wayland").server.wl; const Output = @import("../Output.zig"); const View = @import("../View.zig"); @@ -26,6 +27,10 @@ pub fn get_all_ids(L: *zlua.Lua) i32 { while(output_it.next()) |o| { if(o.output.data == null) continue; const output: *Output = @ptrCast(@alignCast(o.output.data.?)); + if (!output.state.enabled) { + std.log.debug("ts not enabled", .{}); + continue; + } const layers = [_]*wlr.SceneTree{ output.layers.content, @@ -245,3 +250,37 @@ pub fn get_app_id(L: *zlua.Lua) i32 { L.pushNil(); return 1; } + +// ---Get the app_id of the view +// ---@param view_id view_id 0 maps to focused view +// ---@param enable boolean +pub fn set_enabled(L: *zlua.Lua) i32 { + const view_id = LuaUtils.coerceInteger(u64, L.checkInteger(1)) catch view_id_err(L); + if (!L.isBoolean(2)) { + L.raiseErrorStr("argument 2 must be a boolean", .{}); + } + const activate = L.toBoolean(2); + + if (LuaUtils.viewById(view_id)) |v| { + _ = v.xdg_toplevel.setActivated(activate); + return 0; + } + + L.pushNil(); + return 1; +} + +// ---Get the app_id of the view +// ---@param view_id view_id 0 maps to focused view +// ---@return boolean? +pub fn get_enabled(L: *zlua.Lua) i32 { + const view_id = LuaUtils.coerceInteger(u64, L.checkInteger(1)) catch view_id_err(L); + + if(LuaUtils.viewById(view_id)) |v| { + _ = L.pushBoolean(v.xdg_toplevel.current.activated); + return 1; + } + + L.pushNil(); + return 1; +}