Avatar
addGlobalMonitorForEventsMatchingMaskは内部でHIToolboxのInstallEventHandlerを使ってるんですが、これがどうやら特定の条件に対してイベントハンドラーを1つしか登録できないようで、2つ目以降はエラーになるっぽいです。
6:48 AM
多分ですが、この条件てのがNSMenuが聞きたい条件と重複していて、NSMenu/AppKitがそれらを登録するよりも前にinit()は呼ばれるのでその結果メニューが動かなくなる、
🙏 1
6:48 AM
ということなんではないかと思います
6:49 AM
init() { DispatchQueue.main.async { NSEvent.addGlobalMonitorForEvents(matching: [.flagsChanged]) { event in } } }
6:50 AM
SwiftUI だけでどうこうは面倒かもしれませんが、app delegateの実装をしたくないのであればDisptchQueue.mainに入れてしまうとかなんらかRunLoopが回った後まで遅らせる手法でもよいかもしれないですね。
6:50 AM
(DisptchQueue.mainのtaskはRunloop.mainのなかで呼ばれるのでこれで遅らせられる) (edited)