vcl/unx/gtk3/gtkframe.cxx | 10 ++++++++++ vcl/win/window/salframe.cxx | 4 ++-- 2 files changed, 12 insertions(+), 2 deletions(-)
New commits: commit d8b60e66bf1847989f6ff3c06ea214cef059ecaf Author: Caolán McNamara <caol...@redhat.com> AuthorDate: Tue Jan 24 12:33:45 2023 +0000 Commit: Caolán McNamara <caol...@redhat.com> CommitDate: Tue Jan 24 21:16:13 2023 +0000 tdf#152404 crash with ibus-mozc with ctrl+alt+c during ExtTextInput Change-Id: I86e19387d93a57c3ad263f0c2dc9222a5f3480be Reviewed-on: https://gerrit.libreoffice.org/c/core/+/146065 Tested-by: Jenkins Reviewed-by: Caolán McNamara <caol...@redhat.com> diff --git a/vcl/unx/gtk3/gtkframe.cxx b/vcl/unx/gtk3/gtkframe.cxx index e9127b23e659..0a030c83b14b 100644 --- a/vcl/unx/gtk3/gtkframe.cxx +++ b/vcl/unx/gtk3/gtkframe.cxx @@ -451,6 +451,16 @@ bool GtkSalFrame::doKeyCallback( guint state, bool bStopProcessingKey; if (bDown) { + // tdf#152404 Commit uncommitted text before dispatching key shortcuts. In + // certain cases such as pressing Control-Alt-C in a Writer document while + // there is uncommitted text will call GtkSalFrame::EndExtTextInput() which + // will dispatch a SalEvent::EndExtTextInput event. Writer's handler for that + // event will delete the uncommitted text and then insert the committed text + // but LibreOffice will crash when deleting the uncommitted text because + // deletion of the text also removes and deletes the newly inserted comment. + if (m_pIMHandler && !m_pIMHandler->m_aInputEvent.maText.isEmpty() && (aEvent.mnCode & (KEY_MOD1 | KEY_MOD2))) + m_pIMHandler->doCallEndExtTextInput(); + bStopProcessingKey = CallCallbackExc(SalEvent::KeyInput, &aEvent); // #i46889# copy AlternateKeyCode handling from generic plugin if (!bStopProcessingKey) diff --git a/vcl/win/window/salframe.cxx b/vcl/win/window/salframe.cxx index 4a1a7f1a88d6..474e48560fb9 100644 --- a/vcl/win/window/salframe.cxx +++ b/vcl/win/window/salframe.cxx @@ -3417,8 +3417,8 @@ static void UnsetAltIfAltGr(SalKeyEvent& rKeyEvt, sal_uInt16 nModCode) } // tdf#152404 Commit uncommitted text before dispatching key shortcuts. In -// certain cases such as pressing Command-Option-C in a Writer document while -// there is uncommitted text will call AquaSalFrame::EndExtTextInput() which +// certain cases such as pressing Control-Alt-C in a Writer document while +// there is uncommitted text will call WinSalFrame::EndExtTextInput() which // will dispatch a SalEvent::EndExtTextInput event. Writer's handler for that // event will delete the uncommitted text and then insert the committed text // but LibreOffice will crash when deleting the uncommitted text because