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.
This commit is contained in:
Tom Englund 2024-05-03 19:10:41 +02:00 committed by GitHub
parent 8a2269272b
commit 1c73beaf9b
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 1 additions and 1 deletions

View file

@ -181,7 +181,6 @@ uint32_t CKeybindManager::keycodeToModifier(xkb_keycode_t keycode) {
void CKeybindManager::updateXKBTranslationState() { void CKeybindManager::updateXKBTranslationState() {
if (m_pXKBTranslationState) { if (m_pXKBTranslationState) {
xkb_keymap_unref(xkb_state_get_keymap(m_pXKBTranslationState));
xkb_state_unref(m_pXKBTranslationState); xkb_state_unref(m_pXKBTranslationState);
m_pXKBTranslationState = nullptr; m_pXKBTranslationState = nullptr;

View file

@ -1195,6 +1195,7 @@ void CInputManager::destroyKeyboard(SKeyboard* pKeyboard) {
pKeyboard->hyprListener_keyboardKey.removeCallback(); pKeyboard->hyprListener_keyboardKey.removeCallback();
xkb_state_unref(pKeyboard->xkbTranslationState); xkb_state_unref(pKeyboard->xkbTranslationState);
pKeyboard->xkbTranslationState = nullptr;
m_lKeyboards.remove(*pKeyboard); m_lKeyboards.remove(*pKeyboard);