aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/managers/KeybindManager.hpp
blob: b07510d0bbd0c4f2b79f46fbc30d6b9902570e2e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#pragma once

#include "../defines.hpp"
#include <deque>
#include "../Compositor.hpp"
#include <unordered_map>
#include <functional>

struct SKeybind {
    std::string       key = 0;
    uint32_t          modmask = 0;
    std::string       handler = "";
    std::string       arg = "";
};

class CKeybindManager {
public:
    CKeybindManager();

    bool                handleKeybinds(const uint32_t&, const xkb_keysym_t&);
    void                addKeybind(SKeybind);
    void                removeKeybind(uint32_t, const std::string&);
    uint32_t            stringToModMask(std::string);
    void                clearKeybinds();

    std::unordered_map<std::string, std::function<void(std::string)>> m_mDispatchers;

private:
    std::list<SKeybind> m_lKeybinds;

    bool                handleInternalKeybinds(xkb_keysym_t);

    inline static bool  m_bSuppressWorkspaceChangeEvents = false;

    // -------------- Dispatchers -------------- //
    static void         killActive(std::string);
    static void         spawn(std::string);
    static void         toggleActiveFloating(std::string);
    static void         toggleActivePseudo(std::string);
    static void         changeworkspace(std::string);
    static void         fullscreenActive(std::string);
    static void         moveActiveToWorkspace(std::string);
    static void         moveActiveToWorkspaceSilent(std::string);
    static void         moveFocusTo(std::string);
    static void         moveActiveTo(std::string);
    static void         toggleGroup(std::string);
    static void         changeGroupActive(std::string);
    static void         alterSplitRatio(std::string);
    static void         focusMonitor(std::string);
    static void         toggleSplit(std::string);
    static void         moveCursorToCorner(std::string);
};

inline std::unique_ptr<CKeybindManager> g_pKeybindManager;