forked from getlantern/systray
-
Notifications
You must be signed in to change notification settings - Fork 5
/
systray_nonwindows.go
135 lines (114 loc) · 2.59 KB
/
systray_nonwindows.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
// +build !windows
package systray
/*
#cgo linux pkg-config: gtk+-3.0 appindicator3-0.1
#cgo darwin CFLAGS: -DDARWIN -x objective-c -fobjc-arc
#cgo darwin LDFLAGS: -framework Cocoa
#include "systray.h"
*/
import "C"
import (
"unsafe"
)
func nativeLoop() {
C.nativeLoop()
}
func quit() {
C.quit()
}
// SetIcon sets the systray icon.
// iconBytes should be the content of .ico for windows and .ico/.jpg/.png
// for other platforms.
func SetIcon(iconBytes []byte) {
cstr := (*C.char)(unsafe.Pointer(&iconBytes[0]))
C.setIcon(cstr, (C.int)(len(iconBytes)))
}
// SetTitle sets the systray title, only available on Mac.
func SetTitle(title string) {
C.setTitle(C.CString(title))
}
// SetTooltip sets the systray tooltip to display on mouse hover of the tray icon,
// only available on Mac and Windows.
func SetTooltip(tooltip string) {
C.setTooltip(C.CString(tooltip))
}
// GetVersion returns the version number of the calling app
func GetVersion() string {
cstr := C.get_version()
return C.GoString(cstr)
}
// GetGitHash returns the git hash of the current project
func GetGitHash() string {
cstr := C.get_git_hash()
return C.GoString(cstr)
}
// GetUserSetting returns the string value of a user setting
func GetUserSetting(name string) string {
cstr := C.get_user_setting(C.CString(name))
return C.GoString(cstr)
}
// SetUserSetting sets the string value of a user setting
func SetUserSetting(name, value string) {
C.set_user_setting(C.CString(name), C.CString(value))
}
// Hang sleeps for a indefinite amount of time
func Hang() {
C.hang()
}
func addOrUpdateMenuItem(item *MenuItem) {
var disabled C.short
if item.disabled {
disabled = 1
}
var checked C.short
if item.checked {
checked = 1
}
C.add_or_update_menu_item(
C.int(item.id),
C.CString(item.title),
C.CString(item.tooltip),
disabled,
checked,
)
}
func addSeparator(item *MenuItem) {
C.add_separator(C.int(item.id))
}
func addOrUpdateSubmenu(item *MenuItem) {
C.add_or_update_submenu(
C.int(item.id),
C.CString(item.title),
C.CString(item.tooltip),
)
}
func addOrUpdateSubmenuItem(item *MenuItem) {
var disabled C.short
if item.disabled {
disabled = 1
}
var checked C.short
if item.checked {
checked = 1
}
C.add_or_update_submenu_item(
C.int(item.submenuId),
C.int(item.id),
C.CString(item.title),
C.CString(item.tooltip),
disabled,
checked,
)
}
//export systray_ready
func systray_ready() {
systrayReady()
}
//export systray_menu_item_selected
func systray_menu_item_selected(cID C.int) {
systrayMenuItemSelected(int32(cID))
}
//export systray_menu_opened
func systray_menu_opened() {
menuOpened()
}