summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2018-10-07 12:29:52 -0400
committerPaul Davis <paul@linuxaudiosystems.com>2018-10-07 12:29:52 -0400
commit44cae0a62439d7f58a50920dcbd01f9f306ff1a2 (patch)
treed981bb2b35504346adde5335f4d2b0b650d6bc9b
parenta4692389b86a5d18c91b171dc8aeb557dc92d0a5 (diff)
delete transport masters from an idle callback
-rw-r--r--gtk2_ardour/transport_masters_dialog.cc16
-rw-r--r--gtk2_ardour/transport_masters_dialog.h2
2 files changed, 16 insertions, 2 deletions
diff --git a/gtk2_ardour/transport_masters_dialog.cc b/gtk2_ardour/transport_masters_dialog.cc
index 3b16007aca..ec2a028ba4 100644
--- a/gtk2_ardour/transport_masters_dialog.cc
+++ b/gtk2_ardour/transport_masters_dialog.cc
@@ -256,10 +256,22 @@ TransportMastersWidget::Row::name_press (GdkEventButton* ev)
return false;
}
+gboolean
+TransportMastersWidget::Row::_idle_remove (gpointer arg)
+{
+ TransportMastersWidget::Row* row = (TransportMastersWidget::Row*) arg;
+ TransportMasterManager::instance().remove (row->tm->name());
+
+ return FALSE; /* do not call again */
+}
+
void
TransportMastersWidget::Row::remove_clicked ()
{
- TransportMasterManager::instance().remove (tm->name());
+ /* have to do this via an idle callback, because it will destroy the
+ widget from which this callback was initiated.
+ */
+ g_idle_add_full (G_PRIORITY_HIGH_IDLE + 10, _idle_remove, this, NULL);
}
void
@@ -519,7 +531,7 @@ TransportMastersWidget::Row::update (Session* s, samplepos_t now)
}
void
- TransportMastersWidget::update (samplepos_t /* audible */)
+TransportMastersWidget::update (samplepos_t /* audible */)
{
samplepos_t now = AudioEngine::instance()->sample_time ();
diff --git a/gtk2_ardour/transport_masters_dialog.h b/gtk2_ardour/transport_masters_dialog.h
index ee6f1cfdb1..1d20dfee15 100644
--- a/gtk2_ardour/transport_masters_dialog.h
+++ b/gtk2_ardour/transport_masters_dialog.h
@@ -126,6 +126,8 @@ class TransportMastersWidget : public Gtk::VBox, public ARDOUR::SessionHandlePtr
void prop_change (PBD::PropertyChange);
void remove_clicked ();
+ static gboolean _idle_remove (gpointer arg);
+
bool name_press (GdkEventButton*);
void name_edited (std::string, int);