rem: unnecessary signal handler
All checks were successful
Zig Project Action / Lint, Spell-check and test zig project (push) Successful in 2m1s
All checks were successful
Zig Project Action / Lint, Spell-check and test zig project (push) Successful in 2m1s
No event-based re-sizing, instead each re-render resizes by default.
This commit is contained in:
47
src/app.zig
47
src/app.zig
@@ -44,13 +44,13 @@ pub fn App(comptime E: type) type {
|
|||||||
const element = @import("element.zig");
|
const element = @import("element.zig");
|
||||||
pub const Element = element.Element(Event);
|
pub const Element = element.Element(Event);
|
||||||
pub const Scrollable = element.Scrollable(Event);
|
pub const Scrollable = element.Scrollable(Event);
|
||||||
|
pub const Exec = element.Exec(Event, Queue);
|
||||||
pub const Queue = queue.Queue(Event, 256);
|
pub const Queue = queue.Queue(Event, 256);
|
||||||
|
|
||||||
queue: Queue,
|
queue: Queue,
|
||||||
thread: ?std.Thread,
|
thread: ?std.Thread = null,
|
||||||
quit_event: std.Thread.ResetEvent,
|
quit_event: std.Thread.ResetEvent,
|
||||||
termios: ?std.posix.termios = null,
|
termios: ?std.posix.termios = null,
|
||||||
attached_handler: bool = false,
|
|
||||||
|
|
||||||
pub const SignalHandler = struct {
|
pub const SignalHandler = struct {
|
||||||
context: *anyopaque,
|
context: *anyopaque,
|
||||||
@@ -59,32 +59,14 @@ pub fn App(comptime E: type) type {
|
|||||||
|
|
||||||
pub const init: @This() = .{
|
pub const init: @This() = .{
|
||||||
.queue = .{},
|
.queue = .{},
|
||||||
.thread = null,
|
|
||||||
.quit_event = .{},
|
.quit_event = .{},
|
||||||
.termios = null,
|
|
||||||
.attached_handler = false,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
pub fn start(this: *@This()) !void {
|
pub fn start(this: *@This()) !void {
|
||||||
if (this.thread) |_| return;
|
if (this.thread) |_| return;
|
||||||
|
|
||||||
if (!this.attached_handler) {
|
// post init event (as the very first element to be in the queue - event loop)
|
||||||
var winch_act = std.posix.Sigaction{
|
this.postEvent(.init);
|
||||||
.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);
|
|
||||||
}
|
|
||||||
|
|
||||||
this.quit_event.reset();
|
this.quit_event.reset();
|
||||||
this.thread = try std.Thread.spawn(.{}, @This().run, .{this});
|
this.thread = try std.Thread.spawn(.{}, @This().run, .{this});
|
||||||
@@ -139,27 +121,6 @@ pub fn App(comptime E: type) type {
|
|||||||
this.queue.push(e);
|
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 {
|
fn run(this: *@This()) !void {
|
||||||
// thread to read user inputs
|
// thread to read user inputs
|
||||||
var buf: [256]u8 = undefined;
|
var buf: [256]u8 = undefined;
|
||||||
|
|||||||
Reference in New Issue
Block a user