mirror of
https://github.com/ghostty-org/ghostty.git
synced 2025-07-16 08:46:08 +03:00
Merge pull request #595 from mitchellh/gtk-single
apprt/gtk: gtk-single-instance defaults to true only if desktop env
This commit is contained in:
@ -16,6 +16,7 @@ const builtin = @import("builtin");
|
|||||||
const glfw = @import("glfw");
|
const glfw = @import("glfw");
|
||||||
const configpkg = @import("../../config.zig");
|
const configpkg = @import("../../config.zig");
|
||||||
const input = @import("../../input.zig");
|
const input = @import("../../input.zig");
|
||||||
|
const internal_os = @import("../../os/main.zig");
|
||||||
const Config = configpkg.Config;
|
const Config = configpkg.Config;
|
||||||
const CoreApp = @import("../../App.zig");
|
const CoreApp = @import("../../App.zig");
|
||||||
const CoreSurface = @import("../../Surface.zig");
|
const CoreSurface = @import("../../Surface.zig");
|
||||||
@ -72,10 +73,16 @@ pub fn init(core_app: *CoreApp, opts: Options) !App {
|
|||||||
const cursor_none = c.gdk_cursor_new_from_name("none", null);
|
const cursor_none = c.gdk_cursor_new_from_name("none", null);
|
||||||
errdefer if (cursor_none) |cursor| c.g_object_unref(cursor);
|
errdefer if (cursor_none) |cursor| c.g_object_unref(cursor);
|
||||||
|
|
||||||
|
const single_instance = switch (config.@"gtk-single-instance") {
|
||||||
|
.true => true,
|
||||||
|
.false => false,
|
||||||
|
.desktop => internal_os.launchedFromDesktop(),
|
||||||
|
};
|
||||||
|
|
||||||
// Setup the flags for our application.
|
// Setup the flags for our application.
|
||||||
const app_flags: c.GApplicationFlags = app_flags: {
|
const app_flags: c.GApplicationFlags = app_flags: {
|
||||||
var flags: c.GApplicationFlags = c.G_APPLICATION_DEFAULT_FLAGS;
|
var flags: c.GApplicationFlags = c.G_APPLICATION_DEFAULT_FLAGS;
|
||||||
if (!config.@"gtk-single-instance") flags |= c.G_APPLICATION_NON_UNIQUE;
|
if (!single_instance) flags |= c.G_APPLICATION_NON_UNIQUE;
|
||||||
break :app_flags flags;
|
break :app_flags flags;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -88,6 +95,10 @@ pub fn init(core_app: *CoreApp, opts: Options) !App {
|
|||||||
};
|
};
|
||||||
|
|
||||||
// Create our GTK Application which encapsulates our process.
|
// Create our GTK Application which encapsulates our process.
|
||||||
|
log.debug("creating GTK application id={s} single-instance={}", .{
|
||||||
|
app_id,
|
||||||
|
single_instance,
|
||||||
|
});
|
||||||
const app = @as(?*c.GtkApplication, @ptrCast(c.gtk_application_new(
|
const app = @as(?*c.GtkApplication, @ptrCast(c.gtk_application_new(
|
||||||
app_id.ptr,
|
app_id.ptr,
|
||||||
app_flags,
|
app_flags,
|
||||||
|
@ -406,14 +406,19 @@ keybind: Keybinds = .{},
|
|||||||
/// This does not work with GLFW builds.
|
/// This does not work with GLFW builds.
|
||||||
@"macos-option-as-alt": OptionAsAlt = .false,
|
@"macos-option-as-alt": OptionAsAlt = .false,
|
||||||
|
|
||||||
/// If true (default), then the Ghostty GTK application will run in
|
/// If true, the Ghostty GTK application will run in single-instance mode:
|
||||||
/// single-instance mode: each new `ghostty` process launched will result
|
/// each new `ghostty` process launched will result in a new window if there
|
||||||
/// in a new window, if there is already a running process.
|
/// is already a running process.
|
||||||
///
|
///
|
||||||
/// If false, each new ghostty process will launch a separate application.
|
/// If false, each new ghostty process will launch a separate application.
|
||||||
///
|
///
|
||||||
/// Debug builds of Ghostty have a separate single-instance ID.
|
/// The default value is "desktop" which will default to "true" if Ghostty
|
||||||
@"gtk-single-instance": bool = true,
|
/// detects it was launched from the .desktop file such as an app launcher.
|
||||||
|
/// If Ghostty is launched from the command line, it will default to "false".
|
||||||
|
///
|
||||||
|
/// Note that debug builds of Ghostty have a separate single-instance ID
|
||||||
|
/// so you can test single instance without conflicting with release builds.
|
||||||
|
@"gtk-single-instance": GtkSingleInstance = .desktop,
|
||||||
|
|
||||||
/// If true (default), then the Ghostty GTK tabs will be "wide." Wide tabs
|
/// If true (default), then the Ghostty GTK tabs will be "wide." Wide tabs
|
||||||
/// are the new typical Gnome style where tabs fill their available space.
|
/// are the new typical Gnome style where tabs fill their available space.
|
||||||
@ -1856,3 +1861,10 @@ pub const WindowTheme = enum {
|
|||||||
light,
|
light,
|
||||||
dark,
|
dark,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/// See gtk-single-instance
|
||||||
|
pub const GtkSingleInstance = enum {
|
||||||
|
desktop,
|
||||||
|
false,
|
||||||
|
true,
|
||||||
|
};
|
||||||
|
Reference in New Issue
Block a user