mirror of
https://github.com/m1k1o/neko.git
synced 2024-07-24 14:40:50 +12:00
66 lines
1.2 KiB
Go
66 lines
1.2 KiB
Go
|
package drop
|
||
|
|
||
|
/*
|
||
|
#cgo pkg-config: gtk+-3.0
|
||
|
|
||
|
#include "drop.h"
|
||
|
*/
|
||
|
import "C"
|
||
|
|
||
|
import (
|
||
|
"sync"
|
||
|
|
||
|
"github.com/kataras/go-events"
|
||
|
)
|
||
|
|
||
|
var Emmiter events.EventEmmiter
|
||
|
var mu = sync.Mutex{}
|
||
|
|
||
|
func init() {
|
||
|
Emmiter = events.New()
|
||
|
}
|
||
|
|
||
|
func OpenWindow(files []string) {
|
||
|
mu.Lock()
|
||
|
defer mu.Unlock()
|
||
|
|
||
|
size := C.int(len(files))
|
||
|
urisUnsafe := C.dragUrisMake(size);
|
||
|
defer C.dragUrisFree(urisUnsafe, size)
|
||
|
|
||
|
for i, file := range files {
|
||
|
C.dragUrisSetFile(urisUnsafe, C.CString(file), C.int(i))
|
||
|
}
|
||
|
|
||
|
C.dragWindowOpen(urisUnsafe)
|
||
|
}
|
||
|
|
||
|
func CloseWindow() {
|
||
|
C.dragWindowClose()
|
||
|
}
|
||
|
|
||
|
//export goDragCreate
|
||
|
func goDragCreate(widget *C.GtkWidget, event *C.GdkEvent, user_data C.gpointer) {
|
||
|
go Emmiter.Emit("create")
|
||
|
}
|
||
|
|
||
|
//export goDragCursorEnter
|
||
|
func goDragCursorEnter(widget *C.GtkWidget, event *C.GdkEvent, user_data C.gpointer) {
|
||
|
go Emmiter.Emit("cursor-enter")
|
||
|
}
|
||
|
|
||
|
//export goDragButtonPress
|
||
|
func goDragButtonPress(widget *C.GtkWidget, event *C.GdkEvent, user_data C.gpointer) {
|
||
|
go Emmiter.Emit("button-press")
|
||
|
}
|
||
|
|
||
|
//export goDragBegin
|
||
|
func goDragBegin(widget *C.GtkWidget, context *C.GdkDragContext, user_data C.gpointer) {
|
||
|
go Emmiter.Emit("begin")
|
||
|
}
|
||
|
|
||
|
//export goDragFinish
|
||
|
func goDragFinish(succeeded C.gboolean) {
|
||
|
go Emmiter.Emit("finish", bool(succeeded == C.int(1)))
|
||
|
}
|