internal static extern CarbonMenuStatus SetMenuItemModifiers (IntPtr menuRef, ushort index, MenuAccelModifier modifiers);
Esempio n. 2
0
        //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);
        }
Esempio n. 3
0
 internal static extern CarbonMenuStatus SetMenuItemModifiers(IntPtr menuRef, ushort index, MenuAccelModifier modifiers);
Esempio n. 4
0
		//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;
		}