From 42204bc4d257d4d23f5f6ac6a14c75daf4b8ae87 Mon Sep 17 00:00:00 2001 From: Harrison DiAmbrosio Date: Wed, 7 Jan 2026 01:18:39 -0500 Subject: [PATCH] started letting/denying passthrough of mouse events --- runtime/share/mezzaluna/master.lua | 13 +++++-------- src/Cursor.zig | 10 ++++------ src/types/Mousemap.zig | 10 +++++++--- 3 files changed, 16 insertions(+), 17 deletions(-) diff --git a/runtime/share/mezzaluna/master.lua b/runtime/share/mezzaluna/master.lua index 641d169..8cf9e20 100644 --- a/runtime/share/mezzaluna/master.lua +++ b/runtime/share/mezzaluna/master.lua @@ -280,23 +280,20 @@ local master = function() mez.view.set_position(drag.view.id, pos.x - drag.view.offset.x, pos.y - drag.view.offset.y) end end, - }) + }, {}) mez.input.add_mousemap("alt", "BTN_RIGHT", { + press = function() return false end, drag = function(pos, drag) if drag.view ~= nil then mez.view.set_size( drag.view.id, - (pos.x - drag.start.x) + drag.view.offset.x, - (pos.y - drag.start.y) + drag.view.offset.y + (pos.x - drag.start.x) + drag.view.offset.x + (drag.view.dims.width - drag.view.offset.x), + (pos.y - drag.start.y) + drag.view.offset.y + (drag.view.dims.height - drag.view.offset.y) ) - -- mez.view.set_size( - -- drag.view.id, - -- (pos.x - drag.start.x) + drag.view.offset.x + (drag.view.dims.width - drag.view.offset.x), - -- (pos.y - drag.start.y) + drag.view.offset.y + (drag.view.dims.height - drag.view.offset.y) - -- ) end end, + release = function() return false end }) end diff --git a/src/Cursor.zig b/src/Cursor.zig index 3e9fb10..29b6925 100644 --- a/src/Cursor.zig +++ b/src/Cursor.zig @@ -90,8 +90,8 @@ pub fn processCursorMotion(self: *Cursor, time_msec: u32) void { // Proceed if mousemap for current mouse and modifier state's exist if (server.mousemaps.get(Mousemap.hash(modifiers, @bitCast(self.drag.?.event_code)))) |map| { if(map.options.lua_drag_ref_idx > 0) { - handled = true; - map.callback(.drag, .{ + std.debug.print("check\n", .{}); + handled = map.callback(.drag, .{ .{ .x = @as(c_int, @intFromFloat(self.wlr_cursor.x)), .y = @as(c_int, @intFromFloat(self.wlr_cursor.y)) @@ -210,24 +210,22 @@ fn handleButton( .pressed => { // Only make callback if a callback function exists if(map.options.lua_press_ref_idx > 0) { - map.callback(.press, .{ + handled = map.callback(.press, .{ .{ .x = @as(c_int, @intFromFloat(cursor.wlr_cursor.x)), .y = @as(c_int, @intFromFloat(cursor.wlr_cursor.y)) }, }); - handled = true; } }, .released => { if(map.options.lua_press_ref_idx > 0) { - map.callback(.release, .{ + handled = map.callback(.release, .{ .{ .x = @as(c_int, @intFromFloat(cursor.wlr_cursor.x)), .y = @as(c_int, @intFromFloat(cursor.wlr_cursor.y)) }, }); - handled = true; } }, else => { unreachable; } diff --git a/src/types/Mousemap.zig b/src/types/Mousemap.zig index 83e1a3a..af30708 100644 --- a/src/types/Mousemap.zig +++ b/src/types/Mousemap.zig @@ -24,7 +24,8 @@ options: struct { pub const MousemapState = enum { press, drag, release }; -pub fn callback(self: *const Mousemap, state: MousemapState, args: anytype) void { +// Returns true if mouse input should be passed through +pub fn callback(self: *const Mousemap, state: MousemapState, args: anytype) bool { const ArgsType = @TypeOf(args); const args_type_info = @typeInfo(ArgsType); if (args_type_info != .@"struct") { @@ -41,7 +42,7 @@ pub fn callback(self: *const Mousemap, state: MousemapState, args: anytype) void if (t != zlua.LuaType.function) { RemoteLua.sendNewLogEntry("Failed to call keybind, it doesn't have a callback."); Lua.state.pop(1); - return; + return false; } // allow passing any arguments to the lua hook @@ -51,10 +52,13 @@ pub fn callback(self: *const Mousemap, state: MousemapState, args: anytype) void i = k; } - Lua.state.protectedCall(.{ .args = i, .results = 0 }) catch { + Lua.state.protectedCall(.{ .args = i, .results = 1 }) catch { RemoteLua.sendNewLogEntry(Lua.state.toString(-1) catch unreachable); }; + + const ret = if (Lua.state.isBoolean(-1)) Lua.state.toBoolean(-1) else false; Lua.state.pop(-1); + return ret; } pub fn hash(modifier: wlr.Keyboard.ModifierMask, event_code: i32) u64 {