mirror of
https://github.com/ghostty-org/ghostty.git
synced 2025-08-02 14:57:31 +03:00
apprt/gtk: add toggle_maximize keybind and window-maximize config option
This commit is contained in:
@ -565,6 +565,7 @@ typedef enum {
|
||||
GHOSTTY_ACTION_CLOSE_TAB,
|
||||
GHOSTTY_ACTION_NEW_SPLIT,
|
||||
GHOSTTY_ACTION_CLOSE_ALL_WINDOWS,
|
||||
GHOSTTY_ACTION_TOGGLE_MAXIMIZE,
|
||||
GHOSTTY_ACTION_TOGGLE_FULLSCREEN,
|
||||
GHOSTTY_ACTION_TOGGLE_TAB_OVERVIEW,
|
||||
GHOSTTY_ACTION_TOGGLE_WINDOW_DECORATIONS,
|
||||
|
@ -646,6 +646,16 @@ pub fn init(
|
||||
// an initial size shouldn't stop our terminal from working.
|
||||
log.warn("unable to set initial window size: {s}", .{err});
|
||||
};
|
||||
|
||||
if (config.@"window-maximize") {
|
||||
rt_app.performAction(
|
||||
.{ .surface = self },
|
||||
.toggle_maximize,
|
||||
{},
|
||||
) catch |err| {
|
||||
log.warn("unable to maximize window: {s}", .{err});
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
if (config.title) |title| {
|
||||
@ -4168,6 +4178,12 @@ pub fn performBindingAction(self: *Surface, action: input.Binding.Action) !bool
|
||||
{},
|
||||
),
|
||||
|
||||
.toggle_maximize => try self.rt_app.performAction(
|
||||
.{ .surface = self },
|
||||
.toggle_maximize,
|
||||
{},
|
||||
),
|
||||
|
||||
.toggle_fullscreen => try self.rt_app.performAction(
|
||||
.{ .surface = self },
|
||||
.toggle_fullscreen,
|
||||
|
@ -92,6 +92,9 @@ pub const Action = union(Key) {
|
||||
/// Close all open windows.
|
||||
close_all_windows,
|
||||
|
||||
/// Toggle maximized window state.
|
||||
toggle_maximize,
|
||||
|
||||
/// Toggle fullscreen mode.
|
||||
toggle_fullscreen: Fullscreen,
|
||||
|
||||
@ -231,6 +234,7 @@ pub const Action = union(Key) {
|
||||
close_tab,
|
||||
new_split,
|
||||
close_all_windows,
|
||||
toggle_maximize,
|
||||
toggle_fullscreen,
|
||||
toggle_tab_overview,
|
||||
toggle_window_decorations,
|
||||
|
@ -237,6 +237,7 @@ pub const App = struct {
|
||||
.color_change,
|
||||
.pwd,
|
||||
.config_change,
|
||||
.toggle_maximize,
|
||||
=> log.info("unimplemented action={}", .{action}),
|
||||
}
|
||||
}
|
||||
|
@ -507,6 +507,7 @@ pub fn performAction(
|
||||
.app => null,
|
||||
.surface => |v| v,
|
||||
}),
|
||||
.toggle_maximize => self.toggleMaximize(target),
|
||||
.toggle_fullscreen => self.toggleFullscreen(target, value),
|
||||
|
||||
.new_tab => try self.newTab(target),
|
||||
@ -709,6 +710,22 @@ fn controlInspector(
|
||||
surface.controlInspector(mode);
|
||||
}
|
||||
|
||||
fn toggleMaximize(_: *App, target: apprt.Target) void {
|
||||
switch (target) {
|
||||
.app => {},
|
||||
.surface => |v| {
|
||||
const window = v.rt_surface.container.window() orelse {
|
||||
log.info(
|
||||
"toggleMaximize invalid for container={s}",
|
||||
.{@tagName(v.rt_surface.container)},
|
||||
);
|
||||
return;
|
||||
};
|
||||
window.toggleMaximize();
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
fn toggleFullscreen(
|
||||
_: *App,
|
||||
target: apprt.Target,
|
||||
|
@ -522,6 +522,15 @@ pub fn toggleTabOverview(self: *Window) void {
|
||||
}
|
||||
}
|
||||
|
||||
/// Toggle the maximized state for this window.
|
||||
pub fn toggleMaximize(self: *Window) void {
|
||||
if (c.gtk_window_is_maximized(self.window) == 0) {
|
||||
c.gtk_window_maximize(self.window);
|
||||
} else {
|
||||
c.gtk_window_unmaximize(self.window);
|
||||
}
|
||||
}
|
||||
|
||||
/// Toggle fullscreen for this window.
|
||||
pub fn toggleFullscreen(self: *Window) void {
|
||||
const is_fullscreen = c.gtk_window_is_fullscreen(self.window);
|
||||
|
@ -1214,6 +1214,13 @@ keybind: Keybinds = .{},
|
||||
@"window-position-x": ?i16 = null,
|
||||
@"window-position-y": ?i16 = null,
|
||||
|
||||
/// Whether to start the window in a maximized state. This is only related to
|
||||
/// the X11 window manager's concept of maximization. In other words, this
|
||||
/// will set the _NET_WM_STATE property to _NET_WM_STATE_MAXIMIZED_VERT and
|
||||
/// _NET_WM_STATE_MAXIMIZED_HORZ on launch. This will not affect the window
|
||||
/// size or position. This is only supported on Linux.
|
||||
@"window-maximize": bool = false,
|
||||
|
||||
/// Whether to enable saving and restoring window state. Window state includes
|
||||
/// their position, size, tabs, splits, etc. Some window state requires shell
|
||||
/// integration, such as preserving working directories. See `shell-integration`
|
||||
|
@ -391,6 +391,9 @@ pub const Action = union(enum) {
|
||||
/// This only works for macOS currently.
|
||||
close_all_windows: void,
|
||||
|
||||
/// Toggle maximized window state. This only works on Linux.
|
||||
toggle_maximize: void,
|
||||
|
||||
/// Toggle fullscreen mode of window.
|
||||
toggle_fullscreen: void,
|
||||
|
||||
@ -737,6 +740,7 @@ pub const Action = union(enum) {
|
||||
.close_surface,
|
||||
.close_tab,
|
||||
.close_window,
|
||||
.toggle_maximize,
|
||||
.toggle_fullscreen,
|
||||
.toggle_window_decorations,
|
||||
.toggle_secure_input,
|
||||
|
Reference in New Issue
Block a user