From e4ef7fca8f2a20ef999511fede6f55bba40176b2 Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Mon, 8 Sep 2025 23:30:06 +0200 Subject: [PATCH] Don't clear selection during session load Mouse-mode is set after the the session sets CoreSelection in the backend, and can clear valid selection. Note: Region Selection (if any) is saved in instant.xml and set during first_idle, which usually still happens from `load_session_stage_two() -> flush_pending()`. --- gtk2_ardour/ardour_ui.cc | 1 + gtk2_ardour/ardour_ui.h | 4 ++++ gtk2_ardour/ardour_ui_session.cc | 2 ++ gtk2_ardour/editor_mouse.cc | 4 ++++ 4 files changed, 11 insertions(+) diff --git a/gtk2_ardour/ardour_ui.cc b/gtk2_ardour/ardour_ui.cc index a8318ff03f..08dfd662f6 100644 --- a/gtk2_ardour/ardour_ui.cc +++ b/gtk2_ardour/ardour_ui.cc @@ -349,6 +349,7 @@ ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[], const char* localedir) , recorder_visibility_button (S_("Window|Rec")) , trigger_page_visibility_button (S_("Window|Cue")) , nsm_first_session_opened (false) + , _loading_session (false) { Gtkmm2ext::init (localedir); diff --git a/gtk2_ardour/ardour_ui.h b/gtk2_ardour/ardour_ui.h index abb5b4f620..5e74b8fdc0 100644 --- a/gtk2_ardour/ardour_ui.h +++ b/gtk2_ardour/ardour_ui.h @@ -257,6 +257,8 @@ public: bool ask_about_loading_existing_session (const std::string& session_path); int load_session_from_startup_fsm (); + bool loading_session () const { return _loading_session; } + /// @return true if session was successfully unloaded. int unload_session (bool hide_stuff = false, bool force_unload = false); void close_session(); @@ -874,6 +876,8 @@ private: void ask_about_scratch_deletion (); bool nsm_first_session_opened; + bool _loading_session; + PBD::ScopedConnectionList clock_state_connection; }; diff --git a/gtk2_ardour/ardour_ui_session.cc b/gtk2_ardour/ardour_ui_session.cc index 0092ebd22d..f4c7b50421 100644 --- a/gtk2_ardour/ardour_ui_session.cc +++ b/gtk2_ardour/ardour_ui_session.cc @@ -404,6 +404,8 @@ ARDOUR_UI::audio_midi_setup_reconfigure_done (int response, std::string path, st int ARDOUR_UI::load_session_stage_two (const std::string& path, const std::string& snap_name, std::string mix_template) { + PBD::Unwinder uw (_loading_session, true); + Session *new_session; int retval = -1; diff --git a/gtk2_ardour/editor_mouse.cc b/gtk2_ardour/editor_mouse.cc index f0b62e4568..cdfd22b5c2 100644 --- a/gtk2_ardour/editor_mouse.cc +++ b/gtk2_ardour/editor_mouse.cc @@ -244,6 +244,10 @@ Editor::internal_editing() const void Editor::update_time_selection_display () { + if (ARDOUR_UI::instance()->loading_session ()) { + /* leave selection alone */ + return; + } auto mouse_mode = current_mouse_mode (); switch (mouse_mode) { case MouseRange: