From d5ec118a1eb3e60c8eab5a3f1345e4c8fff50198 Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Wed, 12 Nov 2014 04:21:57 +0100 Subject: add AU plugin scan to Preferences UI --- gtk2_ardour/rc_option_editor.cc | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) (limited to 'gtk2_ardour') diff --git a/gtk2_ardour/rc_option_editor.cc b/gtk2_ardour/rc_option_editor.cc index a4d2b5dee2..0cb8441fd9 100644 --- a/gtk2_ardour/rc_option_editor.cc +++ b/gtk2_ardour/rc_option_editor.cc @@ -996,7 +996,8 @@ public: PluginOptions (RCConfiguration* c) : _rc_config (c) , _display_plugin_scan_progress (_("Always Display Plugin Scan Progress")) - , _discover_vst_on_start (_("Scan for new VST Plugins on Application Start")) + , _discover_vst_on_start (_("Scan for [new] VST Plugins on Application Start")) + , _discover_au_on_start (_("Scan for AudioUnit Plugins on Application Start")) , _timeout_adjustment (0, 0, 3000, 50, 50) , _timeout_slider (_timeout_adjustment) { @@ -1022,6 +1023,7 @@ public: Gtkmm2ext::UI::instance()->set_tip (_display_plugin_scan_progress, _("When enabled a popup window showing plugin scan progress is displayed for indexing (cache load) and discovery (detect new plugins)")); +#if (defined WINDOWS_VST_SUPPORT || defined LXVST_SUPPORT) _timeout_slider.set_digits (0); _timeout_adjustment.signal_value_changed().connect (sigc::mem_fun (*this, &PluginOptions::timeout_changed)); @@ -1069,6 +1071,14 @@ public: b->signal_clicked().connect (sigc::mem_fun (*this, &PluginOptions::edit_vst_path_clicked)); t->attach (*b, 1, 2, n, n+1, FILL); ++n; #endif +#endif // any VST + +#ifdef AUDIOUNIT_SUPPORT + t->attach (_discover_au_on_start, 0, 2, n, n+1); ++n; + _discover_au_on_start.signal_toggled().connect (sigc::mem_fun (*this, &PluginOptions::discover_au_on_start_toggled)); + Gtkmm2ext::UI::instance()->set_tip (_discover_au_on_start, + _("When enabled Audio Unit Plugins are discovered on application start. When disabled AU plugins will only be available after triggering a 'Scan' manually. The first successful scan will enable AU auto-scan, Any crash during plugin discovery will disable it.")); +#endif _box->pack_start (*t,true,true); } @@ -1086,18 +1096,24 @@ public: int const x = _rc_config->get_vst_scan_timeout(); _timeout_adjustment.set_value (x); } + else if (p == "discover-audio-units") { + bool const x = _rc_config->get_discover_audio_units(); + _discover_au_on_start.set_active (x); + } } void set_state_from_config () { parameter_changed ("show-plugin-scan-window"); parameter_changed ("discover-vst-on-start"); parameter_changed ("vst-scan-timeout"); + parameter_changed ("discover-audio-units"); } private: RCConfiguration* _rc_config; CheckButton _display_plugin_scan_progress; CheckButton _discover_vst_on_start; + CheckButton _discover_au_on_start; Adjustment _timeout_adjustment; HScale _timeout_slider; @@ -1111,6 +1127,11 @@ private: _rc_config->set_discover_vst_on_start(x); } + void discover_au_on_start_toggled () { + bool const x = _discover_au_on_start.get_active(); + _rc_config->set_discover_audio_units(x); + } + void timeout_changed () { int x = floor(_timeout_adjustment.get_value()); _rc_config->set_vst_scan_timeout(x); @@ -2127,7 +2148,7 @@ RCOptionEditor::RCOptionEditor () /* VIDEO Timeline */ add_option (_("Video"), new VideoTimelineOptions (_rc_config)); -#if (defined WINDOWS_VST_SUPPORT || defined LXVST_SUPPORT) +#if (defined WINDOWS_VST_SUPPORT || defined LXVST_SUPPORT || defined AUDIOUNIT_SUPPORT) /* Plugin options (currrently VST only) */ add_option (_("Plugins"), new PluginOptions (_rc_config)); #endif -- cgit v1.2.3 From 533b545295d6792daf14f009654af36ad2240fa3 Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Wed, 12 Nov 2014 04:57:03 +0100 Subject: add popup message and error log for AU crash reports --- gtk2_ardour/ardour_ui.cc | 11 +++++++++++ libs/ardour/audio_unit.cc | 1 + 2 files changed, 12 insertions(+) (limited to 'gtk2_ardour') diff --git a/gtk2_ardour/ardour_ui.cc b/gtk2_ardour/ardour_ui.cc index 2e9d8b3247..03ca13745f 100644 --- a/gtk2_ardour/ardour_ui.cc +++ b/gtk2_ardour/ardour_ui.cc @@ -88,6 +88,9 @@ #ifdef WINDOWS_VST_SUPPORT #include #endif +#ifdef AUDIOUNIT_SUPPORT +#include "ardour/audio_unit.h" +#endif #include "timecode/time.h" @@ -483,6 +486,14 @@ ARDOUR_UI::post_engine () { /* Things to be done once (and once ONLY) after we have a backend running in the AudioEngine */ +#ifdef AUDIOUNIT_SUPPORT + std::string au_msg; + if (AUPluginInfo::au_get_crashlog(au_msg)) { + popup_error(_("Audio Unit Plugin Scan Failed. Automatic AU scanning has been disabled. Please see the log window for further details.")); + error << _("Audio Unit Plugin Scan Failed:") << endmsg; + info << au_msg << endmsg; + } +#endif ARDOUR::init_post_engine (); diff --git a/libs/ardour/audio_unit.cc b/libs/ardour/audio_unit.cc index aa98ebb4c8..3024c55f43 100644 --- a/libs/ardour/audio_unit.cc +++ b/libs/ardour/audio_unit.cc @@ -2238,6 +2238,7 @@ AUPluginInfo::au_get_crashlog (std::string &msg) } std::ifstream ifs(fn.c_str()); msg.assign ((std::istreambuf_iterator(ifs)), (std::istreambuf_iterator())); + au_remove_crashlog (); return true; } -- cgit v1.2.3 From 0547694ac31ac6e30845cf9ed482d09435262fc8 Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Thu, 13 Nov 2014 00:10:13 +0100 Subject: fix compilation with gcc-4.9.1 --- gtk2_ardour/note_select_dialog.h | 1 + 1 file changed, 1 insertion(+) (limited to 'gtk2_ardour') diff --git a/gtk2_ardour/note_select_dialog.h b/gtk2_ardour/note_select_dialog.h index 607dbe1506..910728f2fb 100644 --- a/gtk2_ardour/note_select_dialog.h +++ b/gtk2_ardour/note_select_dialog.h @@ -20,6 +20,7 @@ #ifndef __gtk2_ardour_note_select_dialog_h__ #define __gtk2_ardour_note_select_dialog_h__ +#include #include "ardour_dialog.h" #include "gtk_pianokeyboard.h" -- cgit v1.2.3 From 589cc3162bb1bcae4d140f1314fc7b4138eaac98 Mon Sep 17 00:00:00 2001 From: David Robillard Date: Thu, 13 Nov 2014 21:32:08 -0500 Subject: Fix crash when deleting overlapped regions. Use RegionSelection for MIDI regions as well, since the old dumb stub didn't do some things correctly. There's probably no reason to have a separate class for this at all, and some good ones for putting all regions in the same selection, so we should probably do that. For now they are still separate in the selection but use the same base class. --- gtk2_ardour/editor_drag.cc | 20 ++++++++++++++++---- gtk2_ardour/editor_ops.cc | 6 ++++-- gtk2_ardour/midi_selection.cc | 26 ++++++++------------------ gtk2_ardour/midi_selection.h | 11 ++++------- gtk2_ardour/region_view.cc | 4 +++- 5 files changed, 35 insertions(+), 32 deletions(-) (limited to 'gtk2_ardour') diff --git a/gtk2_ardour/editor_drag.cc b/gtk2_ardour/editor_drag.cc index aa37467f2c..1f400310ae 100644 --- a/gtk2_ardour/editor_drag.cc +++ b/gtk2_ardour/editor_drag.cc @@ -1967,7 +1967,10 @@ NoteResizeDrag::start_grab (GdkEvent* event, Gdk::Cursor* /*ignored*/) MidiRegionSelection::iterator next; next = r; ++next; - (*r)->begin_resizing (at_front); + MidiRegionView* mrv = dynamic_cast(*r); + if (mrv) { + mrv->begin_resizing (at_front); + } r = next; } } @@ -1979,7 +1982,10 @@ NoteResizeDrag::motion (GdkEvent* /*event*/, bool /*first_move*/) for (MidiRegionSelection::iterator r = ms.begin(); r != ms.end(); ++r) { NoteBase* nb = reinterpret_cast (_item->get_data ("notebase")); assert (nb); - (*r)->update_resizing (nb, at_front, _drags->current_pointer_x() - grab_x(), relative); + MidiRegionView* mrv = dynamic_cast(*r); + if (mrv) { + mrv->update_resizing (nb, at_front, _drags->current_pointer_x() - grab_x(), relative); + } } } @@ -1990,7 +1996,10 @@ NoteResizeDrag::finished (GdkEvent*, bool /*movement_occurred*/) for (MidiRegionSelection::iterator r = ms.begin(); r != ms.end(); ++r) { NoteBase* nb = reinterpret_cast (_item->get_data ("notebase")); assert (nb); - (*r)->commit_resizing (nb, at_front, _drags->current_pointer_x() - grab_x(), relative); + MidiRegionView* mrv = dynamic_cast(*r); + if (mrv) { + mrv->commit_resizing (nb, at_front, _drags->current_pointer_x() - grab_x(), relative); + } } } @@ -1999,7 +2008,10 @@ NoteResizeDrag::aborted (bool) { MidiRegionSelection& ms (_editor->get_selection().midi_regions); for (MidiRegionSelection::iterator r = ms.begin(); r != ms.end(); ++r) { - (*r)->abort_resizing (); + MidiRegionView* mrv = dynamic_cast(*r); + if (mrv) { + mrv->abort_resizing (); + } } } diff --git a/gtk2_ardour/editor_ops.cc b/gtk2_ardour/editor_ops.cc index 1f23aa4319..6dbbb4073f 100644 --- a/gtk2_ardour/editor_ops.cc +++ b/gtk2_ardour/editor_ops.cc @@ -4000,8 +4000,10 @@ void Editor::cut_copy_midi (CutCopyOp op) { for (MidiRegionSelection::iterator i = selection->midi_regions.begin(); i != selection->midi_regions.end(); ++i) { - MidiRegionView* mrv = *i; - mrv->cut_copy_clear (op); + MidiRegionView* mrv = dynamic_cast(*i); + if (mrv) { + mrv->cut_copy_clear (op); + } } } diff --git a/gtk2_ardour/midi_selection.cc b/gtk2_ardour/midi_selection.cc index bf9b88899b..f98f696444 100644 --- a/gtk2_ardour/midi_selection.cc +++ b/gtk2_ardour/midi_selection.cc @@ -17,29 +17,19 @@ */ -#include "gtkmm2ext/gui_thread.h" -#include "midi_region_view.h" #include "midi_selection.h" -#include "region_view.h" MidiRegionSelection::MidiRegionSelection () -{ - RegionView::RegionViewGoingAway.connect (_death_connection, MISSING_INVALIDATOR, boost::bind (&MidiRegionSelection::remove_it, this, _1), gui_context()); -} + : RegionSelection () +{} -/** Copy constructor. - * @param other MidiRegionSelection to copy. - */ MidiRegionSelection::MidiRegionSelection (MidiRegionSelection const & other) - : std::list (other) -{ - RegionView::RegionViewGoingAway.connect (_death_connection, MISSING_INVALIDATOR, boost::bind (&MidiRegionSelection::remove_it, this, _1), gui_context()); -} - + : RegionSelection (other) +{} -void -MidiRegionSelection::remove_it (RegionView* rv) +MidiRegionSelection& +MidiRegionSelection::operator= (const MidiRegionSelection& other) { - MidiRegionView* mrv = dynamic_cast (rv); - remove (mrv); + RegionSelection::operator=(other); + return *this; } diff --git a/gtk2_ardour/midi_selection.h b/gtk2_ardour/midi_selection.h index f2c2d3fc60..2aa04356d7 100644 --- a/gtk2_ardour/midi_selection.h +++ b/gtk2_ardour/midi_selection.h @@ -20,22 +20,19 @@ #ifndef __ardour_gtk_midi_selection_h__ #define __ardour_gtk_midi_selection_h__ -#include -#include "pbd/signals.h" +#include "region_selection.h" class MidiRegionView; class MidiCutBuffer; class RegionView; -class MidiRegionSelection : public std::list +class MidiRegionSelection : public RegionSelection { public: MidiRegionSelection (); - MidiRegionSelection (MidiRegionSelection const &); + MidiRegionSelection (const MidiRegionSelection&); -private: - void remove_it (RegionView *); - PBD::ScopedConnection _death_connection; + MidiRegionSelection& operator= (const MidiRegionSelection&); }; struct MidiNoteSelection : std::list {}; diff --git a/gtk2_ardour/region_view.cc b/gtk2_ardour/region_view.cc index d4604b265d..fcdde48487 100644 --- a/gtk2_ardour/region_view.cc +++ b/gtk2_ardour/region_view.cc @@ -225,7 +225,9 @@ RegionView::~RegionView () bool RegionView::canvas_group_event (GdkEvent* event) { - return trackview.editor().canvas_region_view_event (event, group, this); + if (!in_destructor) { + return trackview.editor().canvas_region_view_event (event, group, this); + } } void -- cgit v1.2.3 From a1e4befcca63ec660316d4c80cda090ccae75f48 Mon Sep 17 00:00:00 2001 From: David Robillard Date: Thu, 13 Nov 2014 22:18:15 -0500 Subject: Fix crash after deleting automation region views (#4718). --- gtk2_ardour/automation_region_view.cc | 1 + 1 file changed, 1 insertion(+) (limited to 'gtk2_ardour') diff --git a/gtk2_ardour/automation_region_view.cc b/gtk2_ardour/automation_region_view.cc index 2da15c17c5..e088f7c59f 100644 --- a/gtk2_ardour/automation_region_view.cc +++ b/gtk2_ardour/automation_region_view.cc @@ -60,6 +60,7 @@ AutomationRegionView::AutomationRegionView (ArdourCanvas::Container* AutomationRegionView::~AutomationRegionView () { + RegionViewGoingAway (this); /* EMIT_SIGNAL */ } void -- cgit v1.2.3 From a733a2a4c525fe021c66eb8b2eaccd3356462f75 Mon Sep 17 00:00:00 2001 From: David Robillard Date: Thu, 13 Nov 2014 23:33:11 -0500 Subject: Don't make MIDI regions in note mode completely invisible. This makes for extremely confusing behaviour, particularly when creating new regions. This is still probably too transparent, IMO, but at least isn't totally mysterious. "visible" is a bit of a misnomer in the code, now. --- gtk2_ardour/midi_region_view.cc | 2 +- gtk2_ardour/time_axis_view_item.cc | 24 +++++++++++------------- 2 files changed, 12 insertions(+), 14 deletions(-) (limited to 'gtk2_ardour') diff --git a/gtk2_ardour/midi_region_view.cc b/gtk2_ardour/midi_region_view.cc index 08fab6ff86..d44b54bd8d 100644 --- a/gtk2_ardour/midi_region_view.cc +++ b/gtk2_ardour/midi_region_view.cc @@ -3221,7 +3221,7 @@ MidiRegionView::set_frame_color() } if (!rect_visible) { - f = UINT_RGBA_CHANGE_A (f, 0); + f = UINT_RGBA_CHANGE_A (f, 80); } frame->set_fill_color (f); diff --git a/gtk2_ardour/time_axis_view_item.cc b/gtk2_ardour/time_axis_view_item.cc index c698263d57..5948cebddd 100644 --- a/gtk2_ardour/time_axis_view_item.cc +++ b/gtk2_ardour/time_axis_view_item.cc @@ -719,12 +719,10 @@ uint32_t TimeAxisViewItem::fill_opacity () const { if (!rect_visible) { - /* if the frame/rect is marked as invisible, then the - * fill should be transparent. simplest: set - - * alpha/opacity to zero. - */ - return 0; + /* if the frame/rect is marked as "invisible", then the + fill should be translucent.parent. + */ + return 64; } if (_dragging) { @@ -781,19 +779,19 @@ TimeAxisViewItem::set_frame_color() return; } - frame->set_fill_color (get_fill_color()); + frame->set_fill_color (get_fill_color()); set_frame_gradient (); - if (!_recregion) { + if (!_recregion) { uint32_t f = ARDOUR_UI::config()->get_TimeAxisFrame(); - if (!rect_visible) { + if (!rect_visible) { /* make the frame outline be visible but rather transparent */ - f = UINT_RGBA_CHANGE_A (f, 64); - } + f = UINT_RGBA_CHANGE_A (f, 64); + } - frame->set_outline_color (f); - } + frame->set_outline_color (f); + } } void -- cgit v1.2.3 From 3b23aed5e177959a331bf282a2107c71211a0946 Mon Sep 17 00:00:00 2001 From: David Robillard Date: Fri, 14 Nov 2014 00:31:28 -0500 Subject: Fix error when create-dragging note backwards past start of region (#5934). --- gtk2_ardour/midi_region_view.cc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'gtk2_ardour') diff --git a/gtk2_ardour/midi_region_view.cc b/gtk2_ardour/midi_region_view.cc index d44b54bd8d..40c4af0924 100644 --- a/gtk2_ardour/midi_region_view.cc +++ b/gtk2_ardour/midi_region_view.cc @@ -3520,7 +3520,8 @@ MidiRegionView::update_ghost_note (double x, double y) /* note that this sets the time of the ghost note in beats relative to the start of the source; that is how all note times are stored. */ - _ghost_note->note()->set_time (absolute_frames_to_source_beats (f + _region->position ())); + _ghost_note->note()->set_time ( + std::max(0.0, absolute_frames_to_source_beats (f + _region->position ()))); _ghost_note->note()->set_length (length); _ghost_note->note()->set_note (midi_stream_view()->y_to_note (y)); _ghost_note->note()->set_channel (mtv->get_channel_for_add ()); -- cgit v1.2.3 From 14e53b89c7444dd9d0ce44c8c7e4d390005297a6 Mon Sep 17 00:00:00 2001 From: David Robillard Date: Fri, 14 Nov 2014 00:33:05 -0500 Subject: Fix wonky note length when create-dragging notes backwards. Specifically, when pivoting from forwards to backwards (around the drag start point), the note length was too long. Setting both the start and end x coordinates of the rect every time to the right value does the right thing. --- gtk2_ardour/editor_drag.cc | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) (limited to 'gtk2_ardour') diff --git a/gtk2_ardour/editor_drag.cc b/gtk2_ardour/editor_drag.cc index 1f400310ae..0aaec8d24d 100644 --- a/gtk2_ardour/editor_drag.cc +++ b/gtk2_ardour/editor_drag.cc @@ -5280,12 +5280,10 @@ void NoteCreateDrag::motion (GdkEvent* event, bool) { _note[1] = max ((framepos_t)0, adjusted_current_frame (event) - _region_view->region()->position ()); - double const x = _editor->sample_to_pixel (_note[1]); - if (_note[1] > _note[0]) { - _drag_rect->set_x1 (x); - } else { - _drag_rect->set_x0 (x); - } + double const x0 = _editor->sample_to_pixel (_note[0]); + double const x1 = _editor->sample_to_pixel (_note[1]); + _drag_rect->set_x0 (std::min(x0, x1)); + _drag_rect->set_x1 (std::max(x0, x1)); } void -- cgit v1.2.3 From 5d5d9cb9e262498dc0831dc362fbcb3f92bcdb9f Mon Sep 17 00:00:00 2001 From: David Robillard Date: Fri, 14 Nov 2014 02:28:15 -0500 Subject: Fix various sticky/broken cursor issues. This still isn't quite right, but it's a lot less broken than before, at least. --- gtk2_ardour/editor_canvas.cc | 2 +- gtk2_ardour/editor_mouse.cc | 2 ++ gtk2_ardour/midi_region_view.cc | 29 +++++++++++++++++------------ gtk2_ardour/midi_region_view.h | 1 + gtk2_ardour/note_base.cc | 2 +- 5 files changed, 22 insertions(+), 14 deletions(-) (limited to 'gtk2_ardour') diff --git a/gtk2_ardour/editor_canvas.cc b/gtk2_ardour/editor_canvas.cc index 7eeeba2ed0..482ada3cbc 100644 --- a/gtk2_ardour/editor_canvas.cc +++ b/gtk2_ardour/editor_canvas.cc @@ -1348,7 +1348,7 @@ Editor::choose_canvas_cursor_on_entry (GdkEventCrossing* /*event*/, ItemType typ } if (cursor) { - set_canvas_cursor (cursor, false); + set_canvas_cursor (cursor, true); } } diff --git a/gtk2_ardour/editor_mouse.cc b/gtk2_ardour/editor_mouse.cc index c4e19b15a8..52486a1322 100644 --- a/gtk2_ardour/editor_mouse.cc +++ b/gtk2_ardour/editor_mouse.cc @@ -1813,6 +1813,8 @@ Editor::leave_handler (ArdourCanvas::Item* item, GdkEvent*, ItemType item_type) bool is_start; bool ret = true; + reset_canvas_cursor (); + switch (item_type) { case ControlPointItem: _verbose_cursor->hide (); diff --git a/gtk2_ardour/midi_region_view.cc b/gtk2_ardour/midi_region_view.cc index 40c4af0924..81248c9585 100644 --- a/gtk2_ardour/midi_region_view.cc +++ b/gtk2_ardour/midi_region_view.cc @@ -112,6 +112,7 @@ MidiRegionView::MidiRegionView (ArdourCanvas::Container *parent, RouteTimeAxisVi , _last_event_y (0) , pre_enter_cursor (0) , pre_press_cursor (0) + , pre_note_enter_cursor (0) , _note_player (0) { CANVAS_DEBUG_NAME (_note_group, string_compose ("note group for %1", get_item_name())); @@ -149,6 +150,7 @@ MidiRegionView::MidiRegionView (ArdourCanvas::Container *parent, RouteTimeAxisVi , _last_event_y (0) , pre_enter_cursor (0) , pre_press_cursor (0) + , pre_note_enter_cursor (0) , _note_player (0) { CANVAS_DEBUG_NAME (_note_group, string_compose ("note group for %1", get_item_name())); @@ -195,6 +197,7 @@ MidiRegionView::MidiRegionView (const MidiRegionView& other) , _last_event_y (0) , pre_enter_cursor (0) , pre_press_cursor (0) + , pre_note_enter_cursor (0) , _note_player (0) { init (false); @@ -223,6 +226,7 @@ MidiRegionView::MidiRegionView (const MidiRegionView& other, boost::shared_ptr (&trackview.editor()); editor->set_canvas_cursor(pre_enter_cursor); + pre_enter_cursor = 0; } return false; @@ -456,7 +461,7 @@ MidiRegionView::button_press (GdkEventButton* ev) if (m == MouseObject && Keyboard::modifier_state_contains (ev->state, Keyboard::insert_note_modifier())) { pre_press_cursor = editor->get_canvas_cursor (); editor->set_canvas_cursor (editor->cursors()->midi_pencil); - } + } if (_mouse_state != SelectTouchDragging) { @@ -3116,7 +3121,7 @@ MidiRegionView::note_entered(NoteBase* ev) { Editor* editor = dynamic_cast(&trackview.editor()); - pre_enter_cursor = editor->get_canvas_cursor (); + pre_note_enter_cursor = editor->get_canvas_cursor (); if (_mouse_state == SelectTouchDragging) { note_selected (ev, true); @@ -3136,9 +3141,9 @@ MidiRegionView::note_left (NoteBase*) editor->verbose_cursor()->hide (); - if (pre_enter_cursor) { - editor->set_canvas_cursor (pre_enter_cursor); - pre_enter_cursor = 0; + if (pre_note_enter_cursor) { + editor->set_canvas_cursor (pre_note_enter_cursor); + pre_note_enter_cursor = 0; } } @@ -3190,13 +3195,13 @@ MidiRegionView::note_mouse_position (float x_fraction, float /*y_fraction*/, boo Editing::MouseMode mm = editor->current_mouse_mode(); bool trimmable = (mm == MouseObject || mm == MouseTimeFX || mm == MouseDraw); - if (trimmable && x_fraction > 0.0 && x_fraction < 0.2) { - editor->set_canvas_cursor (editor->cursors()->left_side_trim); - } else if (trimmable && x_fraction >= 0.8 && x_fraction < 1.0) { - editor->set_canvas_cursor (editor->cursors()->right_side_trim); - } else { - if (pre_enter_cursor && can_set_cursor) { - editor->set_canvas_cursor (pre_enter_cursor); + if (can_set_cursor) { + if (trimmable && x_fraction > 0.0 && x_fraction < 0.2) { + editor->set_canvas_cursor (editor->cursors()->left_side_trim); + } else if (trimmable && x_fraction >= 0.8 && x_fraction < 1.0) { + editor->set_canvas_cursor (editor->cursors()->right_side_trim); + } else if (pre_note_enter_cursor) { + editor->set_canvas_cursor (pre_note_enter_cursor); } } } diff --git a/gtk2_ardour/midi_region_view.h b/gtk2_ardour/midi_region_view.h index 3fd6625ce9..65ca7df7ab 100644 --- a/gtk2_ardour/midi_region_view.h +++ b/gtk2_ardour/midi_region_view.h @@ -473,6 +473,7 @@ private: Gdk::Cursor* pre_enter_cursor; Gdk::Cursor* pre_press_cursor; + Gdk::Cursor* pre_note_enter_cursor; NotePlayer* _note_player; diff --git a/gtk2_ardour/note_base.cc b/gtk2_ardour/note_base.cc index 7bc45a4b25..5e5d83e500 100644 --- a/gtk2_ardour/note_base.cc +++ b/gtk2_ardour/note_base.cc @@ -262,8 +262,8 @@ NoteBase::event_handler (GdkEvent* ev) switch (ev->type) { case GDK_ENTER_NOTIFY: - set_mouse_fractions (ev); _region.note_entered (this); + set_mouse_fractions (ev); break; case GDK_LEAVE_NOTIFY: -- cgit v1.2.3 From 6b3a8915f3c50f7220121fcb9202ec20144389c4 Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Fri, 14 Nov 2014 10:47:43 +0100 Subject: add abort() to non-reached code MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This cleans up a lot of false-positives in static analysis and also helps compilers to optimize code paths in general. (tagging the fatal stingstream operator as ‘noreturn’ is far less trivial) --- gtk2_ardour/add_route_dialog.cc | 2 +- gtk2_ardour/audio_streamview.cc | 2 +- gtk2_ardour/editor.cc | 2 +- gtk2_ardour/editor_actions.cc | 8 ++++---- gtk2_ardour/editor_audio_import.cc | 4 ++-- gtk2_ardour/editor_export_audio.cc | 2 +- gtk2_ardour/editor_markers.cc | 34 +++++++++++++++++----------------- gtk2_ardour/editor_mouse.cc | 16 ++++++++-------- gtk2_ardour/editor_ops.cc | 2 +- gtk2_ardour/editor_regions.cc | 2 +- gtk2_ardour/editor_tempodisplay.cc | 8 ++++---- gtk2_ardour/gain_meter.cc | 2 +- gtk2_ardour/latency_gui.cc | 2 +- gtk2_ardour/port_matrix.cc | 2 +- gtk2_ardour/rhythm_ferret.cc | 2 +- gtk2_ardour/route_group_dialog.cc | 2 +- gtk2_ardour/route_time_axis.cc | 6 +++--- gtk2_ardour/selection.cc | 4 ++-- gtk2_ardour/sfdb_ui.cc | 4 ++-- gtk2_ardour/streamview.cc | 4 ++-- gtk2_ardour/time_axis_view.cc | 2 +- gtk2_ardour/time_selection.cc | 2 +- gtk2_ardour/utils.cc | 2 +- libs/ardour/ardour/types.h | 3 +-- libs/ardour/audio_playlist_source.cc | 2 +- libs/ardour/bundle.cc | 2 +- libs/ardour/butler.cc | 4 ++-- libs/ardour/cycle_timer.cc | 6 +++--- libs/ardour/delivery.cc | 6 +++--- libs/ardour/midi_model.cc | 26 +++++++++++++------------- libs/ardour/midi_playlist_source.cc | 6 +++--- libs/ardour/panner_shell.cc | 2 +- libs/ardour/plugin_insert.cc | 4 ++-- libs/ardour/region_factory.cc | 8 ++++---- libs/ardour/send.cc | 2 +- libs/ardour/session.cc | 4 ++-- libs/ardour/session_process.cc | 2 +- libs/ardour/sndfilesource.cc | 4 ++-- libs/ardour/tempo.cc | 12 ++++++------ libs/ardour/track.cc | 2 +- libs/ardour/utils.cc | 14 +++++++------- libs/evoral/evoral/PatchChange.hpp | 3 +-- libs/evoral/src/ControlList.cpp | 2 +- libs/evoral/src/Sequence.cpp | 6 ++---- libs/gtkmm2ext/actions.cc | 2 +- libs/gtkmm2ext/gtk_ui.cc | 2 +- libs/midi++2/mtc.cc | 2 +- libs/pbd/pool.cc | 4 ++-- 48 files changed, 121 insertions(+), 125 deletions(-) (limited to 'gtk2_ardour') diff --git a/gtk2_ardour/add_route_dialog.cc b/gtk2_ardour/add_route_dialog.cc index 94e4369aae..57fd46be73 100644 --- a/gtk2_ardour/add_route_dialog.cc +++ b/gtk2_ardour/add_route_dialog.cc @@ -346,7 +346,7 @@ AddRouteDialog::mode () } else { fatal << string_compose (X_("programming error: unknown track mode in add route dialog combo = %1"), str) << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ } /* keep gcc happy */ return ARDOUR::Normal; diff --git a/gtk2_ardour/audio_streamview.cc b/gtk2_ardour/audio_streamview.cc index 68757c256b..df1820eeeb 100644 --- a/gtk2_ardour/audio_streamview.cc +++ b/gtk2_ardour/audio_streamview.cc @@ -113,7 +113,7 @@ AudioStreamView::create_region_view (boost::shared_ptr r, bool wait_for_ break; default: fatal << string_compose (_("programming error: %1"), "illegal track mode in ::create_region_view()") << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ } diff --git a/gtk2_ardour/editor.cc b/gtk2_ardour/editor.cc index ba4eb09cd1..d5c9aa6fea 100644 --- a/gtk2_ardour/editor.cc +++ b/gtk2_ardour/editor.cc @@ -2631,7 +2631,7 @@ Editor::timecode_snap_to_internal (framepos_t& start, int32_t direction, bool /* break; default: fatal << "Editor::smpte_snap_to_internal() called with non-timecode snap type!" << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ } } diff --git a/gtk2_ardour/editor_actions.cc b/gtk2_ardour/editor_actions.cc index d16105987a..e8125ef593 100644 --- a/gtk2_ardour/editor_actions.cc +++ b/gtk2_ardour/editor_actions.cc @@ -1081,7 +1081,7 @@ Editor::snap_type_action (SnapType type) break; default: fatal << string_compose (_("programming error: %1: %2"), "Editor: impossible snap-to type", (int) type) << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ } act = ActionManager::get_action (X_("Snap"), action); @@ -1477,7 +1477,7 @@ Editor::snap_mode_action (SnapMode mode) break; default: fatal << string_compose (_("programming error: %1: %2"), "Editor: impossible snap mode type", (int) mode) << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ } act = ActionManager::get_action (X_("Editor"), action); @@ -1541,7 +1541,7 @@ Editor::edit_point_action (EditPoint ep) break; default: fatal << string_compose (_("programming error: %1: %2"), "Editor: impossible edit point type", (int) ep) << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ } act = ActionManager::get_action (X_("Editor"), action); @@ -1599,7 +1599,7 @@ Editor::zoom_focus_action (ZoomFocus focus) break; default: fatal << string_compose (_("programming error: %1: %2"), "Editor: impossible focus type", (int) focus) << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ } act = ActionManager::get_action (X_("Zoom"), action); diff --git a/gtk2_ardour/editor_audio_import.cc b/gtk2_ardour/editor_audio_import.cc index e5ac8c6c72..af1d41f91f 100644 --- a/gtk2_ardour/editor_audio_import.cc +++ b/gtk2_ardour/editor_audio_import.cc @@ -314,14 +314,14 @@ Editor::do_import (vector paths, ImportDisposition disposition, ImportMo continue; case 0: fatal << "Updating existing sources should be disabled!" << endmsg; - /* NOTREACHED*/ + abort(); /* NOTREACHED*/ break; case 1: replace = false; break; default: fatal << "Illegal return " << check << " from check_whether_and_how_to_import()!" << endmsg; - /* NOTREACHED*/ + abort(); /* NOTREACHED*/ } /* have to reset this for every file we handle */ diff --git a/gtk2_ardour/editor_export_audio.cc b/gtk2_ardour/editor_export_audio.cc index e40030d671..f92cf07150 100644 --- a/gtk2_ardour/editor_export_audio.cc +++ b/gtk2_ardour/editor_export_audio.cc @@ -90,7 +90,7 @@ Editor::export_range () if ((marker = reinterpret_cast (marker_menu_item->get_data ("marker"))) == 0) { fatal << _("programming error: marker canvas item has no marker object pointer!") << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ } Location* l; diff --git a/gtk2_ardour/editor_markers.cc b/gtk2_ardour/editor_markers.cc index 0900c7fc18..6d07ecc357 100644 --- a/gtk2_ardour/editor_markers.cc +++ b/gtk2_ardour/editor_markers.cc @@ -704,7 +704,7 @@ Editor::remove_marker (ArdourCanvas::Item& item, GdkEvent*) if ((marker = static_cast (item.get_data ("marker"))) == 0) { fatal << _("programming error: marker canvas item has no marker object pointer!") << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ } if (entered_marker == marker) { @@ -791,7 +791,7 @@ Editor::marker_context_menu (GdkEventButton* ev, ArdourCanvas::Item* item) Marker * marker; if ((marker = reinterpret_cast (item->get_data("marker"))) == 0) { fatal << _("programming error: marker canvas item has no marker object pointer!") << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ } bool is_start; @@ -976,7 +976,7 @@ Editor::marker_menu_hide () if ((marker = reinterpret_cast (marker_menu_item->get_data ("marker"))) == 0) { fatal << _("programming error: marker canvas item has no marker object pointer!") << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ } Location* l; @@ -994,7 +994,7 @@ Editor::marker_menu_select_using_range () if ((marker = reinterpret_cast (marker_menu_item->get_data ("marker"))) == 0) { fatal << _("programming error: marker canvas item has no marker object pointer!") << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ } Location* l; @@ -1012,7 +1012,7 @@ Editor::marker_menu_select_all_selectables_using_range () if ((marker = reinterpret_cast (marker_menu_item->get_data ("marker"))) == 0) { fatal << _("programming error: marker canvas item has no marker object pointer!") << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ } Location* l; @@ -1031,7 +1031,7 @@ Editor::marker_menu_separate_regions_using_location () if ((marker = reinterpret_cast (marker_menu_item->get_data ("marker"))) == 0) { fatal << _("programming error: marker canvas item has no marker object pointer!") << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ } Location* l; @@ -1050,7 +1050,7 @@ Editor::marker_menu_play_from () if ((marker = reinterpret_cast (marker_menu_item->get_data ("marker"))) == 0) { fatal << _("programming error: marker canvas item has no marker object pointer!") << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ } Location* l; @@ -1080,7 +1080,7 @@ Editor::marker_menu_set_playhead () if ((marker = reinterpret_cast (marker_menu_item->get_data ("marker"))) == 0) { fatal << _("programming error: marker canvas item has no marker object pointer!") << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ } Location* l; @@ -1111,7 +1111,7 @@ Editor::marker_menu_range_to_next () if ((marker = reinterpret_cast (marker_menu_item->get_data ("marker"))) == 0) { fatal << _("programming error: marker canvas item has no marker object pointer!") << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ } Location* l; @@ -1141,7 +1141,7 @@ Editor::marker_menu_set_from_playhead () if ((marker = reinterpret_cast (marker_menu_item->get_data ("marker"))) == 0) { fatal << _("programming error: marker canvas item has no marker object pointer!") << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ } Location* l; @@ -1169,7 +1169,7 @@ Editor::marker_menu_set_from_selection (bool /*force_regions*/) if ((marker = reinterpret_cast (marker_menu_item->get_data ("marker"))) == 0) { fatal << _("programming error: marker canvas item has no marker object pointer!") << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ } Location* l; @@ -1200,7 +1200,7 @@ Editor::marker_menu_play_range () if ((marker = reinterpret_cast (marker_menu_item->get_data ("marker"))) == 0) { fatal << _("programming error: marker canvas item has no marker object pointer!") << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ } Location* l; @@ -1225,7 +1225,7 @@ Editor::marker_menu_loop_range () if ((marker = reinterpret_cast (marker_menu_item->get_data ("marker"))) == 0) { fatal << _("programming error: marker canvas item has no marker object pointer!") << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ } Location* l; @@ -1276,7 +1276,7 @@ Editor::dynamic_cast_marker_object (void* p, MeterMarker** m, TempoMarker** t) c Marker* marker = reinterpret_cast (p); if (!marker) { fatal << _("programming error: marker canvas item has no marker object pointer!") << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ } *m = dynamic_cast (marker); @@ -1320,7 +1320,7 @@ Editor::toggle_marker_menu_lock () if ((marker = reinterpret_cast (marker_menu_item->get_data ("marker"))) == 0) { fatal << _("programming error: marker canvas item has no marker object pointer!") << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ } Location* loc; @@ -1346,7 +1346,7 @@ Editor::marker_menu_rename () if ((marker = reinterpret_cast (marker_menu_item->get_data ("marker"))) == 0) { fatal << _("programming error: marker canvas item has no marker object pointer!") << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ } @@ -1540,7 +1540,7 @@ Editor::toggle_marker_menu_glue () if ((marker = reinterpret_cast (marker_menu_item->get_data ("marker"))) == 0) { fatal << _("programming error: marker canvas item has no marker object pointer!") << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ } Location* loc; diff --git a/gtk2_ardour/editor_mouse.cc b/gtk2_ardour/editor_mouse.cc index 52486a1322..3ad9f0a54c 100644 --- a/gtk2_ardour/editor_mouse.cc +++ b/gtk2_ardour/editor_mouse.cc @@ -1332,12 +1332,12 @@ Editor::button_release_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemT if ((marker = reinterpret_cast (item->get_data ("marker"))) == 0) { fatal << _("programming error: tempo marker canvas item has no marker object pointer!") << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ } if ((tempo_marker = dynamic_cast (marker)) == 0) { fatal << _("programming error: marker for tempo is not a tempo marker!") << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ } edit_tempo_marker (*tempo_marker); @@ -1350,12 +1350,12 @@ Editor::button_release_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemT if ((marker = reinterpret_cast (item->get_data ("marker"))) == 0) { fatal << _("programming error: tempo marker canvas item has no marker object pointer!") << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ } if ((meter_marker = dynamic_cast (marker)) == 0) { fatal << _("programming error: marker for meter is not a meter marker!") << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ } edit_meter_marker (*meter_marker); break; @@ -1999,7 +1999,7 @@ Editor::can_remove_control_point (ArdourCanvas::Item* item) if ((control_point = reinterpret_cast (item->get_data ("control_point"))) == 0) { fatal << _("programming error: control point canvas item has no control point object pointer!") << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ } AutomationLine& line = control_point->line (); @@ -2024,7 +2024,7 @@ Editor::remove_control_point (ArdourCanvas::Item* item) if ((control_point = reinterpret_cast (item->get_data ("control_point"))) == 0) { fatal << _("programming error: control point canvas item has no control point object pointer!") << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ } control_point->line().remove_point (*control_point); @@ -2037,7 +2037,7 @@ Editor::edit_control_point (ArdourCanvas::Item* item) if (p == 0) { fatal << _("programming error: control point canvas item has no control point object pointer!") << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ } ControlPointDialog d (p); @@ -2242,7 +2242,7 @@ Editor::hide_marker (ArdourCanvas::Item* item, GdkEvent* /*event*/) if ((marker = static_cast (item->get_data ("marker"))) == 0) { fatal << _("programming error: marker canvas item has no marker object pointer!") << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ } Location* location = find_location_from_marker (marker, is_start); diff --git a/gtk2_ardour/editor_ops.cc b/gtk2_ardour/editor_ops.cc index 6dbbb4073f..b8e13bc196 100644 --- a/gtk2_ardour/editor_ops.cc +++ b/gtk2_ardour/editor_ops.cc @@ -646,7 +646,7 @@ Editor::build_region_boundary_cache () break; default: fatal << string_compose (_("build_region_boundary_cache called with snap_type = %1"), _snap_type) << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ return; } diff --git a/gtk2_ardour/editor_regions.cc b/gtk2_ardour/editor_regions.cc index 886d5e1209..78c45c7d8d 100644 --- a/gtk2_ardour/editor_regions.cc +++ b/gtk2_ardour/editor_regions.cc @@ -1560,7 +1560,7 @@ EditorRegions::sort_type_action (Editing::RegionListSortType t) const break; default: fatal << string_compose (_("programming error: %1: %2"), "EditorRegions: impossible sort type", (int) t) << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ } RefPtr act = ActionManager::get_action (X_("RegionList"), action); diff --git a/gtk2_ardour/editor_tempodisplay.cc b/gtk2_ardour/editor_tempodisplay.cc index fec380ee35..daf36d2d72 100644 --- a/gtk2_ardour/editor_tempodisplay.cc +++ b/gtk2_ardour/editor_tempodisplay.cc @@ -271,12 +271,12 @@ Editor::remove_tempo_marker (ArdourCanvas::Item* item) if ((marker = reinterpret_cast (item->get_data ("marker"))) == 0) { fatal << _("programming error: tempo marker canvas item has no marker object pointer!") << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ } if ((tempo_marker = dynamic_cast (marker)) == 0) { fatal << _("programming error: marker for tempo is not a tempo marker!") << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ } if (tempo_marker->tempo().movable()) { @@ -375,12 +375,12 @@ Editor::remove_meter_marker (ArdourCanvas::Item* item) if ((marker = reinterpret_cast (item->get_data ("marker"))) == 0) { fatal << _("programming error: meter marker canvas item has no marker object pointer!") << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ } if ((meter_marker = dynamic_cast (marker)) == 0) { fatal << _("programming error: marker for meter is not a meter marker!") << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ } if (meter_marker->meter().movable()) { diff --git a/gtk2_ardour/gain_meter.cc b/gtk2_ardour/gain_meter.cc index daba2e77d4..7b7ad33f9a 100644 --- a/gtk2_ardour/gain_meter.cc +++ b/gtk2_ardour/gain_meter.cc @@ -610,7 +610,7 @@ next_meter_point (MeterPoint mp) break; } - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ return MeterInput; } diff --git a/gtk2_ardour/latency_gui.cc b/gtk2_ardour/latency_gui.cc index 703e7dd4ab..d21a055d9e 100644 --- a/gtk2_ardour/latency_gui.cc +++ b/gtk2_ardour/latency_gui.cc @@ -148,7 +148,7 @@ LatencyGUI::change_latency_from_button (int dir) } else { fatal << string_compose (_("programming error: %1 (%2)"), X_("illegal string in latency GUI units combo"), unitstr) << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ } if (dir > 0) { diff --git a/gtk2_ardour/port_matrix.cc b/gtk2_ardour/port_matrix.cc index bf9da544e6..b3b5a91ed3 100644 --- a/gtk2_ardour/port_matrix.cc +++ b/gtk2_ardour/port_matrix.cc @@ -1139,7 +1139,7 @@ PortMatrix::get_association (PortMatrixNode node) const } - /* NOTREACHED */ + abort(); /* NOTREACHED */ return PortMatrixNode::NOT_ASSOCIATED; } diff --git a/gtk2_ardour/rhythm_ferret.cc b/gtk2_ardour/rhythm_ferret.cc index ec5ebc93a1..f159331018 100644 --- a/gtk2_ardour/rhythm_ferret.cc +++ b/gtk2_ardour/rhythm_ferret.cc @@ -273,7 +273,7 @@ RhythmFerret::get_note_onset_function () fatal << string_compose (_("programming error: %1 (%2)"), X_("illegal note onset function string"), txt) << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ return -1; } diff --git a/gtk2_ardour/route_group_dialog.cc b/gtk2_ardour/route_group_dialog.cc index 3addc1c598..e7e48f777e 100644 --- a/gtk2_ardour/route_group_dialog.cc +++ b/gtk2_ardour/route_group_dialog.cc @@ -207,7 +207,7 @@ RouteGroupDialog::do_run () msg.run (); } - /* NOTREACHED */ + abort(); /* NOTREACHED */ return false; } diff --git a/gtk2_ardour/route_time_axis.cc b/gtk2_ardour/route_time_axis.cc index 31c2eb1712..c4d49e40b9 100644 --- a/gtk2_ardour/route_time_axis.cc +++ b/gtk2_ardour/route_time_axis.cc @@ -2015,7 +2015,7 @@ RouteTimeAxisView::add_processor_automation_curve (boost::shared_ptr << string_compose (X_("processor automation curve for %1:%2/%3/%4 not registered with track!"), processor->name(), what.type(), (int) what.channel(), what.id() ) << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ return; } @@ -2481,7 +2481,7 @@ RouteTimeAxisView::add_underlay (StreamView* v, bool /*update_xml*/) if (find(_underlay_streams.begin(), _underlay_streams.end(), v) == _underlay_streams.end()) { if (find(other._underlay_mirrors.begin(), other._underlay_mirrors.end(), this) != other._underlay_mirrors.end()) { fatal << _("programming error: underlay reference pointer pairs are inconsistent!") << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ } _underlay_streams.push_back(v); @@ -2518,7 +2518,7 @@ RouteTimeAxisView::remove_underlay (StreamView* v) if (gm == other._underlay_mirrors.end()) { fatal << _("programming error: underlay reference pointer pairs are inconsistent!") << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ } v->foreach_regionview(sigc::mem_fun(*this, &RouteTimeAxisView::remove_ghost)); diff --git a/gtk2_ardour/selection.cc b/gtk2_ardour/selection.cc index 507245eb3d..1bdc0fe8b0 100644 --- a/gtk2_ardour/selection.cc +++ b/gtk2_ardour/selection.cc @@ -1002,7 +1002,7 @@ Selection::toggle (list const & selectables) fatal << _("programming error: ") << X_("unknown selectable type passed to Selection::toggle()") << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ } } @@ -1056,7 +1056,7 @@ Selection::add (list const & selectables) fatal << _("programming error: ") << X_("unknown selectable type passed to Selection::add()") << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ } } diff --git a/gtk2_ardour/sfdb_ui.cc b/gtk2_ardour/sfdb_ui.cc index da29eb75a8..80ee165a84 100644 --- a/gtk2_ardour/sfdb_ui.cc +++ b/gtk2_ardour/sfdb_ui.cc @@ -113,7 +113,7 @@ importmode2string (ImportMode mode) case ImportAsTapeTrack: return _("as new tape tracks"); } - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ return _("as new tracks"); } @@ -1891,7 +1891,7 @@ SoundFileOmega::get_channel_disposition () const if (x == disposition_map.end()) { fatal << string_compose (_("programming error: %1 (%2)"), "unknown string for import disposition", str) << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ } return x->second; diff --git a/gtk2_ardour/streamview.cc b/gtk2_ardour/streamview.cc index ed759f3a7e..73e150549f 100644 --- a/gtk2_ardour/streamview.cc +++ b/gtk2_ardour/streamview.cc @@ -431,7 +431,7 @@ StreamView::update_rec_box () default: fatal << string_compose (_("programming error: %1"), "illegal track mode") << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ return; } @@ -575,7 +575,7 @@ StreamView::child_height () const return height / (_layers * 2 + 1); } - /* NOTREACHED */ + abort(); /* NOTREACHED */ return height; } diff --git a/gtk2_ardour/time_axis_view.cc b/gtk2_ardour/time_axis_view.cc index af8699c001..58969a97f5 100644 --- a/gtk2_ardour/time_axis_view.cc +++ b/gtk2_ardour/time_axis_view.cc @@ -1312,7 +1312,7 @@ TimeAxisView::preset_height (Height h) return button_height + extra_height; } - /* NOTREACHED */ + abort(); /* NOTREACHED */ return 0; } diff --git a/gtk2_ardour/time_selection.cc b/gtk2_ardour/time_selection.cc index a0f33e8c99..8545a345eb 100644 --- a/gtk2_ardour/time_selection.cc +++ b/gtk2_ardour/time_selection.cc @@ -38,7 +38,7 @@ TimeSelection::operator[] (uint32_t which) } } fatal << string_compose (_("programming error: request for non-existent audio range (%1)!"), which) << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ return *(new AudioRange(0,0,0)); /* keep the compiler happy; never called */ } diff --git a/gtk2_ardour/utils.cc b/gtk2_ardour/utils.cc index 171fc631d5..0f61656033 100644 --- a/gtk2_ardour/utils.cc +++ b/gtk2_ardour/utils.cc @@ -708,7 +708,7 @@ ARDOUR_UI_UTILS::get_icon_path (const char* cname, string icon_set, bool is_imag if (!find_file (def, name, data_file_path)) { fatal << string_compose (_("cannot find icon image for %1 using %2"), name, spath.to_string()) << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ } } diff --git a/libs/ardour/ardour/types.h b/libs/ardour/ardour/types.h index 7444a54a7c..165afd0dd9 100644 --- a/libs/ardour/ardour/types.h +++ b/libs/ardour/ardour/types.h @@ -267,8 +267,7 @@ namespace ARDOUR { return seconds != 0; } - /* NOTREACHED */ - assert (false); + abort(); /* NOTREACHED */ return false; } }; diff --git a/libs/ardour/audio_playlist_source.cc b/libs/ardour/audio_playlist_source.cc index 5e8dc09d45..5f71d6246f 100644 --- a/libs/ardour/audio_playlist_source.cc +++ b/libs/ardour/audio_playlist_source.cc @@ -169,7 +169,7 @@ framecnt_t AudioPlaylistSource::write_unlocked (Sample *, framecnt_t) { fatal << string_compose (_("programming error: %1"), "AudioPlaylistSource::write() called - should be impossible") << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ return 0; } diff --git a/libs/ardour/bundle.cc b/libs/ardour/bundle.cc index 834a98d347..7e50807c6e 100644 --- a/libs/ardour/bundle.cc +++ b/libs/ardour/bundle.cc @@ -591,7 +591,7 @@ Bundle::type_channel_to_overall (DataType t, uint32_t c) const ++o; } - /* NOTREACHED */ + abort(); /* NOTREACHED */ return -1; } diff --git a/libs/ardour/butler.cc b/libs/ardour/butler.cc index 327665441e..9bc232007b 100644 --- a/libs/ardour/butler.cc +++ b/libs/ardour/butler.cc @@ -202,7 +202,7 @@ Butler::dequeue_request (Request::Type& r) return false; } else { fatal << _("Error reading from butler request pipe") << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ } #else r = (Request::Type) m_request_state.get(); @@ -242,7 +242,7 @@ Butler::thread_work () case Request::Quit: return 0; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ break; default: diff --git a/libs/ardour/cycle_timer.cc b/libs/ardour/cycle_timer.cc index bb4f3181e0..84dafd00cc 100644 --- a/libs/ardour/cycle_timer.cc +++ b/libs/ardour/cycle_timer.cc @@ -38,7 +38,7 @@ get_mhz() if ((f = fopen("/proc/cpuinfo", "r")) == 0) { fatal << _("CycleTimer::get_mhz(): can't open /proc/cpuinfo") << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ return 0.0f; } @@ -50,7 +50,7 @@ get_mhz() if (fgets (buf, sizeof(buf), f) == 0) { fatal << _("CycleTimer::get_mhz(): cannot locate cpu MHz in /proc/cpuinfo") << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ return 0.0f; } @@ -73,7 +73,7 @@ get_mhz() } fatal << _("cannot locate cpu MHz in /proc/cpuinfo") << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ return 0.0f; } diff --git a/libs/ardour/delivery.cc b/libs/ardour/delivery.cc index 30f7ef63fa..f7d679d3ba 100644 --- a/libs/ardour/delivery.cc +++ b/libs/ardour/delivery.cc @@ -148,7 +148,7 @@ Delivery::can_support_io_configuration (const ChanCount& in, ChanCount& out) } } else { fatal << "programming error: this should never be reached" << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ } @@ -169,7 +169,7 @@ Delivery::can_support_io_configuration (const ChanCount& in, ChanCount& out) } } else { fatal << "programming error: this should never be reached" << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ } } else { @@ -210,7 +210,7 @@ Delivery::configure_io (ChanCount in, ChanCount out) if (_input->n_ports() != in) { if (_input->n_ports() != ChanCount::ZERO) { fatal << _name << " programming error: configure_io called with " << in << " and " << out << " with " << _input->n_ports() << " input ports" << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ } else { /* I/O not yet configured */ } diff --git a/libs/ardour/midi_model.cc b/libs/ardour/midi_model.cc index ef9544589d..259a04bc0f 100644 --- a/libs/ardour/midi_model.cc +++ b/libs/ardour/midi_model.cc @@ -195,11 +195,11 @@ MidiModel::NoteDiffCommand::change (const NotePtr note, Property prop, case StartTime: fatal << "MidiModel::DiffCommand::change() with integer argument called for start time" << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ break; case Length: fatal << "MidiModel::DiffCommand::change() with integer argument called for length" << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ break; } @@ -627,7 +627,7 @@ MidiModel::NoteDiffCommand::unmarshal_change (XMLNode *xml_change) change.property = (Property) string_2_enum (prop->value(), change.property); } else { fatal << "!!!" << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ } if ((prop = xml_change->property ("id")) == 0) { @@ -648,7 +648,7 @@ MidiModel::NoteDiffCommand::unmarshal_change (XMLNode *xml_change) } } else { fatal << "!!!" << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ } if ((prop = xml_change->property ("new")) != 0) { @@ -662,7 +662,7 @@ MidiModel::NoteDiffCommand::unmarshal_change (XMLNode *xml_change) } } else { fatal << "!!!" << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ } /* we must point at the instance of the note that is actually in the model. @@ -899,7 +899,7 @@ MidiModel::SysExDiffCommand::unmarshal_change (XMLNode *xml_change) change.property = (Property) string_2_enum (prop->value(), change.property); } else { fatal << "!!!" << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ } if ((prop = xml_change->property ("id")) == 0) { @@ -914,7 +914,7 @@ MidiModel::SysExDiffCommand::unmarshal_change (XMLNode *xml_change) old_str >> change.old_time; } else { fatal << "!!!" << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ } if ((prop = xml_change->property ("new")) != 0) { @@ -922,7 +922,7 @@ MidiModel::SysExDiffCommand::unmarshal_change (XMLNode *xml_change) new_str >> change.new_time; } else { fatal << "!!!" << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ } /* we must point at the instance of the sysex that is actually in the model. @@ -1728,7 +1728,7 @@ MidiModel::resolve_overlaps_unlocked (const NotePtr note, void* arg) return -1; /* do not add the new note */ break; default: - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ /* stupid gcc */ break; } @@ -1764,7 +1764,7 @@ MidiModel::resolve_overlaps_unlocked (const NotePtr note, void* arg) note_length = min (note_length, (*i)->end_time() - note->time()); break; default: - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ /* stupid gcc */ break; } @@ -1783,7 +1783,7 @@ MidiModel::resolve_overlaps_unlocked (const NotePtr note, void* arg) /* cannot add in this case */ return -1; default: - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ /* stupid gcc */ break; } @@ -1801,14 +1801,14 @@ MidiModel::resolve_overlaps_unlocked (const NotePtr note, void* arg) to_be_deleted.insert (*i); break; default: - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ /* stupid gcc */ break; } break; default: - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ /* stupid gcc */ break; } diff --git a/libs/ardour/midi_playlist_source.cc b/libs/ardour/midi_playlist_source.cc index 68e0a478df..cd5362c3da 100644 --- a/libs/ardour/midi_playlist_source.cc +++ b/libs/ardour/midi_playlist_source.cc @@ -142,7 +142,7 @@ MidiPlaylistSource::write_unlocked (MidiRingBuffer&, framecnt_t) { fatal << string_compose (_("programming error: %1"), "MidiPlaylistSource::write_unlocked() called - should be impossible") << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ return 0; } @@ -150,14 +150,14 @@ void MidiPlaylistSource::append_event_unlocked_beats(const Evoral::Event& /*ev*/) { fatal << string_compose (_("programming error: %1"), "MidiPlaylistSource::append_event_unlocked_beats() called - should be impossible") << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ } void MidiPlaylistSource::append_event_unlocked_frames(const Evoral::Event& /* ev */, framepos_t /*source_start*/) { fatal << string_compose (_("programming error: %1"), "MidiPlaylistSource::append_event_unlocked_frames() called - should be impossible") << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ } void diff --git a/libs/ardour/panner_shell.cc b/libs/ardour/panner_shell.cc index a4a9342816..de0780cdba 100644 --- a/libs/ardour/panner_shell.cc +++ b/libs/ardour/panner_shell.cc @@ -120,7 +120,7 @@ PannerShell::configure_io (ChanCount in, ChanCount out) PannerInfo* pi = PannerManager::instance().select_panner (in, out, _user_selected_panner_uri); if (!pi) { fatal << _("No panner found: check that panners are being discovered correctly during startup.") << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ } DEBUG_TRACE (DEBUG::Panning, string_compose (_("select panner: %1\n"), pi->descriptor.name.c_str())); diff --git a/libs/ardour/plugin_insert.cc b/libs/ardour/plugin_insert.cc index 26b6aacd2a..0c76b65c84 100644 --- a/libs/ardour/plugin_insert.cc +++ b/libs/ardour/plugin_insert.cc @@ -600,7 +600,7 @@ PluginInsert::default_parameter_value (const Evoral::Parameter& param) if (_plugins.empty()) { fatal << _("programming error: ") << X_("PluginInsert::default_parameter_value() called with no plugin") << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ } return _plugins[0]->default_value (param.id()); @@ -646,7 +646,7 @@ PluginInsert::plugin_factory (boost::shared_ptr other) fatal << string_compose (_("programming error: %1"), X_("unknown plugin type in PluginInsert::plugin_factory")) << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ return boost::shared_ptr ((Plugin*) 0); } diff --git a/libs/ardour/region_factory.cc b/libs/ardour/region_factory.cc index 44f8c34ddd..9654a4b3de 100644 --- a/libs/ardour/region_factory.cc +++ b/libs/ardour/region_factory.cc @@ -66,7 +66,7 @@ RegionFactory::create (boost::shared_ptr region, bool announce) } else { fatal << _("programming error: RegionFactory::create() called with unknown Region type") << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ } if (ret) { @@ -108,7 +108,7 @@ RegionFactory::create (boost::shared_ptr region, const PropertyList& pli } else { fatal << _("programming error: RegionFactory::create() called with unknown Region type") << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ return boost::shared_ptr(); } @@ -149,7 +149,7 @@ RegionFactory::create (boost::shared_ptr region, frameoffset_t offset, c } else { fatal << _("programming error: RegionFactory::create() called with unknown Region type") << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ return boost::shared_ptr(); } @@ -191,7 +191,7 @@ RegionFactory::create (boost::shared_ptr region, const SourceList& srcs, } else { fatal << _("programming error: RegionFactory::create() called with unknown Region type") << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ } if (ret) { diff --git a/libs/ardour/send.cc b/libs/ardour/send.cc index 87aadf4193..9d5fd619c3 100644 --- a/libs/ardour/send.cc +++ b/libs/ardour/send.cc @@ -65,7 +65,7 @@ Send::name_and_id_new_send (Session& s, Role r, uint32_t& bitslot, bool ignore_b return string_compose (_("send %1"), (bitslot = s.next_send_id ()) + 1); default: fatal << string_compose (_("programming error: send created using role %1"), enum_2_string (r)) << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ return string(); } diff --git a/libs/ardour/session.cc b/libs/ardour/session.cc index 6807bed812..2878bb8014 100644 --- a/libs/ardour/session.cc +++ b/libs/ardour/session.cc @@ -2380,7 +2380,7 @@ Session::new_route_from_template (uint32_t how_many, const std::string& template /* generate a new name by adding a number to the end of the template name */ if (!find_route_name (route_name.c_str(), ++number, name, sizeof(name), true)) { fatal << _("Session: UINT_MAX routes? impossible!") << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ } } @@ -4041,7 +4041,7 @@ Session::available_capture_duration () fatal << string_compose (_("programming error: %1"), X_("illegal native file data format")) << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ } double scale = 4096.0 / sample_bytes_on_disk; diff --git a/libs/ardour/session_process.cc b/libs/ardour/session_process.cc index 497fbd4d2e..260c6c319a 100644 --- a/libs/ardour/session_process.cc +++ b/libs/ardour/session_process.cc @@ -1169,7 +1169,7 @@ Session::process_event (SessionEvent* ev) default: fatal << string_compose(_("Programming error: illegal event type in process_event (%1)"), ev->type) << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ break; }; diff --git a/libs/ardour/sndfilesource.cc b/libs/ardour/sndfilesource.cc index 58fbab233b..5f1b31c640 100644 --- a/libs/ardour/sndfilesource.cc +++ b/libs/ardour/sndfilesource.cc @@ -152,7 +152,7 @@ SndFileSource::SndFileSource (Session& s, const string& path, const string& orig default: fatal << string_compose (_("programming error: %1"), X_("unsupported audio header format requested")) << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ break; } @@ -459,7 +459,7 @@ SndFileSource::nondestructive_write_unlocked (Sample *data, framecnt_t cnt) if (_info.channels != 1) { fatal << string_compose (_("programming error: %1 %2"), X_("SndFileSource::write called on non-mono file"), _path) << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ return 0; } diff --git a/libs/ardour/tempo.cc b/libs/ardour/tempo.cc index 621d1e2c74..5e50e8e02b 100644 --- a/libs/ardour/tempo.cc +++ b/libs/ardour/tempo.cc @@ -677,7 +677,7 @@ TempoMap::first_meter () const } fatal << _("programming error: no tempo section in tempo map!") << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ return *m; } @@ -693,7 +693,7 @@ TempoMap::first_tempo () const } fatal << _("programming error: no tempo section in tempo map!") << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ return *t; } @@ -807,7 +807,7 @@ TempoMap::recompute_map (bool reassign_tempo_bbt, framepos_t end) rmeter = ms; } else { fatal << _("programming error: unhandled MetricSection type") << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ } } } @@ -1489,8 +1489,7 @@ TempoMap::round_to_type (framepos_t frame, int dir, BBTPointType type) break; } - /* NOTREACHED */ - assert (false); + abort(); /* NOTREACHED */ return 0; } @@ -1532,6 +1531,7 @@ TempoMap::tempo_section_at (framepos_t frame) const if (prev == 0) { fatal << endmsg; + abort(); /*NOTREACHED*/ } return *prev; @@ -1785,7 +1785,7 @@ TempoMap::insert_time (framepos_t where, framecnt_t amount) // cerr << "NEW METER, frame = " << (*i)->frame() << " start = " << (*i)->start() <::get_notes_by_pitch (Notes& n, NoteOperator op, uint8_t val, int default: //fatal << string_compose (_("programming error: %1 %2", X_("get_notes_by_pitch() called with illegal operator"), op)) << endmsg; - abort (); - /* NOTREACHED*/ + abort(); /* NOTREACHED*/ } } } @@ -1392,8 +1391,7 @@ Sequence