From 0807b8b95f595083a19bb5fe317d7242bcb26654 Mon Sep 17 00:00:00 2001 From: vaxerski <43317083+vaxerski@users.noreply.github.com> Date: Tue, 14 Mar 2023 13:51:08 +0000 Subject: [PATCH] tiv1: minor fixes for crashes --- src/managers/input/InputMethodRelay.cpp | 4 +++- src/protocols/TextInputV1.cpp | 4 ++++ src/protocols/TextInputV1.hpp | 2 ++ 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/managers/input/InputMethodRelay.cpp b/src/managers/input/InputMethodRelay.cpp index f8fa6b09..f84850de 100644 --- a/src/managers/input/InputMethodRelay.cpp +++ b/src/managers/input/InputMethodRelay.cpp @@ -371,7 +371,7 @@ void CInputMethodRelay::createNewTextInput(wlr_text_input_v3* pInput, STextInput return; } - if (!PINPUT->pWlrInput->current_enabled) { + if (!(PINPUT->pWlrInput ? PINPUT->pWlrInput->current_enabled : PINPUT->pV1Input->active)) { Debug::log(WARN, "Disabled TextInput commit?"); return; } @@ -486,6 +486,7 @@ void CInputMethodRelay::onKeyboardFocus(wlr_surface* pSurface) { else { zwp_text_input_v1_send_leave(ti.pV1Input->resourceImpl); ti.pV1Input->focusedSurface = nullptr; + ti.pV1Input->active = false; } } else { continue; @@ -500,6 +501,7 @@ void CInputMethodRelay::onKeyboardFocus(wlr_surface* pSurface) { else { zwp_text_input_v1_send_enter(ti.pV1Input->resourceImpl, pSurface->resource); ti.pV1Input->focusedSurface = pSurface; + ti.pV1Input->active = true; } } else { setPendingSurface(&ti, pSurface); diff --git a/src/protocols/TextInputV1.cpp b/src/protocols/TextInputV1.cpp index f50f3298..341ce27b 100644 --- a/src/protocols/TextInputV1.cpp +++ b/src/protocols/TextInputV1.cpp @@ -113,6 +113,8 @@ void CTextInputV1ProtocolManager::removeTI(STextInputV1* pTI) { // if ((*TI)->resourceImpl) // wl_resource_destroy((*TI)->resourceImpl); + g_pInputManager->m_sIMERelay.removeTextInput((*TI)->pTextInput); + std::erase_if(m_pClients, [&](const auto& other) { return other.get() == pTI; }); } @@ -131,6 +133,8 @@ static void destroyTI(wl_resource* resource) { wl_resource_set_user_data(resource, nullptr); } + g_pInputManager->m_sIMERelay.removeTextInput(TI->pTextInput); + TI->pTextInput->hyprListener_textInputDestroy.emit(nullptr); g_pProtocolManager->m_pTextInputV1ProtocolManager->removeTI(TI); diff --git a/src/protocols/TextInputV1.hpp b/src/protocols/TextInputV1.hpp index 9057e132..f714b24c 100644 --- a/src/protocols/TextInputV1.hpp +++ b/src/protocols/TextInputV1.hpp @@ -24,6 +24,8 @@ struct STextInputV1 { uint32_t serial = 0; + bool active = false; + struct SPendingSurr { bool isPending = false; std::string text = "";