mirror of
https://github.com/ghostty-org/ghostty.git
synced 2025-07-23 20:26:09 +03:00
apprt/gtk: hook up buttons
This commit is contained in:
@ -13,6 +13,7 @@ const c = @import("c.zig");
|
||||
const log = std.log.scoped(.gtk);
|
||||
|
||||
app: *App,
|
||||
window: *c.GtkWindow,
|
||||
|
||||
pub fn create(app: *App) !void {
|
||||
if (app.config_errors_window != null) return error.InvalidOperation;
|
||||
@ -33,17 +34,20 @@ fn destroy(self: *ConfigErrors) void {
|
||||
}
|
||||
|
||||
fn init(self: *ConfigErrors, app: *App) !void {
|
||||
// Set some state
|
||||
self.* = .{ .app = app };
|
||||
|
||||
// Create the window
|
||||
const window = c.gtk_application_window_new(app.app);
|
||||
const gtk_window: *c.GtkWindow = @ptrCast(window);
|
||||
errdefer c.gtk_window_destroy(gtk_window);
|
||||
c.gtk_window_set_title(gtk_window, "Configuration Errors");
|
||||
c.gtk_window_set_default_size(gtk_window, 600, 300);
|
||||
c.gtk_window_set_default_size(gtk_window, 600, 275);
|
||||
_ = c.g_signal_connect_data(window, "destroy", c.G_CALLBACK(>kDestroy), self, null, c.G_CONNECT_DEFAULT);
|
||||
|
||||
// Set some state
|
||||
self.* = .{
|
||||
.app = app,
|
||||
.window = gtk_window,
|
||||
};
|
||||
|
||||
// Show the window
|
||||
const view = try PrimaryView.init(self);
|
||||
c.gtk_window_set_child(@ptrCast(window), view.root);
|
||||
@ -112,7 +116,7 @@ const PrimaryView = struct {
|
||||
"H:|-8-[label]-8-|",
|
||||
"H:|[text]|",
|
||||
"H:|[buttons]|",
|
||||
"V:|[label(<=100)][text(>=100)]-[buttons]-|",
|
||||
"V:|[label(<=80)][text(>=100)]-[buttons]-|",
|
||||
};
|
||||
};
|
||||
|
||||
@ -120,9 +124,6 @@ const ButtonsView = struct {
|
||||
root: *c.GtkWidget,
|
||||
|
||||
pub fn init(root: *ConfigErrors) !ButtonsView {
|
||||
// Todo for events
|
||||
_ = root;
|
||||
|
||||
const ignore_button = c.gtk_button_new_with_label("Ignore");
|
||||
errdefer c.g_object_unref(ignore_button);
|
||||
|
||||
@ -135,9 +136,40 @@ const ButtonsView = struct {
|
||||
.{ .name = "reload", .widget = reload_button },
|
||||
}, &vfl);
|
||||
|
||||
// Signals
|
||||
_ = c.g_signal_connect_data(
|
||||
ignore_button,
|
||||
"clicked",
|
||||
c.G_CALLBACK(>kIgnoreClick),
|
||||
root,
|
||||
null,
|
||||
c.G_CONNECT_DEFAULT,
|
||||
);
|
||||
_ = c.g_signal_connect_data(
|
||||
reload_button,
|
||||
"clicked",
|
||||
c.G_CALLBACK(>kReloadClick),
|
||||
root,
|
||||
null,
|
||||
c.G_CONNECT_DEFAULT,
|
||||
);
|
||||
|
||||
return .{ .root = view.root };
|
||||
}
|
||||
|
||||
fn gtkIgnoreClick(_: *c.GtkWidget, ud: ?*anyopaque) callconv(.C) void {
|
||||
const self: *ConfigErrors = @ptrCast(@alignCast(ud));
|
||||
c.gtk_window_destroy(@ptrCast(self.window));
|
||||
}
|
||||
|
||||
fn gtkReloadClick(_: *c.GtkWidget, ud: ?*anyopaque) callconv(.C) void {
|
||||
const self: *ConfigErrors = @ptrCast(@alignCast(ud));
|
||||
_ = self.app.reloadConfig() catch |err| {
|
||||
log.warn("error reloading config error={}", .{err});
|
||||
return;
|
||||
};
|
||||
}
|
||||
|
||||
const vfl = [_][*:0]const u8{
|
||||
"H:[ignore]-8-[reload]-8-|",
|
||||
};
|
||||
|
Reference in New Issue
Block a user