diff --git a/gtk2_ardour/ardour_ui_ed.cc b/gtk2_ardour/ardour_ui_ed.cc index 6932e891ca..675661c2dd 100644 --- a/gtk2_ardour/ardour_ui_ed.cc +++ b/gtk2_ardour/ardour_ui_ed.cc @@ -53,6 +53,7 @@ #include "utils.h" #include "window_proxy.h" #include "global_port_matrix.h" +#include "location_ui.h" #include @@ -825,9 +826,11 @@ ARDOUR_UI::save_ardour_state () if (_session) { _session->add_instant_xml (enode); _session->add_instant_xml (mnode); + _session->add_instant_xml (location_ui->get()->ui().get_state ()); } else { Config->add_instant_xml (enode); Config->add_instant_xml (mnode); + Config->add_instant_xml (location_ui->get()->ui().get_state ()); } Keyboard::save_keybindings (); diff --git a/gtk2_ardour/location_ui.cc b/gtk2_ardour/location_ui.cc index 5797cd66ee..fe91100d7a 100644 --- a/gtk2_ardour/location_ui.cc +++ b/gtk2_ardour/location_ui.cc @@ -201,7 +201,6 @@ LocationEditRow::set_session (Session *sess) start_clock.set_session (_session); end_clock.set_session (_session); length_clock.set_session (_session); - } void @@ -717,7 +716,6 @@ LocationUI::LocationUI () i_am_the_modifier = 0; _clock_group = new ClockGroup; - _clock_group->set_clock_mode (AudioClock::Frames); VBox* vbox = manage (new VBox); @@ -1066,6 +1064,7 @@ LocationUI::set_session(ARDOUR::Session* s) _session->locations()->StateChanged.connect (_session_connections, invalidator (*this), boost::bind (&LocationUI::refresh_location_list, this), gui_context()); _session->locations()->added.connect (_session_connections, invalidator (*this), ui_bind (&LocationUI::location_added, this, _1), gui_context()); _session->locations()->removed.connect (_session_connections, invalidator (*this), ui_bind (&LocationUI::location_removed, this, _1), gui_context()); + _clock_group->set_clock_mode (clock_mode_from_session_instant_xml ()); } loop_edit_row.set_session (s); @@ -1106,6 +1105,30 @@ LocationUI::session_going_away() SessionHandlePtr::session_going_away (); } +XMLNode & +LocationUI::get_state () const +{ + XMLNode* node = new XMLNode (X_("LocationUI")); + node->add_property (X_("clock-mode"), enum_2_string (_clock_group->clock_mode ())); + return *node; +} + +AudioClock::Mode +LocationUI::clock_mode_from_session_instant_xml () const +{ + XMLNode* node = _session->instant_xml (X_("LocationUI")); + if (!node) { + return AudioClock::Frames; + } + + XMLProperty* p = node->property (X_("clock-mode")); + if (!p) { + return AudioClock::Frames; + } + + return (AudioClock::Mode) string_2_enum (p->value (), AudioClock::Mode); +} + /*------------------------*/ diff --git a/gtk2_ardour/location_ui.h b/gtk2_ardour/location_ui.h index 485a24499c..9a316bc1ed 100644 --- a/gtk2_ardour/location_ui.h +++ b/gtk2_ardour/location_ui.h @@ -156,6 +156,8 @@ class LocationUI : public Gtk::HBox, public ARDOUR::SessionHandlePtr void refresh_location_list (); + XMLNode & get_state () const; + private: ARDOUR::LocationStack* locations; ARDOUR::Location *newest_location; @@ -197,6 +199,7 @@ class LocationUI : public Gtk::HBox, public ARDOUR::SessionHandlePtr void map_locations (ARDOUR::Locations::LocationList&); ClockGroup* _clock_group; + AudioClock::Mode clock_mode_from_session_instant_xml () const; }; class LocationUIWindow : public ArdourWindow