diff --git a/gtk2_ardour/ardour_ui.cc b/gtk2_ardour/ardour_ui.cc index a8d883422b..cde9d0d9ee 100644 --- a/gtk2_ardour/ardour_ui.cc +++ b/gtk2_ardour/ardour_ui.cc @@ -3393,6 +3393,7 @@ ARDOUR_UI::add_route (Gtk::Window* float_window) setup_order_hint(); string template_path = add_route_dialog->track_template(); + DisplaySuspender ds; if (!template_path.empty()) { if (add_route_dialog->name_template_is_default()) { diff --git a/gtk2_ardour/editor.cc b/gtk2_ardour/editor.cc index e3d1bc0398..ea586405d8 100644 --- a/gtk2_ardour/editor.cc +++ b/gtk2_ardour/editor.cc @@ -4168,8 +4168,7 @@ void Editor::use_visual_state (VisualState& vs) { PBD::Unwinder nsv (no_save_visual, true); - - _routes->suspend_redisplay (); + DisplaySuspender ds; vertical_adjustment.set_value (vs.y_position); @@ -4185,7 +4184,6 @@ Editor::use_visual_state (VisualState& vs) } _routes->update_visibility (); - _routes->resume_redisplay (); } /** This is the core function that controls the zoom level of the canvas. It is called diff --git a/gtk2_ardour/editor_ops.cc b/gtk2_ardour/editor_ops.cc index aa386e6340..4882ac1fc3 100644 --- a/gtk2_ardour/editor_ops.cc +++ b/gtk2_ardour/editor_ops.cc @@ -1402,7 +1402,7 @@ Editor::scroll_up_one_track () void Editor::tav_zoom_step (bool coarser) { - _routes->suspend_redisplay (); + DisplaySuspender ds; TrackViewList* ts; @@ -1416,14 +1416,12 @@ Editor::tav_zoom_step (bool coarser) TimeAxisView *tv = (static_cast(*i)); tv->step_height (coarser); } - - _routes->resume_redisplay (); } void Editor::tav_zoom_smooth (bool coarser, bool force_all) { - _routes->suspend_redisplay (); + DisplaySuspender ds; TrackViewList* ts; @@ -1448,8 +1446,6 @@ Editor::tav_zoom_smooth (bool coarser, bool force_all) tv->set_height (h + 5); } } - - _routes->resume_redisplay (); } bool @@ -1709,7 +1705,7 @@ Editor::temporal_zoom_region (bool both_axes) /* hide irrelevant tracks */ - _routes->suspend_redisplay (); + DisplaySuspender ds; for (TrackViewList::iterator i = track_views.begin(); i != track_views.end(); ++i) { if (find (tracks.begin(), tracks.end(), (*i)) == tracks.end()) { @@ -1717,8 +1713,6 @@ Editor::temporal_zoom_region (bool both_axes) } } - _routes->resume_redisplay (); - vertical_adjustment.set_value (0.0); } diff --git a/gtk2_ardour/editor_routes.cc b/gtk2_ardour/editor_routes.cc index 605f90486c..025633b090 100644 --- a/gtk2_ardour/editor_routes.cc +++ b/gtk2_ardour/editor_routes.cc @@ -562,15 +562,8 @@ EditorRoutes::row_deleted (Gtk::TreeModel::Path const &) DEBUG_TRACE (DEBUG::OrderKeys, "editor routes treeview row deleted\n"); - if (_route_deletion_in_progress) { - suspend_redisplay (); - } - + DisplaySuspender ds; sync_order_keys_from_treeview (); - - if (_route_deletion_in_progress) { - resume_redisplay (); - } } void @@ -591,6 +584,7 @@ EditorRoutes::visible_changed (std::string const & path) return; } + DisplaySuspender ds; TreeIter iter; if ((iter = _model->get_iter (path))) { @@ -639,7 +633,7 @@ EditorRoutes::routes_added (list routes) _editor->selection->tracks.clear(); } - suspend_redisplay (); + DisplaySuspender ds; _display.set_model (Glib::RefPtr()); @@ -708,7 +702,6 @@ EditorRoutes::routes_added (list routes) update_input_active_display (); update_active_display (); - resume_redisplay (); _display.set_model (_model); /* now update route order keys from the treeview/track display order */ @@ -803,7 +796,7 @@ EditorRoutes::update_visibility () TreeModel::Children rows = _model->children(); TreeModel::Children::iterator i; - suspend_redisplay (); + DisplaySuspender ds (); for (i = rows.begin(); i != rows.end(); ++i) { TimeAxisView *tv = (*i)[_columns.tv]; @@ -814,8 +807,6 @@ EditorRoutes::update_visibility () */ sync_order_keys_from_treeview (); - - resume_redisplay (); } void @@ -1033,7 +1024,7 @@ EditorRoutes::hide_all_tracks (bool /*with_select*/) TreeModel::Children rows = _model->children(); TreeModel::Children::iterator i; - suspend_redisplay (); + DisplaySuspender ds; for (i = rows.begin(); i != rows.end(); ++i) { @@ -1046,8 +1037,6 @@ EditorRoutes::hide_all_tracks (bool /*with_select*/) row[_columns.visible] = false; } - - resume_redisplay (); } void @@ -1056,7 +1045,7 @@ EditorRoutes::set_all_tracks_visibility (bool yn) TreeModel::Children rows = _model->children(); TreeModel::Children::iterator i; - suspend_redisplay (); + DisplaySuspender ds; for (i = rows.begin(); i != rows.end(); ++i) { @@ -1075,8 +1064,6 @@ EditorRoutes::set_all_tracks_visibility (bool yn) */ sync_order_keys_from_treeview (); - - resume_redisplay (); } void @@ -1085,7 +1072,7 @@ EditorRoutes::set_all_audio_midi_visibility (int tracks, bool yn) TreeModel::Children rows = _model->children(); TreeModel::Children::iterator i; - suspend_redisplay (); + DisplaySuspender ds; for (i = rows.begin(); i != rows.end(); ++i) { @@ -1137,8 +1124,6 @@ EditorRoutes::set_all_audio_midi_visibility (int tracks, bool yn) */ sync_order_keys_from_treeview (); - - resume_redisplay (); } void @@ -1383,11 +1368,10 @@ struct EditorOrderRouteSorter { void EditorRoutes::initial_display () { - suspend_redisplay (); + DisplaySuspender ds; _model->clear (); if (!_session) { - resume_redisplay (); return; } @@ -1414,8 +1398,6 @@ EditorRoutes::initial_display () _editor->add_routes (r); } - - resume_redisplay (); } void @@ -1724,14 +1706,11 @@ EditorRoutes::show_tracks_with_regions_at_playhead () } } - suspend_redisplay (); + DisplaySuspender ds; TreeModel::Children rows = _model->children (); for (TreeModel::Children::iterator i = rows.begin(); i != rows.end(); ++i) { TimeAxisView* tv = (*i)[_columns.tv]; (*i)[_columns.visible] = (show.find (tv) != show.end()); } - - resume_redisplay (); } - diff --git a/gtk2_ardour/editor_routes.h b/gtk2_ardour/editor_routes.h index dea8da6cc0..21a92fc423 100644 --- a/gtk2_ardour/editor_routes.h +++ b/gtk2_ardour/editor_routes.h @@ -42,10 +42,6 @@ public: _no_redisplay = true; } - void allow_redisplay () { - _no_redisplay = false; - } - void resume_redisplay () { _no_redisplay = false; redisplay (); diff --git a/gtk2_ardour/route_ui.cc b/gtk2_ardour/route_ui.cc index 529842d02d..01b2182e62 100644 --- a/gtk2_ardour/route_ui.cc +++ b/gtk2_ardour/route_ui.cc @@ -349,6 +349,7 @@ RouteUI::mute_press (GdkEventButton* ev) _mute_release->routes = copy; } + DisplaySuspender ds; _session->set_mute (copy, !_route->muted()); } else if (Keyboard::modifier_state_equals (ev->state, Keyboard::PrimaryModifier)) { @@ -373,6 +374,7 @@ RouteUI::mute_press (GdkEventButton* ev) rl->push_back (_route); } + DisplaySuspender ds; _session->set_mute (rl, !_route->muted(), Session::rt_cleanup, true); } @@ -403,6 +405,7 @@ RouteUI::mute_release (GdkEventButton*) { if (!_i_am_the_modifier) { if (_mute_release){ + DisplaySuspender ds; _session->set_mute (_mute_release->routes, _mute_release->active, Session::rt_cleanup, true); delete _mute_release; _mute_release = 0; @@ -461,6 +464,7 @@ RouteUI::solo_press(GdkEventButton* ev) _solo_release->routes = _session->get_routes (); } + DisplaySuspender ds; if (Config->get_solo_control_is_listen_control()) { _session->set_listen (_session->get_routes(), !_route->listening_via_monitor(), Session::rt_cleanup, true); } else { @@ -488,6 +492,7 @@ RouteUI::solo_press(GdkEventButton* ev) if (Config->get_solo_control_is_listen_control()) { /* ??? we need a just_one_listen() method */ } else { + DisplaySuspender ds; _session->set_just_one_solo (_route, true); } @@ -525,6 +530,7 @@ RouteUI::solo_press(GdkEventButton* ev) rl->push_back (_route); } + DisplaySuspender ds; if (Config->get_solo_control_is_listen_control()) { _session->set_listen (rl, !_route->listening_via_monitor(), Session::rt_cleanup, true); } else { @@ -543,6 +549,7 @@ RouteUI::solo_press(GdkEventButton* ev) _solo_release->routes = rl; } + DisplaySuspender ds; if (Config->get_solo_control_is_listen_control()) { _session->set_listen (rl, !_route->listening_via_monitor()); } else { @@ -566,11 +573,12 @@ RouteUI::solo_release (GdkEventButton*) if (_solo_release->exclusive) { } else { - if (Config->get_solo_control_is_listen_control()) { - _session->set_listen (_solo_release->routes, _solo_release->active, Session::rt_cleanup, true); - } else { - _session->set_solo (_solo_release->routes, _solo_release->active, Session::rt_cleanup, true); - } + DisplaySuspender ds; + if (Config->get_solo_control_is_listen_control()) { + _session->set_listen (_solo_release->routes, _solo_release->active, Session::rt_cleanup, true); + } else { + _session->set_solo (_solo_release->routes, _solo_release->active, Session::rt_cleanup, true); + } } delete _solo_release; @@ -613,6 +621,7 @@ RouteUI::rec_enable_press(GdkEventButton* ev) } else if (Keyboard::modifier_state_equals (ev->state, Keyboard::ModifierMask (Keyboard::PrimaryModifier|Keyboard::TertiaryModifier))) { + DisplaySuspender ds; _session->set_record_enabled (_session->get_routes(), !rec_enable_button->active_state()); } else if (Keyboard::modifier_state_equals (ev->state, Keyboard::PrimaryModifier)) { @@ -633,7 +642,8 @@ RouteUI::rec_enable_press(GdkEventButton* ev) rl.reset (new RouteList); rl->push_back (_route); } - + + DisplaySuspender ds; _session->set_record_enabled (rl, !rec_enable_button->active_state(), Session::rt_cleanup, true); } @@ -645,6 +655,7 @@ RouteUI::rec_enable_press(GdkEventButton* ev) boost::shared_ptr rl (new RouteList); rl->push_back (route()); + DisplaySuspender ds; _session->set_record_enabled (rl, !rec_enable_button->active_state()); } } @@ -762,6 +773,7 @@ RouteUI::monitor_release (GdkEventButton* ev, MonitorChoice monitor_choice) rl->push_back (route()); } + DisplaySuspender ds; _session->set_monitoring (rl, mc, Session::rt_cleanup, true); return true; @@ -1320,36 +1332,38 @@ RouteUI::muting_change () bool RouteUI::solo_isolate_button_release (GdkEventButton* ev) { - if (ev->type == GDK_2BUTTON_PRESS || ev->type == GDK_3BUTTON_PRESS) { - return true; - } + if (ev->type == GDK_2BUTTON_PRESS || ev->type == GDK_3BUTTON_PRESS) { + return true; + } - bool view = solo_isolated_led->active_state(); - bool model = _route->solo_isolated(); + bool view = solo_isolated_led->active_state(); + bool model = _route->solo_isolated(); - /* called BEFORE the view has changed */ + /* called BEFORE the view has changed */ - if (ev->button == 1) { - if (Keyboard::modifier_state_equals (ev->state, Keyboard::ModifierMask (Keyboard::PrimaryModifier|Keyboard::TertiaryModifier))) { + if (ev->button == 1) { + if (Keyboard::modifier_state_equals (ev->state, Keyboard::ModifierMask (Keyboard::PrimaryModifier|Keyboard::TertiaryModifier))) { - if (model) { - /* disable isolate for all routes */ - _session->set_solo_isolated (_session->get_routes(), false, Session::rt_cleanup, true); - } + if (model) { + /* disable isolate for all routes */ + DisplaySuspender ds; + _session->set_solo_isolated (_session->get_routes(), false, Session::rt_cleanup, true); + } - } else { - if (model == view) { + } else { + if (model == view) { - /* flip just this route */ + /* flip just this route */ - boost::shared_ptr rl (new RouteList); - rl->push_back (_route); - _session->set_solo_isolated (rl, !view, Session::rt_cleanup, true); - } - } - } + boost::shared_ptr rl (new RouteList); + rl->push_back (_route); + DisplaySuspender ds; + _session->set_solo_isolated (rl, !view, Session::rt_cleanup, true); + } + } + } - return true; + return true; } bool