Don't show DSP stats of inserts that don't collect them.
[ardour.git] / gtk2_ardour / transport_masters_dialog.cc
index 3b16007aca60c79c4fb2a83c8f83da25cf565816..33d0ce5ca4fa0b4ba7c0e823f494bc7fa1cd29ba 100644 (file)
@@ -119,16 +119,27 @@ TransportMastersWidget::add_master ()
        AddTransportMasterDialog d;
 
        d.present ();
-       int r = d.run ();
+       string name;
 
-       switch (r) {
-       case RESPONSE_ACCEPT:
-               break;
-       default:
-               return;
+       while (name.empty()) {
+
+               int r = d.run ();
+
+               switch (r) {
+               case RESPONSE_ACCEPT:
+                       name = d.get_name();
+                       break;
+               default:
+                       return;
+               }
        }
 
-       TransportMasterManager::instance().add (d.get_type(), d.get_name());
+       d.hide ();
+
+       if (TransportMasterManager::instance().add (d.get_type(), name)) {
+               MessageDialog msg (_("New transport master not added - check error log for details"));
+               msg.run ();
+       }
 }
 
 void
@@ -202,7 +213,6 @@ TransportMastersWidget::rebuild ()
 
                table.show_all ();
 
-               // r->label_box.set_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK);
                r->label_box.signal_button_press_event().connect (sigc::mem_fun (*r, &TransportMastersWidget::Row::name_press));
                r->port_combo.signal_changed().connect (sigc::mem_fun (*r, &TransportMastersWidget::Row::port_choice_changed));
                r->use_button.signal_toggled().connect (sigc::mem_fun (*r, &TransportMastersWidget::Row::use_button_toggled));
@@ -256,10 +266,20 @@ TransportMastersWidget::Row::name_press (GdkEventButton* ev)
        return false;
 }
 
+bool
+TransportMastersWidget::idle_remove (TransportMastersWidget::Row* row)
+{
+       TransportMasterManager::instance().remove (row->tm->name());
+       return false;
+}
+
 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.
+       */
+       Glib::signal_idle().connect (sigc::bind (sigc::mem_fun (parent, &TransportMastersWidget::idle_remove), this));
 }
 
 void
@@ -519,7 +539,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 ();
 
@@ -600,6 +620,8 @@ TransportMastersWidget::AddTransportMasterDialog::AddTransportMasterDialog ()
        type_label.show ();
        name_hbox.show ();
        type_hbox.show ();
+
+       name_entry.signal_activate().connect (sigc::bind (sigc::mem_fun (*this, &Gtk::Dialog::response), Gtk::RESPONSE_ACCEPT));
 }
 
 string