예제 #1
0
        /// <summary>
        /// Matches catched key combination to hotkey and executes it's action.
        /// </summary>
        /// <param name="xEvent">X event arguments.</param>
        /// <param name="gdkEvent">Gdk event arguments.</param>
        private FilterReturn OnHotkeyPressed(IntPtr xEvent, Event gdkEvent)
        {
            try
            {
                IXKeyEvent   evnt = null;
                ModifierType modifiers;

                switch (this.Architecture)
                {
                case Architectures.X86:
                    evnt = (XKeyEvent32)Marshal.PtrToStructure(xEvent, typeof(XKeyEvent32));
                    break;

                case Architectures.X86_64:
                    evnt = (XKeyEvent64)Marshal.PtrToStructure(xEvent, typeof(XKeyEvent64));
                    break;
                }

                if (evnt.Type == XEventTypeKeyPress)
                {
                    modifiers = evnt.Modifiers;

                    if (modifiers.ToString().Contains(ModifierType.LockMask.ToString()))
                    {
                        modifiers = (ModifierType)((int)modifiers - (int)ModifierType.LockMask);
                    }
                    if (modifiers.ToString().Contains(ModifierType.Mod2Mask.ToString()))
                    {
                        modifiers = (ModifierType)((int)modifiers - (int)ModifierType.Mod2Mask);
                    }

                    Hotkey hotkey = this.grabbedHotkeys.FirstOrDefault(h => h.KeyCode == evnt.KeyCode && h.Modifiers == modifiers);

                    if (hotkey != null && hotkey.OnHotkeyPressed != null)
                    {
                        hotkey.OnHotkeyPressed();
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                Console.WriteLine(ex.StackTrace);
            }

            return(FilterReturn.Continue);
        }
예제 #2
0
        /// <summary>
        /// Catches key combination end emits HotkeyGrabbed event.
        /// </summary>
        /// <param name="xEvent">X event arguments.</param>
        /// <param name="gdkEvent">Gdk event arguments.</param>
        /// <returns>Filter state.</returns>
        private FilterReturn OnHotkeyGrabbed(IntPtr xEvent, Event gdkEvent)
        {
            try
            {
                IXKeyEvent   evnt = null;
                Key          key;
                ModifierType modifiers = ModifierType.None;

                switch (this.Architecture)
                {
                case Architectures.X86:
                    evnt = (XKeyEvent32)Marshal.PtrToStructure(xEvent, typeof(XKeyEvent32));
                    break;

                case Architectures.X86_64:
                    evnt = (XKeyEvent64)Marshal.PtrToStructure(xEvent, typeof(XKeyEvent64));
                    break;
                }

                key       = (Key)XKeycodeToKeysym(this.XDisplay, evnt.KeyCode, 0);
                modifiers = evnt.Modifiers;

                if (key == Key.Escape || key == Key.BackSpace)
                {
                    this.UngrabKeyboard();

                    if (this.hotkeyGrabbedFunc != null)
                    {
                        this.hotkeyGrabbedFunc(this, null);
                    }

                    return(FilterReturn.Continue);
                }

                if (OmittedModifiers.Contains(modifiers) || OmittedKeys.Contains(key))
                {
                    return(FilterReturn.Continue);
                }

                if (modifiers.ToString().Contains(ModifierType.LockMask.ToString()))
                {
                    modifiers = (ModifierType)((int)modifiers - (int)ModifierType.LockMask);
                }

                if (modifiers.ToString().Contains(ModifierType.Mod2Mask.ToString()))
                {
                    modifiers = (ModifierType)((int)modifiers - (int)ModifierType.Mod2Mask);
                }


                if (this.hotkeyGrabbedFunc != null)
                {
                    this.hotkeyGrabbedFunc(this, new HotkeyGrabbedArgs(modifiers, key));
                }

                this.UngrabKeyboard();
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                Console.WriteLine(ex.StackTrace);
            }

            return(FilterReturn.Continue);
        }