From 66eac124e263073d3f6f7afdd3a5bfc35eb15353 Mon Sep 17 00:00:00 2001 From: vaxerski <43317083+vaxerski@users.noreply.github.com> Date: Tue, 26 Jul 2022 14:50:21 +0200 Subject: add binding to mouse buttons --- src/managers/KeybindManager.cpp | 22 ++++++++++++++++++++++ src/managers/KeybindManager.hpp | 1 + src/managers/input/InputManager.cpp | 7 +++++++ 3 files changed, 30 insertions(+) (limited to 'src/managers') diff --git a/src/managers/KeybindManager.cpp b/src/managers/KeybindManager.cpp index 45a35b22..61769c38 100644 --- a/src/managers/KeybindManager.cpp +++ b/src/managers/KeybindManager.cpp @@ -143,6 +143,28 @@ bool CKeybindManager::onAxisEvent(wlr_pointer_axis_event* e) { } else { found = g_pKeybindManager->handleKeybinds(MODS, "mouse_up", 0, 0, true, 0); } + + if (found) + shadowKeybinds(); + } + + return !found; +} + +bool CKeybindManager::onMouseEvent(wlr_pointer_button_event* e) { + const auto MODS = g_pInputManager->accumulateModsFromAllKBs(); + + bool found = false; + + if (e->state == WLR_BUTTON_PRESSED) { + found = g_pKeybindManager->handleKeybinds(MODS, "mouse:" + std::to_string(e->button), 0, 0, true, 0); + + if (found) + shadowKeybinds(); + } else { + found = g_pKeybindManager->handleKeybinds(MODS, "mouse:" + std::to_string(e->button), 0, 0, false, 0); + + shadowKeybinds(); } return !found; diff --git a/src/managers/KeybindManager.hpp b/src/managers/KeybindManager.hpp index 2ae9b77b..30d3e859 100644 --- a/src/managers/KeybindManager.hpp +++ b/src/managers/KeybindManager.hpp @@ -27,6 +27,7 @@ public: bool onKeyEvent(wlr_keyboard_key_event*, SKeyboard*); bool onAxisEvent(wlr_pointer_axis_event*); + bool onMouseEvent(wlr_pointer_button_event*); void addKeybind(SKeybind); void removeKeybind(uint32_t, const std::string&); diff --git a/src/managers/input/InputManager.cpp b/src/managers/input/InputManager.cpp index e1f2e98f..fae0d03b 100644 --- a/src/managers/input/InputManager.cpp +++ b/src/managers/input/InputManager.cpp @@ -323,6 +323,13 @@ void CInputManager::processMouseDownNormal(wlr_pointer_button_event* e) { return; } + // notify the keybind manager + static auto *const PPASSMOUSE = &g_pConfigManager->getConfigValuePtr("binds:pass_mouse_when_bound")->intValue; + const auto PASS = g_pKeybindManager->onMouseEvent(e); + + if (!PASS && !*PPASSMOUSE) + return; + switch (e->state) { case WLR_BUTTON_PRESSED: if (!g_pCompositor->m_sSeat.mouse->currentConstraint) -- cgit v1.2.3