apprt/embedded: store title directly instead of get_title cb

This commit is contained in:
Mitchell Hashimoto
2024-08-10 11:14:38 -07:00
parent ccf62a4960
commit 61ad6d10de
3 changed files with 14 additions and 14 deletions

View File

@ -408,7 +408,6 @@ typedef void (*ghostty_runtime_wakeup_cb)(void*);
typedef const ghostty_config_t (*ghostty_runtime_reload_config_cb)(void*); typedef const ghostty_config_t (*ghostty_runtime_reload_config_cb)(void*);
typedef void (*ghostty_runtime_open_config_cb)(void*); typedef void (*ghostty_runtime_open_config_cb)(void*);
typedef void (*ghostty_runtime_set_title_cb)(void*, const char*); typedef void (*ghostty_runtime_set_title_cb)(void*, const char*);
typedef const char* (*ghostty_runtime_get_title_cb)(void*);
typedef void (*ghostty_runtime_set_mouse_shape_cb)(void*, typedef void (*ghostty_runtime_set_mouse_shape_cb)(void*,
ghostty_mouse_shape_e); ghostty_mouse_shape_e);
typedef void (*ghostty_runtime_set_mouse_visibility_cb)(void*, bool); typedef void (*ghostty_runtime_set_mouse_visibility_cb)(void*, bool);
@ -463,7 +462,6 @@ typedef struct {
ghostty_runtime_reload_config_cb reload_config_cb; ghostty_runtime_reload_config_cb reload_config_cb;
ghostty_runtime_open_config_cb open_config_cb; ghostty_runtime_open_config_cb open_config_cb;
ghostty_runtime_set_title_cb set_title_cb; ghostty_runtime_set_title_cb set_title_cb;
ghostty_runtime_get_title_cb get_title_cb;
ghostty_runtime_set_mouse_shape_cb set_mouse_shape_cb; ghostty_runtime_set_mouse_shape_cb set_mouse_shape_cb;
ghostty_runtime_set_mouse_visibility_cb set_mouse_visibility_cb; ghostty_runtime_set_mouse_visibility_cb set_mouse_visibility_cb;
ghostty_runtime_read_clipboard_cb read_clipboard_cb; ghostty_runtime_read_clipboard_cb read_clipboard_cb;

View File

@ -70,7 +70,6 @@ extension Ghostty {
reload_config_cb: { userdata in App.reloadConfig(userdata) }, reload_config_cb: { userdata in App.reloadConfig(userdata) },
open_config_cb: { userdata in App.openConfig(userdata) }, open_config_cb: { userdata in App.openConfig(userdata) },
set_title_cb: { userdata, title in App.setTitle(userdata, title: title) }, set_title_cb: { userdata, title in App.setTitle(userdata, title: title) },
get_title_cb: { userdata in App.title(userdata) },
set_mouse_shape_cb: { userdata, shape in App.setMouseShape(userdata, shape: shape) }, set_mouse_shape_cb: { userdata, shape in App.setMouseShape(userdata, shape: shape) },
set_mouse_visibility_cb: { userdata, visible in App.setMouseVisibility(userdata, visible: visible) }, set_mouse_visibility_cb: { userdata, visible in App.setMouseVisibility(userdata, visible: visible) },
read_clipboard_cb: { userdata, loc, state in App.readClipboard(userdata, location: loc, state: state) }, read_clipboard_cb: { userdata, loc, state in App.readClipboard(userdata, location: loc, state: state) },

View File

@ -55,9 +55,6 @@ pub const App = struct {
/// Called to set the title of the window. /// Called to set the title of the window.
set_title: *const fn (SurfaceUD, [*]const u8) callconv(.C) void, set_title: *const fn (SurfaceUD, [*]const u8) callconv(.C) void,
/// Called to get the title of the window.
get_title: ?*const fn (SurfaceUD) callconv(.C) ?[*]const u8 = null,
/// Called to set the cursor shape. /// Called to set the cursor shape.
set_mouse_shape: *const fn (SurfaceUD, terminal.MouseShape) callconv(.C) void, set_mouse_shape: *const fn (SurfaceUD, terminal.MouseShape) callconv(.C) void,
@ -309,6 +306,10 @@ pub const Surface = struct {
keymap_state: input.Keymap.State, keymap_state: input.Keymap.State,
inspector: ?*Inspector = null, inspector: ?*Inspector = null,
/// The current title of the surface. The embedded apprt saves this so
/// that getTitle works without the implementer needing to save it.
title: ?[:0]const u8 = null,
/// Surface initialization options. /// Surface initialization options.
pub const Options = extern struct { pub const Options = extern struct {
/// The platform that this surface is being initialized for and /// The platform that this surface is being initialized for and
@ -432,6 +433,9 @@ pub const Surface = struct {
// Shut down our inspector // Shut down our inspector
self.freeInspector(); self.freeInspector();
// Free our title
if (self.title) |v| self.app.core_app.alloc.free(v);
// Remove ourselves from the list of known surfaces in the app. // Remove ourselves from the list of known surfaces in the app.
self.app.core_app.deleteSurface(self); self.app.core_app.deleteSurface(self);
@ -540,6 +544,12 @@ pub const Surface = struct {
} }
pub fn setTitle(self: *Surface, slice: [:0]const u8) !void { pub fn setTitle(self: *Surface, slice: [:0]const u8) !void {
// Dupe the title so that we can store it. If we get an allocation
// error we just ignore it, since this only breaks a few minor things.
const alloc = self.app.core_app.alloc;
if (self.title) |v| alloc.free(v);
self.title = alloc.dupeZ(u8, slice) catch null;
self.app.opts.set_title( self.app.opts.set_title(
self.userdata, self.userdata,
slice.ptr, slice.ptr,
@ -547,14 +557,7 @@ pub const Surface = struct {
} }
pub fn getTitle(self: *Surface) ?[:0]const u8 { pub fn getTitle(self: *Surface) ?[:0]const u8 {
const func = self.app.opts.get_title orelse { return self.title;
log.info("runtime embedder does not support get_title", .{});
return null;
};
const result = func(self.userdata);
if (result == null) return null;
return std.mem.sliceTo(@as([*:0]const u8, @ptrCast(result.?)), 0);
} }
pub fn setMouseShape(self: *Surface, shape: terminal.MouseShape) !void { pub fn setMouseShape(self: *Surface, shape: terminal.MouseShape) !void {