mirror of
https://github.com/ghostty-org/ghostty.git
synced 2025-07-16 08:46:08 +03:00
apprt/gtk: compiles again -- does nothing
This commit is contained in:
@ -27,12 +27,11 @@ pub const App = struct {
|
|||||||
id: [:0]const u8 = "com.mitchellh.ghostty",
|
id: [:0]const u8 = "com.mitchellh.ghostty",
|
||||||
};
|
};
|
||||||
|
|
||||||
|
core_app: *CoreApp,
|
||||||
app: *c.GtkApplication,
|
app: *c.GtkApplication,
|
||||||
ctx: *c.GMainContext,
|
ctx: *c.GMainContext,
|
||||||
|
|
||||||
pub fn init(core_app: *CoreApp, opts: Options) !App {
|
pub fn init(core_app: *CoreApp, opts: Options) !App {
|
||||||
_ = core_app;
|
|
||||||
|
|
||||||
// Create our GTK Application which encapsulates our process.
|
// Create our GTK Application which encapsulates our process.
|
||||||
const app = @ptrCast(?*c.GtkApplication, c.gtk_application_new(
|
const app = @ptrCast(?*c.GtkApplication, c.gtk_application_new(
|
||||||
opts.id.ptr,
|
opts.id.ptr,
|
||||||
@ -74,7 +73,11 @@ pub const App = struct {
|
|||||||
// https://gitlab.gnome.org/GNOME/glib/-/blob/bd2ccc2f69ecfd78ca3f34ab59e42e2b462bad65/gio/gapplication.c#L2302
|
// https://gitlab.gnome.org/GNOME/glib/-/blob/bd2ccc2f69ecfd78ca3f34ab59e42e2b462bad65/gio/gapplication.c#L2302
|
||||||
c.g_application_activate(gapp);
|
c.g_application_activate(gapp);
|
||||||
|
|
||||||
return .{ .app = app, .ctx = ctx };
|
return .{
|
||||||
|
.core_app = core_app,
|
||||||
|
.app = app,
|
||||||
|
.ctx = ctx,
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
// Terminate the application. The application will not be restarted after
|
// Terminate the application. The application will not be restarted after
|
||||||
@ -91,11 +94,24 @@ pub const App = struct {
|
|||||||
c.g_main_context_wakeup(null);
|
c.g_main_context_wakeup(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn wait(self: App) !void {
|
/// Run the event loop. This doesn't return until the app exits.
|
||||||
|
pub fn run(self: *App) !void {
|
||||||
|
while (true) {
|
||||||
_ = c.g_main_context_iteration(self.ctx, 1);
|
_ = c.g_main_context_iteration(self.ctx, 1);
|
||||||
|
|
||||||
|
// Tick the terminal app
|
||||||
|
const should_quit = try self.core_app.tick(self);
|
||||||
|
if (false and should_quit) return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn newWindow(self: App) !void {
|
/// Close the given surface.
|
||||||
|
pub fn closeSurface(self: *App, surface: *Surface) void {
|
||||||
|
surface.deinit();
|
||||||
|
self.core_app.alloc.destroy(surface);
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn newWindow(self: App) !*Surface {
|
||||||
const window = c.gtk_application_window_new(self.app);
|
const window = c.gtk_application_window_new(self.app);
|
||||||
c.gtk_window_set_title(@ptrCast(*c.GtkWindow, window), "Ghostty");
|
c.gtk_window_set_title(@ptrCast(*c.GtkWindow, window), "Ghostty");
|
||||||
c.gtk_window_set_default_size(@ptrCast(*c.GtkWindow, window), 200, 200);
|
c.gtk_window_set_default_size(@ptrCast(*c.GtkWindow, window), 200, 200);
|
||||||
@ -120,6 +136,8 @@ pub const App = struct {
|
|||||||
);
|
);
|
||||||
|
|
||||||
c.gtk_widget_show(window);
|
c.gtk_widget_show(window);
|
||||||
|
|
||||||
|
return undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
fn activate(app: *c.GtkApplication, ud: ?*anyopaque) callconv(.C) void {
|
fn activate(app: *c.GtkApplication, ud: ?*anyopaque) callconv(.C) void {
|
||||||
@ -150,12 +168,32 @@ pub const App = struct {
|
|||||||
pub const Surface = struct {
|
pub const Surface = struct {
|
||||||
pub const Options = struct {};
|
pub const Options = struct {};
|
||||||
|
|
||||||
pub fn init(app: *const CoreApp, core_win: *CoreSurface, opts: Options) !Surface {
|
/// The app we're part of
|
||||||
_ = app;
|
app: *App,
|
||||||
_ = core_win;
|
|
||||||
_ = opts;
|
|
||||||
|
|
||||||
return .{};
|
/// The core surface backing this surface
|
||||||
|
core_surface: CoreSurface,
|
||||||
|
|
||||||
|
pub fn init(self: *Surface, app: *App) !void {
|
||||||
|
// Build our result
|
||||||
|
self.* = .{
|
||||||
|
.app = app,
|
||||||
|
.core_surface = undefined,
|
||||||
|
};
|
||||||
|
errdefer self.* = undefined;
|
||||||
|
|
||||||
|
// Add ourselves to the list of surfaces on the app.
|
||||||
|
try app.app.addSurface(self);
|
||||||
|
errdefer app.app.deleteSurface(self);
|
||||||
|
|
||||||
|
// Initialize our surface now that we have the stable pointer.
|
||||||
|
try self.core_surface.init(
|
||||||
|
app.app.alloc,
|
||||||
|
app.app.config,
|
||||||
|
.{ .rt_app = app, .mailbox = &app.app.mailbox },
|
||||||
|
self,
|
||||||
|
);
|
||||||
|
errdefer self.core_surface.deinit();
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn deinit(self: *Surface) void {
|
pub fn deinit(self: *Surface) void {
|
||||||
|
Reference in New Issue
Block a user