示例#1
0
        public bool GetAccelKeys(string gconf_path,
                                 out uint keyval,
                                 out Gdk.ModifierType mods)
        {
            keyval = 0;
            mods   = 0;

            try {
                string binding = (string)Preferences.Get(gconf_path);
                if (binding == null ||
                    binding == String.Empty ||
                    binding == "disabled")
                {
                    return(false);
                }

                uint virtual_mods = 0;
                if (!egg_accelerator_parse_virtual(binding,
                                                   out keyval,
                                                   out virtual_mods))
                {
                    return(false);
                }

                Gdk.Keymap keymap = Gdk.Keymap.Default;
                egg_keymap_resolve_virtual_modifiers(keymap.Handle,
                                                     virtual_mods,
                                                     out mods);

                return(true);
            } catch {
                return(false);
            }
        }
示例#2
0
        public static KeyData DecodeKey(Gdk.EventKey evt)
        {
            KeyCode kc = KeyCode.Unknown;

            Gdk.Keymap    kmap = Gdk.Keymap.GetForDisplay(Gdk.Display.Default);
            Gdk.KeymapKey kmk;
            kmk.Level   = 0;
            kmk.Group   = 0;
            kmk.Keycode = evt.HardwareKeycode;

            uint key = kmap.LookupKey(kmk);

            char c = (char)Gdk.Keyval.ToUnicode(key);

            if (c != '\0')
            {
                kc = (KeyCode)c;
            }



            if (kc == KeyCode.Unknown)
            { //still not found, try non-typable keys
                switch ((Gdk.Key)key)
                {
                case Gdk.Key.BackSpace: kc = KeyCode.Backspace; break;

                case Gdk.Key.Tab: kc = KeyCode.Tab; break;

                case Gdk.Key.Linefeed: kc = KeyCode.LineFeed; break;

                case Gdk.Key.Return: kc = KeyCode.Return; break;

                case Gdk.Key.Escape: kc = KeyCode.Escape; break;


                case Gdk.Key.Home: kc = KeyCode.Home; break;

                case Gdk.Key.Up: kc = KeyCode.Up; break;

                case Gdk.Key.Page_Up: kc = KeyCode.PageUp; break;

                case Gdk.Key.Page_Down: kc = KeyCode.PageDown; break;

                case Gdk.Key.Left: kc = KeyCode.Left; break;

                case Gdk.Key.Right: kc = KeyCode.Right; break;

                case Gdk.Key.End: kc = KeyCode.End; break;

                case Gdk.Key.Down: kc = KeyCode.Down; break;

                case Gdk.Key.Insert: kc = KeyCode.Insert; break;

                case Gdk.Key.Delete: kc = KeyCode.Delete; break;

                case Gdk.Key.Pause: kc = KeyCode.Pause; break;

                case Gdk.Key.Caps_Lock: kc = KeyCode.CapsLock; break;

                case Gdk.Key.F1: kc = KeyCode.F1; break;

                case Gdk.Key.F2: kc = KeyCode.F2; break;

                case Gdk.Key.F3: kc = KeyCode.F3; break;

                case Gdk.Key.F4: kc = KeyCode.F4; break;

                case Gdk.Key.F5: kc = KeyCode.F5; break;

                case Gdk.Key.F6: kc = KeyCode.F6; break;

                case Gdk.Key.F7: kc = KeyCode.F7; break;

                case Gdk.Key.F8: kc = KeyCode.F8; break;

                case Gdk.Key.F9: kc = KeyCode.F9; break;

                case Gdk.Key.F10: kc = KeyCode.F10; break;

                case Gdk.Key.F11: kc = KeyCode.F11; break;

                case Gdk.Key.F12: kc = KeyCode.F12; break;

                case Gdk.Key.Print: kc = KeyCode.Print; break;

                case Gdk.Key.Menu: kc = KeyCode.Menu; break;

                case Gdk.Key.Num_Lock: kc = KeyCode.NumLock; break;

                case Gdk.Key.Scroll_Lock: kc = KeyCode.ScrollLock; break;
                }
            }

            bool ctrl  = (evt.State & Gdk.ModifierType.ControlMask) != 0;
            bool alt   = (evt.State & Gdk.ModifierType.Mod1Mask) != 0;
            bool shift = (evt.State & Gdk.ModifierType.ShiftMask) != 0;

            if (kc == KeyCode.Unknown)
            {
                return(new KeyData(kc, (uint)evt.HardwareKeycode, '\0', ctrl, shift, alt));
            }


            /*
             * if (alt) kc |= KeyCode.Alt;
             * if (shift) kc |= KeyCode.Shift;
             * if (ctrl) kc |= KeyCode.Control;*/

            return(new KeyData(kc, evt.HardwareKeycode, '\0', ctrl, shift, alt));    //TODO: map character correctly
        }