summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2019-10-14 13:03:15 +0100
committerCaolán McNamara <caolanm@redhat.com>2019-10-14 15:22:03 +0200
commitde2cb96d5f9bb3c831fd136062582b4c11a003d1 (patch)
treee563e2adc226e19b6d019ca5bb298869504a982f
parent3f1b8f02cac96f92108ad98a2f6b7d34dc4794c6 (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.cxx28
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);