internal static extern CarbonMenuStatus SetMenuItemModifiers (IntPtr menuRef, ushort index, MenuAccelModifier modifiers);
//FIXME: handle the mode key static bool GetAcceleratorKeys(string accelKey, out ushort glyphCode, out ushort charCode, out ushort virtualHardwareCode, out MenuAccelModifier outMod) { uint modeKey, key; Gdk.ModifierType modeMod, mod; glyphCode = charCode = virtualHardwareCode = 0; outMod = (MenuAccelModifier)0; if (!KeyBindingManager.BindingToKeys(accelKey, out modeKey, out modeMod, out key, out mod)) { return(false); } if (modeKey != 0) { System.Console.WriteLine("WARNING: Cannot display accelerators with mode keys ({0})", accelKey); return(false); } glyphCode = (ushort)GlyphMappings((Gdk.Key)key); if (glyphCode == 0) { charCode = (ushort)Gdk.Keyval.ToUnicode(key); if (charCode == 0) { var map = keymap.GetEntriesForKeyval(key); if (map != null && map.Length > 0) { virtualHardwareCode = (ushort)map [0].Keycode; } if (virtualHardwareCode == 0) { System.Console.WriteLine("WARNING: Could not map key ({0})", key); return(false); } } else { charCode = (ushort)char.ToUpper((char)charCode); } } if ((mod & Gdk.ModifierType.Mod1Mask) != 0) { outMod |= MenuAccelModifier.OptionModifier; mod ^= Gdk.ModifierType.Mod1Mask; } if ((mod & Gdk.ModifierType.ShiftMask) != 0) { outMod |= MenuAccelModifier.ShiftModifier; mod ^= Gdk.ModifierType.ShiftMask; } if ((mod & Gdk.ModifierType.ControlMask) != 0) { outMod |= MenuAccelModifier.ControlModifier; mod ^= Gdk.ModifierType.ControlMask; } // This is inverted, because by default on OSX no setting means use the Command-key if ((mod & Gdk.ModifierType.MetaMask) == 0) { outMod |= MenuAccelModifier.None; } else { mod ^= Gdk.ModifierType.MetaMask; } if (mod != 0) { System.Console.WriteLine("WARNING: Cannot display accelerators with modifiers: {0}", mod); return(false); } return(true); }
internal static extern CarbonMenuStatus SetMenuItemModifiers(IntPtr menuRef, ushort index, MenuAccelModifier modifiers);
//FIXME: handle the mode key static bool GetAcceleratorKeys (string accelKey, out ushort glyphCode, out ushort charCode, out ushort virtualHardwareCode, out MenuAccelModifier outMod) { uint modeKey, key; Gdk.ModifierType modeMod, mod; glyphCode = charCode = virtualHardwareCode = 0; outMod = (MenuAccelModifier) 0; if (!KeyBindingManager.BindingToKeys (accelKey, out modeKey, out modeMod, out key, out mod)) return false; if (modeKey != 0) { System.Console.WriteLine("WARNING: Cannot display accelerators with mode keys ({0})", accelKey); return false; } glyphCode = (ushort)GlyphMappings ((Gdk.Key)key); if (glyphCode == 0) { charCode = (ushort)Gdk.Keyval.ToUnicode (key); if (charCode == 0) { var map = keymap.GetEntriesForKeyval (key); if (map != null && map.Length > 0) virtualHardwareCode = (ushort) map [0].Keycode; if (virtualHardwareCode == 0) { System.Console.WriteLine("WARNING: Could not map key ({0})", key); return false; } } } if ((mod & Gdk.ModifierType.Mod1Mask) != 0) { outMod |= MenuAccelModifier.OptionModifier; mod ^= Gdk.ModifierType.Mod1Mask; } if ((mod & Gdk.ModifierType.ShiftMask) != 0) { outMod |= MenuAccelModifier.ShiftModifier; mod ^= Gdk.ModifierType.ShiftMask; } if ((mod & Gdk.ModifierType.ControlMask) != 0) { outMod |= MenuAccelModifier.ControlModifier; mod ^= Gdk.ModifierType.ControlMask; } // This is inverted, because by default on OSX no setting means use the Command-key if ((mod & Gdk.ModifierType.MetaMask) == 0) { outMod |= MenuAccelModifier.None; } else { mod ^= Gdk.ModifierType.MetaMask; } if (mod != 0) { System.Console.WriteLine("WARNING: Cannot display accelerators with modifiers: {0}", mod); return false; } return true; }