Add playback controls to dock menu on MacOS
This commit is contained in:
@@ -3,11 +3,20 @@
|
||||
package ui
|
||||
|
||||
/*
|
||||
#include <stdlib.h>
|
||||
void installReopenDelegate();
|
||||
void dockMenuBegin();
|
||||
void dockMenuAddItem(const char* title, int index);
|
||||
void dockMenuAddSeparator();
|
||||
void dockMenuCommit();
|
||||
*/
|
||||
import "C"
|
||||
|
||||
import "fyne.io/fyne/v2"
|
||||
import (
|
||||
"unsafe"
|
||||
|
||||
"fyne.io/fyne/v2"
|
||||
)
|
||||
|
||||
var darwinAppDelegateReopenWindow fyne.Window
|
||||
|
||||
@@ -38,3 +47,35 @@ func appReopened() {
|
||||
func appShouldTerminate() {
|
||||
darwinQuitting = true
|
||||
}
|
||||
|
||||
// darwinDockMenuCallbacks is indexed by the NSMenuItem tag set in
|
||||
// dockMenuAddItem, dispatched back to Go via dockMenuItemClicked.
|
||||
var darwinDockMenuCallbacks []func()
|
||||
|
||||
func installDockMenu(menu *fyne.Menu) {
|
||||
darwinDockMenuCallbacks = darwinDockMenuCallbacks[:0]
|
||||
|
||||
C.dockMenuBegin()
|
||||
for _, item := range menu.Items {
|
||||
if item.IsSeparator {
|
||||
C.dockMenuAddSeparator()
|
||||
continue
|
||||
}
|
||||
cTitle := C.CString(item.Label)
|
||||
C.dockMenuAddItem(cTitle, C.int(len(darwinDockMenuCallbacks)))
|
||||
C.free(unsafe.Pointer(cTitle))
|
||||
darwinDockMenuCallbacks = append(darwinDockMenuCallbacks, item.Action)
|
||||
}
|
||||
C.dockMenuCommit()
|
||||
}
|
||||
|
||||
//export dockMenuItemClicked
|
||||
func dockMenuItemClicked(index C.int) {
|
||||
i := int(index)
|
||||
if i < 0 || i >= len(darwinDockMenuCallbacks) {
|
||||
return
|
||||
}
|
||||
if cb := darwinDockMenuCallbacks[i]; cb != nil {
|
||||
go func() { fyne.Do(cb) }()
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user