mirror of
https://github.com/ghostty-org/ghostty.git
synced 2025-07-24 20:56:08 +03:00
apprt/gtk: disable copy in context menu while without selection
Left a FIXME where the "Copy" button action is disabled. Though very hackish this was the best way I found to do this currently. Disable sensitivity on the button didn't do anything and trying to remove the button altogether like on macOS, causes the menu to become really buggy. Either by the context menu turning into a scrollable list or by it becoming really janky and showing the user pre-update UI.
This commit is contained in:
@ -797,13 +797,7 @@ fn initContextMenu(self: *App) void {
|
||||
const menu = c.g_menu_new();
|
||||
errdefer c.g_object_unref(menu);
|
||||
|
||||
{
|
||||
const section = c.g_menu_new();
|
||||
defer c.g_object_unref(section);
|
||||
c.g_menu_append_section(menu, null, @ptrCast(@alignCast(section)));
|
||||
c.g_menu_append(section, "Copy", "win.copy");
|
||||
c.g_menu_append(section, "Paste", "win.paste");
|
||||
}
|
||||
createContextMenuCopyPasteSection(menu, false);
|
||||
|
||||
{
|
||||
const section = c.g_menu_new();
|
||||
@ -823,6 +817,20 @@ fn initContextMenu(self: *App) void {
|
||||
self.context_menu = menu;
|
||||
}
|
||||
|
||||
fn createContextMenuCopyPasteSection(menu: ?*c.GMenu, has_selection: bool) void {
|
||||
const section = c.g_menu_new();
|
||||
defer c.g_object_unref(section);
|
||||
c.g_menu_prepend_section(menu, null, @ptrCast(@alignCast(section)));
|
||||
// FIXME: Feels really hackish, but disabling sensitivity on this doesn't seems to work(?)
|
||||
c.g_menu_append(section, "Copy", if (has_selection) "win.copy" else "noop");
|
||||
c.g_menu_append(section, "Paste", "win.paste");
|
||||
}
|
||||
|
||||
pub fn refreshContextMenu(self: *App, has_selection: bool) void {
|
||||
c.g_menu_remove(self.context_menu, 0);
|
||||
createContextMenuCopyPasteSection(self.context_menu, has_selection);
|
||||
}
|
||||
|
||||
fn isValidAppId(app_id: [:0]const u8) bool {
|
||||
if (app_id.len > 255 or app_id.len == 0) return false;
|
||||
if (app_id[0] == '.') return false;
|
||||
|
@ -1199,6 +1199,9 @@ fn showContextMenu(self: *Surface, x: f32, y: f32) void {
|
||||
};
|
||||
|
||||
c.gtk_popover_set_pointing_to(@ptrCast(@alignCast(window.context_menu)), &rect);
|
||||
|
||||
self.app.refreshContextMenu(self.core_surface.hasSelection());
|
||||
|
||||
c.gtk_popover_popup(@ptrCast(@alignCast(window.context_menu)));
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user