首页 > 解决方案 > Raku Native 调用 gtk-clipboard-request-text?

问题描述

你会如何用 Raku/Perl6 的 Native Call 来调用这个库?

https://developer.gnome.org/gtk3/stable/gtk3-Clipboards.html#gtk-clipboard-request-text

void
gtk_clipboard_request_text (GtkClipboard *clipboard,
                            GtkClipboardTextReceivedFunc callback,
                            gpointer user_data);

非常感谢,-T

编辑:这个问题是如何调用函数。不要对失败的呼叫进行故障排除。此时没有编写任何代码。

标签: raku

解决方案


以下似乎有效:

use v6;
use NativeCall;

constant GdkAtom   := uint64;
constant GDK_NONE = 0x0;

sub gtk_init(Pointer $argc, Pointer $argv) is native('gtk-3') { * };
sub gdk_display_get_default() returns Pointer is native('gdk-3') { * };
sub gtk_clipboard_get_for_display(Pointer $display, GdkAtom $selection)
  returns Pointer is native('gtk-3') { * };
sub gtk_clipboard_request_text(
    Pointer $clipboard,
    &callback ( Pointer $clipbrd, Str $text, Pointer $data),
    Pointer $user_data) is native('gtk-3') { * };
sub gtk_main() is native('gtk-3') { * };
sub gtk_main_quit() is native('gtk-3') { * };


gtk_init(Pointer, Pointer);  # Pass NULL for arguments
my $display = gdk_display_get_default();

my $clipboard = gtk_clipboard_get_for_display( $display, GDK_NONE );
my $callback = my sub (Pointer $clipboard, Str $text, Pointer $data) {
    say "In callback: Text = $text";
    gtk_main_quit();
}
gtk_clipboard_request_text( $clipboard, &$callback, Pointer );
gtk_main();

这将打印系统默认剪贴板上当前的文本。


推荐阅读