fix crash when loading a saved visual state
authorRobin Gareus <robin@gareus.org>
Tue, 5 Jul 2016 21:49:50 +0000 (23:49 +0200)
committerRobin Gareus <robin@gareus.org>
Tue, 5 Jul 2016 21:49:50 +0000 (23:49 +0200)
gtk2_ardour/editor.cc
gtk2_ardour/gui_object.h

index 4ce3ac55b81af67407a42e6807c060bf1fa5b5cf..146a4e7e4475bac60dbe2dead96d9427b435ed90 100644 (file)
@@ -4383,7 +4383,7 @@ Editor::current_visual_state (bool with_tracks)
        vs->zoom_focus = zoom_focus;
 
        if (with_tracks) {
-               *vs->gui_state = *ARDOUR_UI::instance()->gui_object_state;
+               vs->gui_state->set_state (ARDOUR_UI::instance()->gui_object_state->get_state());
        }
 
        return vs;
@@ -4448,7 +4448,7 @@ Editor::use_visual_state (VisualState& vs)
        reposition_and_zoom (vs.leftmost_frame, vs.samples_per_pixel);
 
        if (vs.gui_state) {
-               *ARDOUR_UI::instance()->gui_object_state = *vs.gui_state;
+               ARDOUR_UI::instance()->gui_object_state->set_state (vs.gui_state->get_state());
 
                for (TrackViewList::iterator i = track_views.begin(); i != track_views.end(); ++i) {
                        (*i)->clear_property_cache();
index 16b43f31e3fa8ce479faeed8a96ab6bfb460da78..62eeaa9a33cdb8b7e6d40e4b1490570c0361889c 100644 (file)
@@ -66,6 +66,9 @@ public:
        static XMLNode* get_or_add_node (XMLNode *, const std::string &);
 
   private:
+       // no copy construction. object_map saves pointers to _state XMLNodes
+       // use set_state(get_state())
+       GUIObjectState (const GUIObjectState& other);
 
        XMLNode _state;
        // ideally we'd use a O(1) hash table here,