summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gtk2_ardour/gain_meter.cc47
-rw-r--r--gtk2_ardour/region_view.cc3
-rw-r--r--libs/ardour/audioengine.cc10
3 files changed, 37 insertions, 23 deletions
diff --git a/gtk2_ardour/gain_meter.cc b/gtk2_ardour/gain_meter.cc
index 7dde6e4acf..32b58373ca 100644
--- a/gtk2_ardour/gain_meter.cc
+++ b/gtk2_ardour/gain_meter.cc
@@ -129,9 +129,9 @@ GainMeterBase::GainMeterBase (boost::shared_ptr<IO> io, Session& s,
gain_automation_state_button.set_size_request(15, 15);
gain_automation_style_button.set_size_request(15, 15);
- Route* r;
+ boost::shared_ptr<Route> r;
- if ((r = dynamic_cast<Route*> (_io.get())) != 0) {
+ if ((r = boost::dynamic_pointer_cast<Route> (_io)) != 0) {
if (!r->hidden()) {
@@ -247,8 +247,9 @@ GainMeterBase::peak_button_release (GdkEventButton* ev)
if (ev->button == 1 && Keyboard::modifier_state_equals (ev->state, Keyboard::PrimaryModifier|Keyboard::TertiaryModifier)) {
ResetAllPeakDisplays ();
} else if (ev->button == 1 && Keyboard::modifier_state_equals (ev->state, Keyboard::PrimaryModifier)) {
- Route* r;
- if ((r = dynamic_cast<Route*> (_io.get())) != 0) {
+ boost::shared_ptr<Route> r;
+
+ if ((r = boost::dynamic_pointer_cast<Route> (_io)) != 0) {
ResetGroupPeakDisplays (r->mix_group());
}
} else {
@@ -261,8 +262,9 @@ GainMeterBase::peak_button_release (GdkEventButton* ev)
void
GainMeterBase::reset_peak_display ()
{
- Route * r;
- if ((r = dynamic_cast<Route*> (_io.get())) != 0) {
+ boost::shared_ptr<Route> r;
+
+ if ((r = boost::dynamic_pointer_cast<Route> (_io)) != 0) {
r->reset_max_peak_meters();
}
@@ -275,8 +277,9 @@ GainMeterBase::reset_peak_display ()
void
GainMeterBase::reset_group_peak_display (RouteGroup* group)
{
- Route* r;
- if ((r = dynamic_cast<Route*> (_io.get())) != 0) {
+ boost::shared_ptr<Route> r;
+
+ if ((r = boost::dynamic_pointer_cast<Route> (_io)) != 0) {
if (group == r->mix_group()) {
reset_peak_display ();
}
@@ -420,11 +423,11 @@ next_meter_point (MeterPoint mp)
gint
GainMeterBase::meter_press(GdkEventButton* ev)
{
- Route* _route;
+ boost::shared_ptr<Route> _route;
wait_for_release = false;
-
- if ((_route = dynamic_cast<Route*>(_io.get())) == 0) {
+
+ if ((_route = boost::dynamic_pointer_cast<Route>(_io)) == 0) {
return FALSE;
}
@@ -495,13 +498,18 @@ GainMeterBase::meter_press(GdkEventButton* ev)
gint
GainMeterBase::meter_release(GdkEventButton* ev)
{
-
if(!ignore_toggle){
if (wait_for_release){
wait_for_release = false;
- set_meter_point (*(dynamic_cast<Route*>(_io.get())), old_meter_point);
+
+ boost::shared_ptr<Route> r;
+
+ if ((r = boost::dynamic_pointer_cast<Route>(_io)) != 0) {
+ set_meter_point (*r, old_meter_point);
+ }
}
}
+
return true;
}
@@ -526,10 +534,10 @@ GainMeterBase::set_mix_group_meter_point (Route& route, MeterPoint mp)
void
GainMeterBase::meter_point_clicked ()
{
- Route* r;
-
- if ((r = dynamic_cast<Route*> (_io.get())) != 0) {
+ boost::shared_ptr<Route> r;
+ if ((r = boost::dynamic_pointer_cast<Route> (_io)) != 0) {
+ /* WHAT? */
}
}
@@ -644,7 +652,6 @@ GainMeterBase::_astyle_string (AutoStyle style, bool shrt)
void
GainMeterBase::gain_automation_style_changed ()
{
- // Route* _route = dynamic_cast<Route*>(&_io);
switch (_width) {
case Wide:
gain_automation_style_button.set_label (astyle_string(_io->gain_automation_curve().automation_style()));
@@ -765,10 +772,10 @@ GainMeter::GainMeter (boost::shared_ptr<IO> io, Session& s)
hbox.set_spacing (2);
hbox.pack_start (*fader_vbox, true, true);
- Route* r;
-
- if ((r = dynamic_cast<Route*> (_io.get())) != 0) {
+ boost::shared_ptr<Route> r;
+ if ((r = boost::dynamic_pointer_cast<Route> (_io)) != 0) {
+
/*
if we have a non-hidden route (ie. we're not the click or the auditioner),
pack some route-dependent stuff.
diff --git a/gtk2_ardour/region_view.cc b/gtk2_ardour/region_view.cc
index a88f821693..6240a7062c 100644
--- a/gtk2_ardour/region_view.cc
+++ b/gtk2_ardour/region_view.cc
@@ -87,7 +87,6 @@ RegionView::RegionView (const RegionView& other)
/* derived concrete type will call init () */
_region = other._region;
- editor = other.editor;
current_visible_sync_position = other.current_visible_sync_position;
valid = false;
_pixel_width = other._pixel_width;
@@ -104,7 +103,6 @@ RegionView::RegionView (const RegionView& other, boost::shared_ptr<Region> other
/* derived concrete type will call init () */
_region = other_region;
- editor = other.editor;
current_visible_sync_position = other.current_visible_sync_position;
valid = false;
_pixel_width = other._pixel_width;
@@ -135,6 +133,7 @@ RegionView::RegionView (ArdourCanvas::Group* parent,
void
RegionView::init (Gdk::Color& basic_color, bool wfd)
{
+ editor = 0;
valid = true;
in_destructor = false;
_height = 0;
diff --git a/libs/ardour/audioengine.cc b/libs/ardour/audioengine.cc
index 15ccd852f7..a0287ab696 100644
--- a/libs/ardour/audioengine.cc
+++ b/libs/ardour/audioengine.cc
@@ -1227,8 +1227,16 @@ AudioEngine::reconnect_to_jack ()
for (PortConnections::iterator i = port_connections.begin(); i != port_connections.end(); ++i) {
int err;
+ jack_client_t* j = _jack;
+
+ /* JACK could have zombified us. */
+
+ if (!j) {
+ error << _("Disconnected from JACK while reconnecting. You should quit Ardour now.") << endmsg;
+ return -1;
+ }
- if ((err = jack_connect (_jack, (*i).first.c_str(), (*i).second.c_str())) != 0) {
+ if ((err = jack_connect (j, (*i).first.c_str(), (*i).second.c_str())) != 0) {
if (err != EEXIST) {
error << string_compose (_("could not reconnect %1 and %2 (err = %3)"),
(*i).first, (*i).second, err)