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

Reply via email to