Меню macOS SwiftUI полностью сломано?

#macos #swiftui #menu #menubar

Вопрос:

Я пытаюсь добавить в свое приложение macOS SwiftUI опцию меню Правка->Вставить. Мое приложение поддерживает только текст (например, оболочку командной строки), поэтому я хочу отключить опцию меню, если в буфере обмена нет текста.

Буфер обмена может изменять свое содержимое только из моего приложения или из другого приложения. Поэтому, когда я получаю NSApplication.didBecomeActiveNotification, я могу проверить буфер обмена на наличие текста, и если он есть, я включаю меню, а если нет, то я могу его отключить.

За исключением того, что я не могу понять, как это сделать из SwiftUI.

Я могу поймать NSApplication.didBecomeActiveNotification. Я могу проверить состояние буфера обмена. Но я не могу понять, как сделать серый (или отключить серый) пункт меню. Вот что я попробовал:

 import SwiftUI

@main
struct MenusApp: App
    {
    @State private var clipboard_has_text = false
    var body: some Scene
        {
        WindowGroup
            {
            ContentView()
                .onReceive(NotificationCenter.default.publisher(for: NSApplication.didBecomeActiveNotification))
                    { _ in
                    clipboard_has_text = NSPasteboard.general.canReadItem(withDataConformingToTypes: ["public.plain-text"])
                    print("New State:", clipboard_has_text)
                    }
            }
            .commands
                {
                CommandGroup(replacing: .pasteboard)
                    {
                    Button("Paste")
                        {
                        print("Should be true:", clipboard_has_text)
                        }
                        .keyboardShortcut("V").disabled(clipboard_has_text)
                    }
                }
        }
    }
 

Как я должен это сделать (потому что этот способ не работает)?

Спасибо.