5
0
mirror of https://github.com/wailsapp/wails.git synced 2025-05-02 04:59:38 +08:00
wails/v2/internal/frontend/desktop/linux/clipboard.go
2024-05-08 19:26:27 -05:00

52 lines
1.1 KiB
Go

//go:build linux
// +build linux
package linux
/*
#cgo linux pkg-config: gtk+-3.0
#cgo !webkit2_41 pkg-config: webkit2gtk-4.0
#cgo webkit2_41 pkg-config: webkit2gtk-4.1
#include "gtk/gtk.h"
#include "webkit2/webkit2.h"
static gchar* GetClipboardText() {
GtkClipboard *clip = gtk_clipboard_get(GDK_SELECTION_CLIPBOARD);
return gtk_clipboard_wait_for_text(clip);
}
static void SetClipboardText(gchar* text) {
GtkClipboard *clip = gtk_clipboard_get(GDK_SELECTION_CLIPBOARD);
gtk_clipboard_set_text(clip, text, -1);
clip = gtk_clipboard_get(GDK_SELECTION_PRIMARY);
gtk_clipboard_set_text(clip, text, -1);
}
*/
import "C"
import "sync"
func (f *Frontend) ClipboardGetText() (string, error) {
var text string
var wg sync.WaitGroup
wg.Add(1)
invokeOnMainThread(func() {
ctxt := C.GetClipboardText()
defer C.g_free(C.gpointer(ctxt))
text = C.GoString(ctxt)
wg.Done()
})
wg.Wait()
return text, nil
}
func (f *Frontend) ClipboardSetText(text string) error {
invokeOnMainThread(func() {
ctxt := (*C.gchar)(C.CString(text))
defer C.g_free(C.gpointer(ctxt))
C.SetClipboardText(ctxt)
})
return nil
}