diff --git a/src/managers/input/InputMethodPopup.cpp b/src/managers/input/InputMethodPopup.cpp index 27acd08c..3c4731b5 100644 --- a/src/managers/input/InputMethodPopup.cpp +++ b/src/managers/input/InputMethodPopup.cpp @@ -120,11 +120,18 @@ void CInputPopup::updateBox() { CBox cursorBoxLocal({-popupOffset.x, -popupOffset.y}, cursorBoxParent.size()); m_popup->sendInputRectangle(cursorBoxLocal); - CBox popupBoxParent(cursorBoxParent.pos() + popupOffset, currentPopupSize); - if (popupBoxParent != m_lastBoxLocal) { + CBox popupBoxParent(cursorBoxParent.pos() + popupOffset, currentPopupSize); + const bool boxChanged = popupBoxParent != m_lastBoxLocal; + if (boxChanged) + damageEntire(); // damage the old location before updating + + m_lastBoxLocal = popupBoxParent; + + // Since a redraw request is not always sent when only the position is updated, + // a manual redraw may be required in some cases. + if (boxChanged) damageEntire(); - m_lastBoxLocal = popupBoxParent; - } + damageSurface(); if (const auto PM = g_pCompositor->getMonitorFromCursor(); PM && PM->m_id != m_lastMonitor) {