aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorTom Englund <[email protected]>2024-05-03 19:10:41 +0200
committerGitHub <[email protected]>2024-05-03 18:10:41 +0100
commit1c73beaf9bf98ba76f89fbfc137b51a0c92063a3 (patch)
tree679fbf5e1014ea29489da946fc2e734225ac8840
parent8a2269272b6a9752cd48097e19c0bc0f3bdab191 (diff)
downloadHyprland-1c73beaf9bf98ba76f89fbfc137b51a0c92063a3.tar.gz
Hyprland-1c73beaf9bf98ba76f89fbfc137b51a0c92063a3.zip
inputmgr: dont double free on hotplug (#5855)
* inputmgr: dont double free on hotplug since we are also unrefing the state on hotplugging the keyboard set the state to nullptr so the destructor if case actually catches its been already freed. * keybindgmgr: dont double free on layout switching d5bf153 added keymap unref at the end of updateXKBTranslationState to not leak it when exiting, only it causes updateXKBTranslationState to double free when changing layouts. since its already freed. remove the unneeded extra xkb_keymap_unref.
-rw-r--r--src/managers/KeybindManager.cpp1
-rw-r--r--src/managers/input/InputManager.cpp1
2 files changed, 1 insertions, 1 deletions
diff --git a/src/managers/KeybindManager.cpp b/src/managers/KeybindManager.cpp
index cfad932a..4e98a301 100644
--- a/src/managers/KeybindManager.cpp
+++ b/src/managers/KeybindManager.cpp
@@ -181,7 +181,6 @@ uint32_t CKeybindManager::keycodeToModifier(xkb_keycode_t keycode) {
void CKeybindManager::updateXKBTranslationState() {
if (m_pXKBTranslationState) {
- xkb_keymap_unref(xkb_state_get_keymap(m_pXKBTranslationState));
xkb_state_unref(m_pXKBTranslationState);
m_pXKBTranslationState = nullptr;
diff --git a/src/managers/input/InputManager.cpp b/src/managers/input/InputManager.cpp
index 58b5caa3..fb9d2b8a 100644
--- a/src/managers/input/InputManager.cpp
+++ b/src/managers/input/InputManager.cpp
@@ -1195,6 +1195,7 @@ void CInputManager::destroyKeyboard(SKeyboard* pKeyboard) {
pKeyboard->hyprListener_keyboardKey.removeCallback();
xkb_state_unref(pKeyboard->xkbTranslationState);
+ pKeyboard->xkbTranslationState = nullptr;
m_lKeyboards.remove(*pKeyboard);