![見出し画像](https://assets.st-note.com/production/uploads/images/139545216/rectangle_large_type_2_cfb5fa93c73272ddbedaee45424be735.png?width=1200)
シン・TWSNMP Mac版のメニュー修正
今朝は5時から開発開始です。助手の猫さんは4時に、騒いで起こしてくれましたが、起きられませんでした。
Apple Appストアへの申請が却下された理由の最小化して元に戻すメニューがないという指摘の修正です。
wailsのデフォルト設定でビルドするとMac OS版で必要なメニューは自動で作成してくれます。いままで提出したアプリは、ほぼ、この方法で承認されてきました。最小化してもドックのアイコンをクリックすれば、元に戻すことができます。今回の指摘は納得のいかない部分もありますが、wailsのメニューを自分で作る練習だと思ってやってみました。
デフォルトで表示されるメニュー
![](https://assets.st-note.com/img/1714863142883-SavV1h6MZ5.png?width=1200)
のFull Screenの下にWindowの名前のメニューを追加するだけでいけそうだと思いました。簡単そうに思いましたが、wailsのデフォルトメニューを表示する処理のソースコードを読んでいくと複雑怪奇なしくみになっています。
EditやWindowのメニューを固定で作る関数が利用されていますが、それで作ったメニューに追加する方法が見当たりません。いろいろ試行錯誤した結果、Windowメニューの作成を分解して自分で処理する関数を作ることにしました。ついでなので、Windowのタイトルも変更できるようにしました。
作った関数は
// Menu
func (a *App) setMenu() {
if runtime.GOOS == "darwin" {
myMenu := menu.NewMenu()
myMenu.Append(menu.AppMenu())
myMenu.Append(menu.EditMenu())
if !kiosk {
winMenu := myMenu.AddSubmenu("Window")
winMenu.AddText("Minimize", keys.CmdOrCtrl("m"), func(cd *menu.CallbackData) {
wails.WindowMinimise(a.ctx)
})
winMenu.AddText("Zoom", nil, func(cd *menu.CallbackData) {
wails.WindowMaximise(a.ctx)
})
winMenu.AddSeparator()
winMenu.AddText("Full Screen", keys.CmdOrCtrl("f"), func(cd *menu.CallbackData) {
wails.WindowFullscreen(a.ctx)
})
winMenu.AddSeparator()
winMenu.AddText("TWSNMP FK -"+datastore.MapConf.MapName, nil, func(cd *menu.CallbackData) {
wails.WindowUnminimise(a.ctx)
})
}
wails.MenuSetApplicationMenu(a.ctx, myMenu)
wails.MenuUpdateApplicationMenu(a.ctx)
}
if datastore.MapConf.MapName != "" {
wails.WindowSetTitle(a.ctx, "TWSNMP FK - "+datastore.MapConf.MapName)
}
}
です。アプリを起動した時、マップの名前を変更した時に、この関数を呼べばメニューとWindowsのタイトルが変わるようできました。
![](https://assets.st-note.com/img/1714863814742-bgMJDk7Ah0.png)
もう少しテストして連休空けに、再申請しようと思います。
明日に続く
いいなと思ったら応援しよう!
![twsnmp](https://assets.st-note.com/production/uploads/images/14333815/profile_ee1accba5615957e5029db85d57fdb0a.jpg?width=600&crop=1:1,smart)