mirror of
https://github.com/ghostty-org/ghostty.git
synced 2025-07-14 15:56:13 +03:00
feat(gtk): show menu in context menu if titlebar is disabled
This commit is contained in:
@ -831,12 +831,12 @@ fn setSizeLimit(
|
|||||||
switch (target) {
|
switch (target) {
|
||||||
.app => {},
|
.app => {},
|
||||||
.surface => |v| try v.rt_surface.setSizeLimits(.{
|
.surface => |v| try v.rt_surface.setSizeLimits(.{
|
||||||
.width = value.min_width,
|
.width = value.min_width,
|
||||||
.height = value.min_height,
|
.height = value.min_height,
|
||||||
}, if (value.max_width > 0) .{
|
}, if (value.max_width > 0) .{
|
||||||
.width = value.max_width,
|
.width = value.max_width,
|
||||||
.height = value.max_height,
|
.height = value.max_height,
|
||||||
} else null),
|
} else null),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1766,12 +1766,10 @@ fn initActions(self: *App) void {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// This sets the self.menu property to the application menu that can be
|
/// Initializes and populates the provided GMenu with sections and actions.
|
||||||
/// shared by all application windows.
|
/// This function is used to set up the application's menu structure, either for
|
||||||
fn initMenu(self: *App) void {
|
/// the main menu button or as a context menu when window decorations are disabled.
|
||||||
const menu = c.g_menu_new();
|
fn initMenuContent(menu: *c.GMenu) void {
|
||||||
errdefer c.g_object_unref(menu);
|
|
||||||
|
|
||||||
{
|
{
|
||||||
const section = c.g_menu_new();
|
const section = c.g_menu_new();
|
||||||
defer c.g_object_unref(section);
|
defer c.g_object_unref(section);
|
||||||
@ -1793,7 +1791,14 @@ fn initMenu(self: *App) void {
|
|||||||
c.g_menu_append(section, "Reload Configuration", "app.reload-config");
|
c.g_menu_append(section, "Reload Configuration", "app.reload-config");
|
||||||
c.g_menu_append(section, "About Ghostty", "win.about");
|
c.g_menu_append(section, "About Ghostty", "win.about");
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// This sets the self.menu property to the application menu that can be
|
||||||
|
/// shared by all application windows.
|
||||||
|
fn initMenu(self: *App) void {
|
||||||
|
const menu = c.g_menu_new();
|
||||||
|
errdefer c.g_object_unref(menu);
|
||||||
|
initMenuContent(@ptrCast(menu));
|
||||||
self.menu = menu;
|
self.menu = menu;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1825,6 +1830,18 @@ fn initContextMenu(self: *App) void {
|
|||||||
c.g_menu_append(section, "Terminal Inspector", "win.toggle_inspector");
|
c.g_menu_append(section, "Terminal Inspector", "win.toggle_inspector");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!self.config.@"window-decoration") {
|
||||||
|
const section = c.g_menu_new();
|
||||||
|
defer c.g_object_unref(section);
|
||||||
|
const submenu = c.g_menu_new();
|
||||||
|
defer c.g_object_unref(submenu);
|
||||||
|
initMenuContent(@ptrCast(submenu));
|
||||||
|
|
||||||
|
// Just append the submenu to the menu structure
|
||||||
|
c.g_menu_append_submenu(section, "Menu", @ptrCast(@alignCast(submenu)));
|
||||||
|
c.g_menu_append_section(menu, null, @ptrCast(@alignCast(section)));
|
||||||
|
}
|
||||||
|
|
||||||
self.context_menu = menu;
|
self.context_menu = menu;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -270,7 +270,7 @@ pub fn init(self: *Window, app: *App) !void {
|
|||||||
}
|
}
|
||||||
|
|
||||||
self.context_menu = c.gtk_popover_menu_new_from_model(@ptrCast(@alignCast(self.app.context_menu)));
|
self.context_menu = c.gtk_popover_menu_new_from_model(@ptrCast(@alignCast(self.app.context_menu)));
|
||||||
c.gtk_widget_set_parent(self.context_menu, window);
|
c.gtk_widget_set_parent(self.context_menu, box);
|
||||||
c.gtk_popover_set_has_arrow(@ptrCast(@alignCast(self.context_menu)), 0);
|
c.gtk_popover_set_has_arrow(@ptrCast(@alignCast(self.context_menu)), 0);
|
||||||
c.gtk_widget_set_halign(self.context_menu, c.GTK_ALIGN_START);
|
c.gtk_widget_set_halign(self.context_menu, c.GTK_ALIGN_START);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user