mirror of
https://github.com/ghostty-org/ghostty.git
synced 2025-08-02 14:57:31 +03:00
apprt/gtk: window actions
This commit is contained in:
@ -197,6 +197,7 @@ fn updateConfigErrors(self: *App) !void {
|
|||||||
|
|
||||||
fn syncActionAccelerators(self: *App) !void {
|
fn syncActionAccelerators(self: *App) !void {
|
||||||
try self.syncActionAccelerator("app.quit", .{ .quit = {} });
|
try self.syncActionAccelerator("app.quit", .{ .quit = {} });
|
||||||
|
try self.syncActionAccelerator("win.close", .{ .close_surface = {} });
|
||||||
}
|
}
|
||||||
|
|
||||||
fn syncActionAccelerator(
|
fn syncActionAccelerator(
|
||||||
@ -397,6 +398,7 @@ fn initActions(self: *App) void {
|
|||||||
fn initMenu(self: *App) void {
|
fn initMenu(self: *App) void {
|
||||||
const menu = c.g_menu_new();
|
const menu = c.g_menu_new();
|
||||||
errdefer c.g_object_unref(menu);
|
errdefer c.g_object_unref(menu);
|
||||||
|
c.g_menu_append(menu, "Close", "win.close");
|
||||||
c.g_menu_append(menu, "Quit", "app.quit");
|
c.g_menu_append(menu, "Quit", "app.quit");
|
||||||
|
|
||||||
// {
|
// {
|
||||||
|
@ -145,6 +145,9 @@ pub fn init(self: *Window, app: *App) !void {
|
|||||||
_ = c.g_signal_connect_data(notebook, "switch-page", c.G_CALLBACK(>kSwitchPage), self, null, c.G_CONNECT_DEFAULT);
|
_ = c.g_signal_connect_data(notebook, "switch-page", c.G_CALLBACK(>kSwitchPage), self, null, c.G_CONNECT_DEFAULT);
|
||||||
_ = c.g_signal_connect_data(notebook, "create-window", c.G_CALLBACK(>kNotebookCreateWindow), self, null, c.G_CONNECT_DEFAULT);
|
_ = c.g_signal_connect_data(notebook, "create-window", c.G_CALLBACK(>kNotebookCreateWindow), self, null, c.G_CONNECT_DEFAULT);
|
||||||
|
|
||||||
|
// Our actions for the menu
|
||||||
|
initActions(self);
|
||||||
|
|
||||||
// The box is our main child
|
// The box is our main child
|
||||||
c.gtk_window_set_child(gtk_window, box);
|
c.gtk_window_set_child(gtk_window, box);
|
||||||
|
|
||||||
@ -152,6 +155,17 @@ pub fn init(self: *Window, app: *App) !void {
|
|||||||
c.gtk_widget_show(window);
|
c.gtk_widget_show(window);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Sets up the GTK actions for the window scope. Actions are how GTK handles
|
||||||
|
/// menus and such. The menu is defined in App.zig but the action is defined
|
||||||
|
/// here. The string name binds them.
|
||||||
|
fn initActions(self: *Window) void {
|
||||||
|
const action_close = c.g_simple_action_new("close", null);
|
||||||
|
defer c.g_object_unref(action_close);
|
||||||
|
_ = c.g_signal_connect_data(action_close, "activate", c.G_CALLBACK(>kActionClose), self, null, c.G_CONNECT_DEFAULT);
|
||||||
|
|
||||||
|
c.g_action_map_add_action(@ptrCast(self.window), @ptrCast(action_close));
|
||||||
|
}
|
||||||
|
|
||||||
pub fn deinit(self: *Window) void {
|
pub fn deinit(self: *Window) void {
|
||||||
if (self.icon_search_dir) |ptr| self.app.core_app.alloc.free(ptr);
|
if (self.icon_search_dir) |ptr| self.app.core_app.alloc.free(ptr);
|
||||||
}
|
}
|
||||||
@ -465,6 +479,19 @@ fn getNotebookPageIndex(page: *c.GtkNotebookPage) c_int {
|
|||||||
return c.g_value_get_int(&value);
|
return c.g_value_get_int(&value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn gtkActionClose(
|
||||||
|
_: *c.GSimpleAction,
|
||||||
|
_: *c.GVariant,
|
||||||
|
ud: ?*anyopaque,
|
||||||
|
) callconv(.C) void {
|
||||||
|
const self: *Window = @ptrCast(@alignCast(ud orelse return));
|
||||||
|
const surface = self.app.core_app.focusedSurface() orelse return;
|
||||||
|
surface.performBindingAction(.{ .close_surface = {} }) catch |err| {
|
||||||
|
log.warn("error performing binding action error={}", .{err});
|
||||||
|
return;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
fn userdataSelf(ud: *anyopaque) *Window {
|
fn userdataSelf(ud: *anyopaque) *Window {
|
||||||
return @ptrCast(@alignCast(ud));
|
return @ptrCast(@alignCast(ud));
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user