diff --git a/src/app.zig b/src/app.zig index ad7c648..8a4e062 100644 --- a/src/app.zig +++ b/src/app.zig @@ -44,13 +44,13 @@ pub fn App(comptime E: type) type { const element = @import("element.zig"); pub const Element = element.Element(Event); pub const Scrollable = element.Scrollable(Event); + pub const Exec = element.Exec(Event, Queue); pub const Queue = queue.Queue(Event, 256); queue: Queue, - thread: ?std.Thread, + thread: ?std.Thread = null, quit_event: std.Thread.ResetEvent, termios: ?std.posix.termios = null, - attached_handler: bool = false, pub const SignalHandler = struct { context: *anyopaque, @@ -59,32 +59,14 @@ pub fn App(comptime E: type) type { pub const init: @This() = .{ .queue = .{}, - .thread = null, .quit_event = .{}, - .termios = null, - .attached_handler = false, }; pub fn start(this: *@This()) !void { if (this.thread) |_| return; - if (!this.attached_handler) { - var winch_act = std.posix.Sigaction{ - .handler = .{ .handler = @This().handleWinch }, - .mask = std.posix.empty_sigset, - .flags = 0, - }; - std.posix.sigaction(std.posix.SIG.WINCH, &winch_act, null); - - try registerWinch(.{ - .context = this, - .callback = @This().winsizeCallback, - }); - this.attached_handler = true; - - // post init event (as the very first element to be in the queue - event loop) - this.postEvent(.init); - } + // post init event (as the very first element to be in the queue - event loop) + this.postEvent(.init); this.quit_event.reset(); this.thread = try std.Thread.spawn(.{}, @This().run, .{this}); @@ -139,27 +121,6 @@ pub fn App(comptime E: type) type { this.queue.push(e); } - fn winsizeCallback(ptr: *anyopaque) void { - const this: *@This() = @ptrCast(@alignCast(ptr)); - _ = this; - // this.postEvent(.{ .size = terminal.getTerminalSize() }); - } - - var winch_handler: ?SignalHandler = null; - - fn registerWinch(handler: SignalHandler) !void { - if (winch_handler) |_| { - @panic("Cannot register another WINCH handler."); - } - winch_handler = handler; - } - - fn handleWinch(_: c_int) callconv(.C) void { - if (winch_handler) |handler| { - handler.callback(handler.context); - } - } - fn run(this: *@This()) !void { // thread to read user inputs var buf: [256]u8 = undefined;