From c4b660a33930a0e60e853b6796c1fd76914b1719 Mon Sep 17 00:00:00 2001 From: Sungyoon Cho Date: Fri, 5 Apr 2024 01:34:04 +0900 Subject: IME: fix crash on restarting IME (#5428) --- src/managers/input/TextInput.cpp | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) (limited to 'src/managers/input/TextInput.cpp') diff --git a/src/managers/input/TextInput.cpp b/src/managers/input/TextInput.cpp index 8be13a4c..980d599b 100644 --- a/src/managers/input/TextInput.cpp +++ b/src/managers/input/TextInput.cpp @@ -37,12 +37,7 @@ void CTextInput::initCallbacks() { hyprListener_textInputDestroy.initCallback( isV3() ? &pWlrInput->events.destroy : &pV1Input->sDestroy, [this](void* owner, void* data) { - if (!g_pInputManager->m_sIMERelay.m_pWLRIME) { - // Debug::log(WARN, "Disabling TextInput on no IME!"); - return; - } - - if (pWlrInput && pWlrInput->current_enabled) { + if (pWlrInput && pWlrInput->current_enabled && g_pInputManager->m_sIMERelay.m_pWLRIME) { wlr_input_method_v2_send_deactivate(g_pInputManager->m_sIMERelay.m_pWLRIME); g_pInputManager->m_sIMERelay.commitIMEState(this); @@ -71,10 +66,10 @@ void CTextInput::onEnabled(wlr_surface* surfV1) { // v1 only, map surface to PTI if (!isV3()) { wlr_surface* pSurface = surfV1; - if (g_pCompositor->m_pLastFocus == pSurface) - enter(pSurface); - else - setFocusedSurface(pSurface); + if (g_pCompositor->m_pLastFocus != pSurface || !pV1Input->active) + return; + + enter(pSurface); } wlr_input_method_v2_send_activate(g_pInputManager->m_sIMERelay.m_pWLRIME); @@ -208,6 +203,9 @@ void CTextInput::leave() { setFocusedSurface(nullptr); + if (!g_pInputManager->m_sIMERelay.m_pWLRIME) + return; + if (!g_pInputManager->m_sIMERelay.m_pWLRIME->active) return; -- cgit v1.2.3