vcl/unx/gtk3/gtkinst.cxx |   11 +++++++++++
 1 file changed, 11 insertions(+)

New commits:
commit 9f38870924421fd88b2446fae8ab98ea773c8c11
Author:     Caolán McNamara <caolan.mcnam...@collabora.com>
AuthorDate: Fri Oct 20 14:38:29 2023 +0100
Commit:     Michael Stahl <michael.st...@allotropia.de>
CommitDate: Mon Oct 23 12:26:55 2023 +0200

    Resolves: tdf#157849 gtk_spin_button_update callback can delete widget
    
    so later GtkInstanceEditable::signal_activate is on deleted widget
    
    Change-Id: I9bb9848b4554792db11fc7b0e2d3491a94975b3f
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/158168
    Tested-by: Jenkins
    Reviewed-by: Xisco Fauli <xiscofa...@libreoffice.org>
    (cherry picked from commit e91027456807fab81e3ba1aeacc99ba0057673dd)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/158279
    Reviewed-by: Caolán McNamara <caolan.mcnam...@collabora.com>
    Tested-by: Michael Stahl <michael.st...@allotropia.de>
    Reviewed-by: Michael Stahl <michael.st...@allotropia.de>

diff --git a/vcl/unx/gtk3/gtkinst.cxx b/vcl/unx/gtk3/gtkinst.cxx
index 38e56c87723a..9a470308d6c5 100644
--- a/vcl/unx/gtk3/gtkinst.cxx
+++ b/vcl/unx/gtk3/gtkinst.cxx
@@ -17240,6 +17240,12 @@ IMPL_LINK_NOARG(GtkInstanceIconView, 
async_signal_selection_changed, void*, void
 
 namespace {
 
+void signalDestroyFlag(GtkWidget*, gpointer destroyed)
+{
+    bool* pDestroyed = static_cast<bool*>(destroyed);
+    *pDestroyed = true;
+}
+
 class GtkInstanceSpinButton : public GtkInstanceEditable, public virtual 
weld::SpinButton
 {
 private:
@@ -17294,7 +17300,12 @@ private:
 
     virtual void signal_activate() override
     {
+        bool bActivateDestroy(false);
+        gulong nDestroySignalId = g_signal_connect(m_pButton, "destroy", 
G_CALLBACK(signalDestroyFlag), &bActivateDestroy);
         gtk_spin_button_update(m_pButton);
+        if (bActivateDestroy)
+            return;
+        g_signal_handler_disconnect(m_pButton, nDestroySignalId);
         GtkInstanceEditable::signal_activate();
     }
 

Reply via email to