diff options
author | Caolán McNamara <caolanm@redhat.com> | 2019-10-14 13:03:15 +0100 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2019-10-14 15:22:03 +0200 |
commit | de2cb96d5f9bb3c831fd136062582b4c11a003d1 (patch) | |
tree | e563e2adc226e19b6d019ca5bb298869504a982f | |
parent | 3f1b8f02cac96f92108ad98a2f6b7d34dc4794c6 (diff) |
assert fires after help hides find & replace dialog
Change-Id: I72db53711322de9420fdb097ac60dda35f1ec5d8
Reviewed-on: https://gerrit.libreoffice.org/80769
Tested-by: Jenkins
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
Tested-by: Caolán McNamara <caolanm@redhat.com>
-rw-r--r-- | vcl/unx/gtk3/gtk3gtkinst.cxx | 28 |
1 files changed, 20 insertions, 8 deletions
diff --git a/vcl/unx/gtk3/gtk3gtkinst.cxx b/vcl/unx/gtk3/gtk3gtkinst.cxx index b1d3eed73097..b8ceadda4e0c 100644 --- a/vcl/unx/gtk3/gtk3gtkinst.cxx +++ b/vcl/unx/gtk3/gtk3gtkinst.cxx @@ -4023,7 +4023,7 @@ public: virtual bool runAsync(std::shared_ptr<weld::DialogController> rDialogController, const std::function<void(sal_Int32)>& func) override { - assert(!m_nResponseSignalId && !m_nCancelSignalId); + assert(!m_nResponseSignalId && !m_nCancelSignalId && !m_nSignalDeleteId); m_xDialogController = rDialogController; m_aFunc = func; @@ -4042,7 +4042,7 @@ public: virtual bool runAsync(std::shared_ptr<Dialog> const & rxSelf, const std::function<void(sal_Int32)>& func) override { assert( rxSelf.get() == this ); - assert(!m_nResponseSignalId && !m_nCancelSignalId); + assert(!m_nResponseSignalId && !m_nCancelSignalId && !m_nSignalDeleteId); // In order to store a shared_ptr to ourself, we have to have been constructed by make_shared, // which is that rxSelf enforces. @@ -4223,12 +4223,7 @@ public: if (m_nCloseSignalId) g_signal_handler_disconnect(m_pDialog, m_nCloseSignalId); - if (m_nResponseSignalId) - g_signal_handler_disconnect(m_pDialog, m_nResponseSignalId); - if (m_nCancelSignalId) - g_signal_handler_disconnect(m_pDialog, m_nCancelSignalId); - if (m_nSignalDeleteId) - g_signal_handler_disconnect(m_pDialog, m_nSignalDeleteId); + assert(!m_nResponseSignalId && !m_nCancelSignalId && !m_nSignalDeleteId); } }; @@ -5954,6 +5949,23 @@ void GtkInstanceDialog::asyncresponse(gint ret) m_aDialogRun.dec_modal_count(); hide(); m_aFunc(GtkToVcl(ret)); + + if (m_nResponseSignalId) + { + g_signal_handler_disconnect(m_pDialog, m_nResponseSignalId); + m_nResponseSignalId = 0; + } + if (m_nCancelSignalId) + { + g_signal_handler_disconnect(m_pDialog, m_nCancelSignalId); + m_nCancelSignalId = 0; + } + if (m_nSignalDeleteId) + { + g_signal_handler_disconnect(m_pDialog, m_nSignalDeleteId); + m_nSignalDeleteId = 0; + } + m_aFunc = nullptr; // move the self pointer, otherwise it might be de-allocated by time we try to reset it std::shared_ptr<weld::Dialog> me = std::move(m_xRunAsyncSelf); |