コード例 #1
0
ファイル: keys.cpp プロジェクト: chrishoage/kwm
void KwmAddHotkey(std::string KeySym, std::string Command)
{
    hotkey Hotkey = {};
    if(KwmParseHotkey(KeySym, Command, &Hotkey) &&
       !HotkeyExists(Hotkey.Mod, Hotkey.Key, NULL))
            KWMHotkeys.List.push_back(Hotkey);
}
コード例 #2
0
ファイル: keys.cpp プロジェクト: JakimLi/kwm
void KwmAddHotkey(std::string KeySym, std::string Command, bool Passthrough, bool KeycodeInHex)
{
    hotkey Hotkey = {};
    if(KwmParseHotkey(KeySym, Command, &Hotkey, Passthrough, KeycodeInHex) &&
       !HotkeyExists(Hotkey.Mod, Hotkey.Key, NULL, Hotkey.Mode))
        KWMHotkeys.Modes[Hotkey.Mode].Hotkeys.push_back(Hotkey);
}
コード例 #3
0
ファイル: keys.cpp プロジェクト: chrishoage/kwm
bool KwmExecuteHotkey(modifiers Mod, CGKeyCode Keycode)
{
    hotkey Hotkey = {};
    if(HotkeyExists(Mod, Keycode, &Hotkey))
    {
        if(KWMHotkeys.Prefix.Enabled)
        {
            CheckPrefixTimeout();
            if((Hotkey.Prefixed || KWMHotkeys.Prefix.Global) &&
                !KWMHotkeys.Prefix.Active)
                    return false;

            if((Hotkey.Prefixed || KWMHotkeys.Prefix.Global) &&
                KWMHotkeys.Prefix.Active)
                    KWMHotkeys.Prefix.Time = std::chrono::steady_clock::now();
        }

        if(IsHotkeyStateReqFulfilled(&Hotkey))
        {
            if(Hotkey.Command.empty())
                return true;

            if(Hotkey.IsSystemCommand)
                system(Hotkey.Command.c_str());
            else
                KwmInterpretCommand(Hotkey.Command, 0);

            return true;
        }
    }

    return false;
}
コード例 #4
0
ファイル: kwm.cpp プロジェクト: alessandrostone/kwm
CGEventRef CGEventCallback(CGEventTapProxy Proxy, CGEventType Type, CGEventRef Event, void *Refcon)
{
    switch(Type)
    {
        case kCGEventTapDisabledByTimeout:
        case kCGEventTapDisabledByUserInput:
        {
            if(!KWMMach.DisableEventTapInternal)
            {
                DEBUG("Restarting Event Tap");
                CGEventTapEnable(KWMMach.EventTap, true);
            }
        } break;
        case kCGEventKeyDown:
        {
            if(KWMToggles.UseBuiltinHotkeys)
            {
                hotkey Eventkey = {}, Hotkey = {};
                CreateHotkeyFromCGEvent(Event, &Eventkey);
                if(HotkeyExists(Eventkey.Mod, Eventkey.Key, &Hotkey, KWMHotkeys.ActiveMode->Name))
                {
                    KWMHotkeys.Queue.push(Hotkey);
                    if(!Hotkey.Passthrough)
                        return NULL;
                }
            }

            if(KWMMode.Focus == FocusModeAutofocus &&
               !IsActiveSpaceFloating())
            {
                CGEventSetIntegerValueField(Event, kCGKeyboardEventAutorepeat, 0);
                CGEventPostToPSN(&KWMFocus.PSN, Event);
                return NULL;
            }
        } break;
        case kCGEventKeyUp:
        {
            if(KWMMode.Focus == FocusModeAutofocus &&
               !IsActiveSpaceFloating())
            {
                CGEventSetIntegerValueField(Event, kCGKeyboardEventAutorepeat, 0);
                CGEventPostToPSN(&KWMFocus.PSN, Event);
                return NULL;
            }
        } break;
        case kCGEventMouseMoved:
        {
            pthread_mutex_lock(&KWMThread.Lock);
            if(!IsSpaceTransitionInProgress())
            {
                UpdateActiveScreen();

                if(KWMMode.Focus != FocusModeDisabled &&
                   KWMMode.Focus != FocusModeStandby &&
                   !IsActiveSpaceFloating())
                    FocusWindowBelowCursor();
            }
            pthread_mutex_unlock(&KWMThread.Lock);
        } break;
        default: {} break;
    }

    return Event;
}