neko/internal/desktop/xevent/xevent.go

88 lines
2.2 KiB
Go
Raw Normal View History

2021-01-11 03:55:29 +13:00
package xevent
/*
2021-01-12 03:57:14 +13:00
#cgo linux LDFLAGS: -lX11 -lXfixes
2021-01-11 03:55:29 +13:00
#include "xevent.h"
*/
import "C"
import (
"unsafe"
"github.com/kataras/go-events"
)
var emmiter events.EventEmmiter
func init() {
emmiter = events.New()
}
func EventLoop(display string) {
displayUnsafe := C.CString(display)
defer C.free(unsafe.Pointer(displayUnsafe))
C.XEventLoop(displayUnsafe)
}
func OnCursorChanged(listener func(serial uint64)) {
emmiter.On("cursor-changed", func(payload ...interface{}) {
listener(payload[0].(uint64))
})
}
2021-01-12 03:30:53 +13:00
func OnClipboardUpdated(listener func()) {
emmiter.On("clipboard-updated", func(payload ...interface{}) {
listener()
})
}
2021-01-12 12:09:43 +13:00
func OnWindowCreated(listener func(window uint32, name string, role string)) {
emmiter.On("window-created", func(payload ...interface{}) {
listener(payload[0].(uint32), payload[1].(string), payload[2].(string))
})
}
2021-01-19 09:40:57 +13:00
func OnWindowConfigured(listener func(window uint32, name string, role string)) {
emmiter.On("window-configured", func(payload ...interface{}) {
listener(payload[0].(uint32), payload[1].(string), payload[2].(string))
})
}
2021-01-11 03:55:29 +13:00
func OnEventError(listener func(error_code uint8, message string, request_code uint8, minor_code uint8)) {
emmiter.On("event-error", func(payload ...interface{}) {
listener(payload[0].(uint8), payload[1].(string), payload[2].(uint8), payload[3].(uint8))
})
}
//export goXEventCursorChanged
func goXEventCursorChanged(event C.XFixesCursorNotifyEvent) {
emmiter.Emit("cursor-changed", uint64(event.cursor_serial))
}
2021-01-12 03:30:53 +13:00
//export goXEventClipboardUpdated
func goXEventClipboardUpdated() {
emmiter.Emit("clipboard-updated")
}
2021-01-12 12:09:43 +13:00
//export goXEventWindowCreated
2021-01-19 09:40:57 +13:00
func goXEventWindowCreated(window C.Window, name *C.char, role *C.char) {
emmiter.Emit("window-created", uint32(window), C.GoString(name), C.GoString(role))
}
//export goXEventWindowConfigured
func goXEventWindowConfigured(window C.Window, name *C.char, role *C.char) {
emmiter.Emit("window-configured", uint32(window), C.GoString(name), C.GoString(role))
2021-01-12 12:09:43 +13:00
}
2021-01-11 03:55:29 +13:00
//export goXEventError
func goXEventError(event *C.XErrorEvent, message *C.char) {
emmiter.Emit("event-error", uint8(event.error_code), C.GoString(message), uint8(event.request_code), uint8(event.minor_code))
}
//export goXEventActive
func goXEventActive() C.int {
return C.int(1)
}