summaryrefslogtreecommitdiff
path: root/src/managers
diff options
context:
space:
mode:
authorvaxerski <vaxry@vaxry.net>2022-09-20 10:02:20 +0100
committervaxerski <vaxry@vaxry.net>2022-09-20 10:02:20 +0100
commitb82621c4ecd2697ac397ca0e47d5d75bf028632a (patch)
tree8beed7ba0486007b314cd99e6450af012083b7eb /src/managers
parent5b6c8d5b0f9a807eaf61d7286d41a75f5e6e61e9 (diff)
fix mouse binds being stuck
Diffstat (limited to 'src/managers')
-rw-r--r--src/managers/KeybindManager.cpp23
-rw-r--r--src/managers/KeybindManager.hpp3
2 files changed, 26 insertions, 0 deletions
diff --git a/src/managers/KeybindManager.cpp b/src/managers/KeybindManager.cpp
index 47f42e2b..58da358c 100644
--- a/src/managers/KeybindManager.cpp
+++ b/src/managers/KeybindManager.cpp
@@ -129,6 +129,19 @@ void CKeybindManager::updateXKBTranslationState() {
m_pXKBTranslationState = xkb_state_new(PKEYMAP);
}
+void CKeybindManager::ensureMouseBindState() {
+ if (!m_bIsMouseBindActive)
+ return;
+
+ if (g_pInputManager->currentlyDraggedWindow) {
+ g_pLayoutManager->getCurrentLayout()->onEndDragWindow();
+ g_pInputManager->currentlyDraggedWindow = nullptr;
+ g_pInputManager->dragMode = MBIND_INVALID;
+ }
+
+ m_bIsMouseBindActive = false;
+}
+
bool CKeybindManager::onKeyEvent(wlr_keyboard_key_event* e, SKeyboard* pKeyboard) {
if (!g_pCompositor->m_bSessionActive) {
m_dPressedKeycodes.clear();
@@ -161,6 +174,8 @@ bool CKeybindManager::onKeyEvent(wlr_keyboard_key_event* e, SKeyboard* pKeyboard
m_uLastCode = KEYCODE;
m_uLastMouseCode = 0;
+ ensureMouseBindState();
+
bool found = false;
if (e->state == WL_KEYBOARD_KEY_STATE_PRESSED) {
// clean repeat
@@ -1587,11 +1602,15 @@ void CKeybindManager::mouse(std::string args) {
if (TRUEARG == "movewindow") {
if (PRESSED) {
+ g_pKeybindManager->m_bIsMouseBindActive = true;
+
g_pInputManager->currentlyDraggedWindow = g_pCompositor->windowFromCursor();
g_pInputManager->dragMode = MBIND_MOVE;
g_pLayoutManager->getCurrentLayout()->onBeginDragWindow();
} else {
+ g_pKeybindManager->m_bIsMouseBindActive = false;
+
if (g_pInputManager->currentlyDraggedWindow) {
g_pLayoutManager->getCurrentLayout()->onEndDragWindow();
g_pInputManager->currentlyDraggedWindow = nullptr;
@@ -1600,11 +1619,15 @@ void CKeybindManager::mouse(std::string args) {
}
} else if (TRUEARG == "resizewindow") {
if (PRESSED) {
+ g_pKeybindManager->m_bIsMouseBindActive = true;
+
g_pInputManager->currentlyDraggedWindow = g_pCompositor->windowFromCursor();
g_pInputManager->dragMode = MBIND_RESIZE;
g_pLayoutManager->getCurrentLayout()->onBeginDragWindow();
} else {
+ g_pKeybindManager->m_bIsMouseBindActive = false;
+
if (g_pInputManager->currentlyDraggedWindow) {
g_pLayoutManager->getCurrentLayout()->onEndDragWindow();
g_pInputManager->currentlyDraggedWindow = nullptr;
diff --git a/src/managers/KeybindManager.hpp b/src/managers/KeybindManager.hpp
index ab883c40..d782842c 100644
--- a/src/managers/KeybindManager.hpp
+++ b/src/managers/KeybindManager.hpp
@@ -64,6 +64,8 @@ private:
uint32_t m_uLastCode = 0;
uint32_t m_uLastMouseCode = 0;
+ bool m_bIsMouseBindActive = false;
+
int m_iPassPressed = -1; // used for pass
CTimer m_tScrollTimer;
@@ -76,6 +78,7 @@ private:
xkb_state* m_pXKBTranslationState = nullptr;
void updateXKBTranslationState();
+ void ensureMouseBindState();
// -------------- Dispatchers -------------- //
static void killActive(std::string);