見出し画像

シン・TWSNMP Mac版のメニュー修正

今朝は5時から開発開始です。助手の猫さんは4時に、騒いで起こしてくれましたが、起きられませんでした。

Apple Appストアへの申請が却下された理由の最小化して元に戻すメニューがないという指摘の修正です。

wailsのデフォルト設定でビルドするとMac OS版で必要なメニューは自動で作成してくれます。いままで提出したアプリは、ほぼ、この方法で承認されてきました。最小化してもドックのアイコンをクリックすれば、元に戻すことができます。今回の指摘は納得のいかない部分もありますが、wailsのメニューを自分で作る練習だと思ってやってみました。

デフォルトで表示されるメニュー

の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のタイトルが変わるようできました。

もう少しテストして連休空けに、再申請しようと思います。

明日に続く



開発のための諸経費(機材、Appleの開発者、サーバー運用)に利用します。 ソフトウェアのマニュアルをnoteの記事で提供しています。 サポートによりnoteの運営にも貢献できるのでよろしくお願います。