diff --git a/gtk2_ardour/ardour_ui_ed.cc b/gtk2_ardour/ardour_ui_ed.cc index 6683dd6cda..0a652b722d 100644 --- a/gtk2_ardour/ardour_ui_ed.cc +++ b/gtk2_ardour/ardour_ui_ed.cc @@ -940,16 +940,14 @@ ARDOUR_UI::use_menubar_as_top_menubar () void ARDOUR_UI::save_ardour_state () { - if (!keyboard || !mixer || !editor || !meterbridge) { - return; - } - /* XXX this is all a bit dubious. add_extra_xml() uses a different lifetime model from add_instant_xml(). */ - XMLNode* node = new XMLNode (keyboard->get_state()); - Config->add_extra_xml (*node); + if (keyboard) { + XMLNode* node = new XMLNode (keyboard->get_state()); + Config->add_extra_xml (*node); + } XMLNode* window_node = new XMLNode (X_("UI")); window_node->set_property (_status_bar_visibility.get_state_name().c_str(), _status_bar_visibility.get_state_value ()); @@ -996,13 +994,6 @@ ARDOUR_UI::save_ardour_state () window_node->add_child_nocopy (*tearoff_node); - XMLNode& enode (editor->get_state()); - XMLNode& mnode (mixer->get_state()); - XMLNode& bnode (meterbridge->get_state()); - XMLNode& pnode (rc_option_editor->get_state()); - XMLNode& rnode (recorder->get_state()); - XMLNode& tnode (trigger_page->get_state()); - /* store clock modes */ XMLNode* cnode = new XMLNode(X_("ClockModes")); for (auto const& i: AudioClock::clocks) { @@ -1022,14 +1013,54 @@ ARDOUR_UI::save_ardour_state () UIConfiguration::instance().save_state (); + XMLNode* enode (nullptr); + XMLNode* mnode (nullptr); + XMLNode* bnode (nullptr); + XMLNode* pnode (nullptr); + XMLNode* rnode (nullptr); + XMLNode* tnode (nullptr); + + if (editor) { + enode = &editor->get_state(); + } + if (mixer) { + mnode = &mixer->get_state(); + } + if (meterbridge) { + bnode = &meterbridge->get_state(); + } + if (rc_option_editor) { + pnode = &rc_option_editor->get_state(); + } + if (recorder) { + rnode = &recorder->get_state(); + } + if (trigger_page) { + tnode = &trigger_page->get_state(); + } + if (_session) { + _session->add_instant_xml (main_window_node); - _session->add_instant_xml (enode); - _session->add_instant_xml (mnode); - _session->add_instant_xml (pnode); - _session->add_instant_xml (bnode); - _session->add_instant_xml (rnode); - _session->add_instant_xml (tnode); + + if (enode) { + _session->add_instant_xml (*enode); + } + if (mnode) { + _session->add_instant_xml (*mnode); + } + if (bnode) { + _session->add_instant_xml (*bnode); + } + if (pnode) { + _session->add_instant_xml (*pnode); + } + if (rnode) { + _session->add_instant_xml (*rnode); + } + if (tnode) { + _session->add_instant_xml (*tnode); + } _session->add_instant_xml (*cnode); if (location_ui) { _session->add_instant_xml (location_ui->ui().get_state ()); @@ -1044,13 +1075,26 @@ ARDOUR_UI::save_ardour_state () /* save current Window settings and sizes for new sessions */ { Config->add_instant_xml (main_window_node); - Config->add_instant_xml (enode); - Config->add_instant_xml (mnode); - Config->add_instant_xml (pnode); - Config->add_instant_xml (bnode); - Config->add_instant_xml (rnode); - Config->add_instant_xml (tnode); - Config->add_instant_xml (*cnode); + + if (enode) { + Config->add_instant_xml (*enode); + } + if (mnode) { + Config->add_instant_xml (*mnode); + } + if (bnode) { + Config->add_instant_xml (*bnode); + } + if (pnode) { + Config->add_instant_xml (*pnode); + } + if (rnode) { + Config->add_instant_xml (*rnode); + } + if (tnode) { + Config->add_instant_xml (*tnode); + } + if (location_ui) { Config->add_instant_xml (location_ui->ui().get_state ()); } @@ -1061,13 +1105,12 @@ ARDOUR_UI::save_ardour_state () } } - delete &enode; - delete &mnode; - delete &bnode; - delete &pnode; - delete &rnode; - delete &tnode; - delete cnode; + delete enode; + delete mnode; + delete bnode; + delete pnode; + delete rnode; + delete tnode; Keyboard::save_keybindings (); }