From cf6eff4d9f4d547a7400fa52bf32ff7335973d4f Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Mon, 1 Dec 2025 15:17:20 -0700 Subject: [PATCH] ensure count-in for clip recording vanishes at transport stop/rec-disable --- gtk2_ardour/audio_clip_editor.cc | 33 ++++++++++++++++++++++++++++++++ gtk2_ardour/audio_clip_editor.h | 4 ++++ gtk2_ardour/cue_editor.cc | 2 ++ gtk2_ardour/pianoroll.cc | 17 ++++++++-------- 4 files changed, 47 insertions(+), 9 deletions(-) diff --git a/gtk2_ardour/audio_clip_editor.cc b/gtk2_ardour/audio_clip_editor.cc index 0a81376bfb..3dabd084e4 100644 --- a/gtk2_ardour/audio_clip_editor.cc +++ b/gtk2_ardour/audio_clip_editor.cc @@ -894,9 +894,42 @@ AudioClipEditor::snap_mode_chosen (Editing::SnapMode) void AudioClipEditor::grid_type_chosen (Editing::GridType gt) { + EC_LOCAL_TEMPO_SCOPE; + if (gt != Editing::GridTypeMinSec && grid_actions[gt] && grid_actions[gt]->get_active()) { assert (grid_actions[Editing::GridTypeMinSec]); grid_actions[Editing::GridTypeMinSec]->set_active (false); grid_actions[Editing::GridTypeMinSec]->set_active (true); } } + +void +AudioClipEditor::set_session (ARDOUR::Session* s) +{ + EC_LOCAL_TEMPO_SCOPE; + + CueEditor::set_session (s); + + if (_session) { + _session->TransportStateChange.connect (_session_connections, MISSING_INVALIDATOR, std::bind (&AudioClipEditor::map_transport_state, this), gui_context()); + } else { + _session_connections.drop_connections(); + } + + map_transport_state (); +} + +void +AudioClipEditor::map_transport_state () +{ + EC_LOCAL_TEMPO_SCOPE; + + if (!_session) { + return; + } + + if (!_session->transport_rolling()) { + hide_count_in (); + } +} + diff --git a/gtk2_ardour/audio_clip_editor.h b/gtk2_ardour/audio_clip_editor.h index 30790b7e1a..1234ecf93d 100644 --- a/gtk2_ardour/audio_clip_editor.h +++ b/gtk2_ardour/audio_clip_editor.h @@ -110,6 +110,8 @@ public: samplecnt_t current_page_samples() const; void set_samples_per_pixel (samplecnt_t); + void set_session (ARDOUR::Session* s); + Gdk::Cursor* which_track_cursor () const { return nullptr; } Gdk::Cursor* which_mode_cursor () const { return nullptr; } Gdk::Cursor* which_trim_cursor (bool left_side) const { return nullptr; } @@ -209,4 +211,6 @@ public: void grid_type_chosen (Editing::GridType); Gtk::Box* pack_mouse_mode_box () { return nullptr; } + + void map_transport_state (); }; diff --git a/gtk2_ardour/cue_editor.cc b/gtk2_ardour/cue_editor.cc index 0bb301b8ae..b6cae5e0e2 100644 --- a/gtk2_ardour/cue_editor.cc +++ b/gtk2_ardour/cue_editor.cc @@ -707,6 +707,7 @@ CueEditor::rec_enable_change () break; case Disabled: rec_enable_button.set_active_state (Gtkmm2ext::Off); + hide_count_in (); break; } } @@ -1447,6 +1448,7 @@ CueEditor::maybe_set_count_in () } if (ref.box()->record_enabled() == Disabled) { + hide_count_in (); return; } diff --git a/gtk2_ardour/pianoroll.cc b/gtk2_ardour/pianoroll.cc index 51b4a8148a..557ecdb329 100644 --- a/gtk2_ardour/pianoroll.cc +++ b/gtk2_ardour/pianoroll.cc @@ -558,7 +558,6 @@ Pianoroll::maybe_update () } if (_track->triggerbox()->record_enabled() == Recording) { - _playhead_cursor->set_position (data_capture_duration); } @@ -1812,16 +1811,14 @@ Pianoroll::set_session (ARDOUR::Session* s) CueEditor::set_session (s); - if (with_transport_controls) { - if (_session) { - _session->TransportStateChange.connect (_session_connections, MISSING_INVALIDATOR, std::bind (&Pianoroll::map_transport_state, this), gui_context()); - } else { - _session_connections.drop_connections(); - } - - map_transport_state (); + if (_session) { + _session->TransportStateChange.connect (_session_connections, MISSING_INVALIDATOR, std::bind (&Pianoroll::map_transport_state, this), gui_context()); + } else { + _session_connections.drop_connections(); } + map_transport_state (); + if (_session) { zoom_to_show (timecnt_t (timepos_t (max_extents_scale() * max_zoom_extent ().second.samples()))); } @@ -1870,6 +1867,8 @@ Pianoroll::map_transport_state () } else { loop_button.set_active (false); } + + hide_count_in (); } }