| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153 |
- package systray
- /*
- #cgo darwin CFLAGS: -DDARWIN -x objective-c -fobjc-arc
- #cgo darwin LDFLAGS: -framework Cocoa
- #include <stdbool.h>
- #include "systray.h"
- void setInternalLoop(bool);
- */
- import "C"
- import (
- "unsafe"
- )
- // SetTemplateIcon sets the systray icon as a template icon (on Mac), falling back
- // to a regular icon on other platforms.
- // templateIconBytes and regularIconBytes should be the content of .ico for windows and
- // .ico/.jpg/.png for other platforms.
- func SetTemplateIcon(templateIconBytes []byte, regularIconBytes []byte) {
- cstr := (*C.char)(unsafe.Pointer(&templateIconBytes[0]))
- C.setIcon(cstr, (C.int)(len(templateIconBytes)), true)
- }
- // SetIcon sets the icon of a menu item. Only works on macOS and Windows.
- // iconBytes should be the content of .ico/.jpg/.png
- func (item *MenuItem) SetIcon(iconBytes []byte) {
- cstr := (*C.char)(unsafe.Pointer(&iconBytes[0]))
- C.setMenuItemIcon(cstr, (C.int)(len(iconBytes)), C.int(item.id), false)
- }
- // SetTemplateIcon sets the icon of a menu item as a template icon (on macOS). On Windows, it
- // falls back to the regular icon bytes and on Linux it does nothing.
- // templateIconBytes and regularIconBytes should be the content of .ico for windows and
- // .ico/.jpg/.png for other platforms.
- func (item *MenuItem) SetTemplateIcon(templateIconBytes []byte, regularIconBytes []byte) {
- cstr := (*C.char)(unsafe.Pointer(&templateIconBytes[0]))
- C.setMenuItemIcon(cstr, (C.int)(len(templateIconBytes)), C.int(item.id), true)
- }
- func registerSystray() {
- C.registerSystray()
- }
- func nativeLoop() {
- C.nativeLoop()
- }
- func nativeEnd() {
- C.nativeEnd()
- }
- func nativeStart() {
- C.nativeStart()
- }
- func quit() {
- C.quit()
- }
- func setInternalLoop(internal bool) {
- C.setInternalLoop(C.bool(internal))
- }
- // 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)), false)
- }
- // SetTitle sets the systray title, only available on Mac and Linux.
- 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))
- }
- func addOrUpdateMenuItem(item *MenuItem) {
- var disabled C.short
- if item.disabled {
- disabled = 1
- }
- var checked C.short
- if item.checked {
- checked = 1
- }
- var isCheckable C.short
- if item.isCheckable {
- isCheckable = 1
- }
- var parentID uint32 = 0
- if item.parent != nil {
- parentID = item.parent.id
- }
- C.add_or_update_menu_item(
- C.int(item.id),
- C.int(parentID),
- C.CString(item.title),
- C.CString(item.tooltip),
- disabled,
- checked,
- isCheckable,
- )
- }
- func addSeparator(id uint32, parent uint32) {
- C.add_separator(C.int(id), C.int(parent))
- }
- func hideMenuItem(item *MenuItem) {
- C.hide_menu_item(
- C.int(item.id),
- )
- }
- func showMenuItem(item *MenuItem) {
- C.show_menu_item(
- C.int(item.id),
- )
- }
- func removeMenuItem(item *MenuItem) {
- C.remove_menu_item(
- C.int(item.id),
- )
- }
- func resetMenu() {
- C.reset_menu()
- }
- //export systray_ready
- func systray_ready() {
- systrayReady()
- }
- //export systray_on_exit
- func systray_on_exit() {
- runSystrayExit()
- }
- //export systray_menu_item_selected
- func systray_menu_item_selected(cID C.int) {
- systrayMenuItemSelected(uint32(cID))
- }
|