mirror of
https://github.com/ghostty-org/ghostty.git
synced 2025-08-02 14:57:31 +03:00
apprt/embedded: ghostty_surface_binding_action can now run any action
This commit is contained in:
@ -230,13 +230,6 @@ typedef enum {
|
|||||||
GHOSTTY_KEY_RIGHT_SUPER,
|
GHOSTTY_KEY_RIGHT_SUPER,
|
||||||
} ghostty_input_key_e;
|
} ghostty_input_key_e;
|
||||||
|
|
||||||
typedef enum {
|
|
||||||
GHOSTTY_BINDING_COPY_TO_CLIPBOARD,
|
|
||||||
GHOSTTY_BINDING_PASTE_FROM_CLIPBOARD,
|
|
||||||
GHOSTTY_BINDING_NEW_TAB,
|
|
||||||
GHOSTTY_BINDING_NEW_WINDOW,
|
|
||||||
} ghostty_binding_action_e;
|
|
||||||
|
|
||||||
// Fully defined types. This MUST be kept in sync with equivalent Zig
|
// Fully defined types. This MUST be kept in sync with equivalent Zig
|
||||||
// structs. To find the Zig struct, grep for this type name. The documentation
|
// structs. To find the Zig struct, grep for this type name. The documentation
|
||||||
// for all of these types is available in the Zig source.
|
// for all of these types is available in the Zig source.
|
||||||
@ -315,7 +308,7 @@ void ghostty_surface_ime_point(ghostty_surface_t, double *, double *);
|
|||||||
void ghostty_surface_request_close(ghostty_surface_t);
|
void ghostty_surface_request_close(ghostty_surface_t);
|
||||||
void ghostty_surface_split(ghostty_surface_t, ghostty_split_direction_e);
|
void ghostty_surface_split(ghostty_surface_t, ghostty_split_direction_e);
|
||||||
void ghostty_surface_split_focus(ghostty_surface_t, ghostty_split_focus_direction_e);
|
void ghostty_surface_split_focus(ghostty_surface_t, ghostty_split_focus_direction_e);
|
||||||
void ghostty_surface_binding_action(ghostty_surface_t, ghostty_binding_action_e, void *);
|
bool ghostty_surface_binding_action(ghostty_surface_t, const char *, uintptr_t);
|
||||||
|
|
||||||
// APIs I'd like to get rid of eventually but are still needed for now.
|
// APIs I'd like to get rid of eventually but are still needed for now.
|
||||||
// Don't use these unless you know what you're doing.
|
// Don't use these unless you know what you're doing.
|
||||||
|
@ -140,11 +140,17 @@ extension Ghostty {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func newTab(surface: ghostty_surface_t) {
|
func newTab(surface: ghostty_surface_t) {
|
||||||
ghostty_surface_binding_action(surface, GHOSTTY_BINDING_NEW_TAB, nil)
|
let action = "new_tab"
|
||||||
|
if (!ghostty_surface_binding_action(surface, action, UInt(action.count))) {
|
||||||
|
AppDelegate.logger.warning("action failed action=\(action)")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func newWindow(surface: ghostty_surface_t) {
|
func newWindow(surface: ghostty_surface_t) {
|
||||||
ghostty_surface_binding_action(surface, GHOSTTY_BINDING_NEW_WINDOW, nil)
|
let action = "new_window"
|
||||||
|
if (!ghostty_surface_binding_action(surface, action, UInt(action.count))) {
|
||||||
|
AppDelegate.logger.warning("action failed action=\(action)")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func split(surface: ghostty_surface_t, direction: ghostty_split_direction_e) {
|
func split(surface: ghostty_surface_t, direction: ghostty_split_direction_e) {
|
||||||
|
@ -375,17 +375,26 @@ extension Ghostty {
|
|||||||
|
|
||||||
@IBAction func copy(_ sender: Any?) {
|
@IBAction func copy(_ sender: Any?) {
|
||||||
guard let surface = self.surface else { return }
|
guard let surface = self.surface else { return }
|
||||||
ghostty_surface_binding_action(surface, GHOSTTY_BINDING_COPY_TO_CLIPBOARD, nil)
|
let action = "copy_to_clipboard"
|
||||||
|
if (!ghostty_surface_binding_action(surface, action, UInt(action.count))) {
|
||||||
|
AppDelegate.logger.warning("action failed action=\(action)")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@IBAction func paste(_ sender: Any?) {
|
@IBAction func paste(_ sender: Any?) {
|
||||||
guard let surface = self.surface else { return }
|
guard let surface = self.surface else { return }
|
||||||
ghostty_surface_binding_action(surface, GHOSTTY_BINDING_PASTE_FROM_CLIPBOARD, nil)
|
let action = "paste_from_clipboard"
|
||||||
|
if (!ghostty_surface_binding_action(surface, action, UInt(action.count))) {
|
||||||
|
AppDelegate.logger.warning("action failed action=\(action)")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@IBAction func pasteAsPlainText(_ sender: Any?) {
|
@IBAction func pasteAsPlainText(_ sender: Any?) {
|
||||||
guard let surface = self.surface else { return }
|
guard let surface = self.surface else { return }
|
||||||
ghostty_surface_binding_action(surface, GHOSTTY_BINDING_PASTE_FROM_CLIPBOARD, nil)
|
let action = "paste_from_clipboard"
|
||||||
|
if (!ghostty_surface_binding_action(surface, action, UInt(action.count))) {
|
||||||
|
AppDelegate.logger.warning("action failed action=\(action)")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// MARK: NSTextInputClient
|
// MARK: NSTextInputClient
|
||||||
|
@ -882,22 +882,21 @@ pub const CAPI = struct {
|
|||||||
/// Invoke an action on the surface.
|
/// Invoke an action on the surface.
|
||||||
export fn ghostty_surface_binding_action(
|
export fn ghostty_surface_binding_action(
|
||||||
ptr: *Surface,
|
ptr: *Surface,
|
||||||
key: input.Binding.Key,
|
action_ptr: [*]const u8,
|
||||||
unused: *anyopaque,
|
action_len: usize,
|
||||||
) void {
|
) bool {
|
||||||
// For future arguments
|
const action_str = action_ptr[0..action_len];
|
||||||
_ = unused;
|
const action = input.Binding.Action.parse(action_str) catch |err| {
|
||||||
|
log.err("error parsing binding action action={s} err={}", .{ action_str, err });
|
||||||
const action: input.Binding.Action = switch (key) {
|
return false;
|
||||||
.copy_to_clipboard => .{ .copy_to_clipboard = {} },
|
|
||||||
.paste_from_clipboard => .{ .paste_from_clipboard = {} },
|
|
||||||
.new_tab => .{ .new_tab = {} },
|
|
||||||
.new_window => .{ .new_window = {} },
|
|
||||||
};
|
};
|
||||||
|
|
||||||
ptr.core_surface.performBindingAction(action) catch |err| {
|
ptr.core_surface.performBindingAction(action) catch |err| {
|
||||||
log.err("error performing binding action action={} err={}", .{ action, err });
|
log.err("error performing binding action action={} err={}", .{ action, err });
|
||||||
|
return false;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Sets the window background blur on macOS to the desired value.
|
/// Sets the window background blur on macOS to the desired value.
|
||||||
|
Reference in New Issue
Block a user