diff --git a/macos/Classes/ContextualMenu.swift b/macos/Classes/ContextualMenu.swift index 0caa8d9..9ed70b0 100644 --- a/macos/Classes/ContextualMenu.swift +++ b/macos/Classes/ContextualMenu.swift @@ -33,6 +33,8 @@ public class ContextualMenu: NSMenu, NSMenuDelegate { let toolTip: String = itemDict["toolTip"] as? String ?? "" let checked: Bool? = itemDict["checked"] as? Bool let disabled: Bool = itemDict["disabled"] as? Bool ?? true + let shortcutKey: String = itemDict["shortcutKey"] as? String ?? "" + let shortcutModifiers: [String] = itemDict["shortcutModifiers"] as? [String] ?? [] if (type == "separator") { menuItem = NSMenuItem.separator() @@ -46,6 +48,20 @@ public class ContextualMenu: NSMenu, NSMenuDelegate { menuItem.isEnabled = !disabled menuItem.action = !disabled ? #selector(statusItemMenuButtonClicked) : nil menuItem.target = self + + menuItem.keyEquivalent = shortcutKey + menuItem.keyEquivalentModifierMask = [] + for modifier in shortcutModifiers { + if (modifier == "ctrl") { + menuItem.keyEquivalentModifierMask = menuItem.keyEquivalentModifierMask.union(.control) + } else if (modifier == "shift") { + menuItem.keyEquivalentModifierMask = menuItem.keyEquivalentModifierMask.union(.shift) + } else if (modifier == "alt" || modifier == "option") { + menuItem.keyEquivalentModifierMask = menuItem.keyEquivalentModifierMask.union(.option) + } else if (modifier == "cmd") { + menuItem.keyEquivalentModifierMask = menuItem.keyEquivalentModifierMask.union(.command) + } + } switch (type) { case "separator": diff --git a/pubspec.yaml b/pubspec.yaml index e1192ce..c215096 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -16,7 +16,9 @@ dependencies: flutter: sdk: flutter - menu_base: ^0.1.1 + menu_base: + git: + url: https://github.com/nbonamy/menu_base dev_dependencies: flutter_test: