mirror of
https://github.com/MezzalunaWM/Mezzaluna.git
synced 2026-03-08 04:57:32 -04:00
intial setup for passing arbitrary data to hooks
This commit is contained in:
parent
eeb6bf2278
commit
2c130539f6
4 changed files with 42 additions and 24 deletions
|
|
@ -1,10 +1,10 @@
|
|||
local env_conf = os.getenv("XDG_CONFIG_HOME")
|
||||
if not env_conf then
|
||||
env_conf = os.getenv("HOME")
|
||||
if not env_conf then
|
||||
error("Couldn't determine potential config directory is $HOME set?")
|
||||
end
|
||||
env_conf = mez.fs.joinpath(env_conf, ".config")
|
||||
env_conf = os.getenv("HOME")
|
||||
if not env_conf then
|
||||
error("Couldn't determine potential config directory is $HOME set?")
|
||||
end
|
||||
env_conf = mez.fs.joinpath(env_conf, ".config")
|
||||
end
|
||||
|
||||
mez.path.config = mez.fs.joinpath(env_conf, "mez", "init.lua")
|
||||
|
|
@ -12,27 +12,27 @@ package.path = package.path..";"..mez.fs.joinpath(env_conf, "mez", "lua", "?.lua
|
|||
|
||||
-- this is an example
|
||||
mez.input.add_keymap("alt", "a", {
|
||||
press = function()
|
||||
print("hello from my keymap")
|
||||
end
|
||||
press = function()
|
||||
print("hello from my keymap")
|
||||
end
|
||||
})
|
||||
|
||||
mez.input.add_keymap("alt", "Return", {
|
||||
press = function()
|
||||
mez.api.spawn("foot")
|
||||
end,
|
||||
press = function()
|
||||
mez.api.spawn("foot")
|
||||
end,
|
||||
})
|
||||
|
||||
mez.input.add_keymap("alt", "c", {
|
||||
press = function ()
|
||||
mez.api.close()
|
||||
end
|
||||
press = function ()
|
||||
mez.api.close()
|
||||
end
|
||||
})
|
||||
|
||||
mez.input.add_keymap("alt", "q", {
|
||||
press = function ()
|
||||
mez.api.exit();
|
||||
end
|
||||
press = function ()
|
||||
mez.api.exit();
|
||||
end
|
||||
})
|
||||
|
||||
for i = 1, 12 do
|
||||
|
|
@ -51,7 +51,8 @@ end
|
|||
-- })
|
||||
|
||||
mez.hook.add_hook("ViewMapPre", {
|
||||
callback = function()
|
||||
callback = function(a)
|
||||
print(a)
|
||||
print("hello world")
|
||||
end
|
||||
})
|
||||
|
|
|
|||
|
|
@ -41,12 +41,12 @@ pub fn put(self: *Events, key: []const u8, hook: *const Hook) !void {
|
|||
// TODO: figure out deletion
|
||||
// pub fn del(self: *Events, key: ???) !void {}
|
||||
|
||||
pub fn exec(self: *Events, event: []const u8) void {
|
||||
pub fn exec(self: *Events, event: []const u8, args: anytype) void {
|
||||
if (self.events.get(event)) |e| {
|
||||
var node = e.first;
|
||||
while (node) |n| : (node = n.next) {
|
||||
const data: *Node = @fieldParentPtr("node", n);
|
||||
data.hook.callback();
|
||||
data.hook.callback(args);
|
||||
|
||||
// FIXME: not sure why but for some reason our ll doesn't seem to want to
|
||||
// admit that there's nothing after the first node.
|
||||
|
|
|
|||
|
|
@ -17,7 +17,13 @@ options: struct {
|
|||
lua_cb_ref_idx: i32,
|
||||
},
|
||||
|
||||
pub fn callback(self: *const Hook) void {
|
||||
pub fn callback(self: *const Hook, args: anytype) void {
|
||||
const ArgsType = @TypeOf(args);
|
||||
const args_type_info = @typeInfo(ArgsType);
|
||||
if (args_type_info != .@"struct") {
|
||||
@compileError("expected tuple or struct argument, found " ++ @typeName(ArgsType));
|
||||
}
|
||||
|
||||
const t = Lua.state.rawGetIndex(zlua.registry_index, self.options.lua_cb_ref_idx);
|
||||
if (t != zlua.LuaType.function) {
|
||||
std.log.err("Failed to call hook, it doesn't have a callback.", .{});
|
||||
|
|
@ -25,8 +31,19 @@ pub fn callback(self: *const Hook) void {
|
|||
return;
|
||||
}
|
||||
|
||||
var i: u8 = 0;
|
||||
inline for (args, 0..) |field, k| {
|
||||
// std.log.debug("{any}", .{field});
|
||||
|
||||
// oh dear god I hope this works
|
||||
std.log.debug("sldkjf {any}", .{field});
|
||||
try Lua.state.pushAny(field);
|
||||
i = k;
|
||||
}
|
||||
|
||||
// TODO: we need to send some data along with the callback, this data will
|
||||
// change based on the event which the user is hooking into
|
||||
Lua.state.call(.{ .args = 0, .results = 0 });
|
||||
Lua.state.protectedCall(.{ .args = i, .results = 0 }) catch {
|
||||
};
|
||||
Lua.state.pop(-1);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -100,7 +100,7 @@ fn handleMap(listener: *wl.Listener(void)) void {
|
|||
const view: *View = @fieldParentPtr("map", listener);
|
||||
std.log.debug("Mapping view '{s}'", .{view.xdg_toplevel.title orelse "(unnamed)"});
|
||||
|
||||
server.events.exec("ViewMapPre");
|
||||
server.events.exec("ViewMapPre", .{view.id});
|
||||
|
||||
view.xdg_toplevel.events.request_fullscreen.add(&view.request_fullscreen);
|
||||
view.xdg_toplevel.events.request_move.add(&view.request_move);
|
||||
|
|
@ -124,7 +124,7 @@ fn handleMap(listener: *wl.Listener(void)) void {
|
|||
|
||||
view.mapped = true;
|
||||
|
||||
server.events.exec("ViewMapPost");
|
||||
server.events.exec("ViewMapPost", .{});
|
||||
}
|
||||
|
||||
fn handleUnmap(listener: *wl.Listener(void)) void {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue