restore editor with leftmost frame preserved
authorPaul Davis <paul@linuxaudiosystems.com>
Sat, 28 Nov 2009 01:53:41 +0000 (01:53 +0000)
committerPaul Davis <paul@linuxaudiosystems.com>
Sat, 28 Nov 2009 01:53:41 +0000 (01:53 +0000)
git-svn-id: svn://localhost/ardour2/branches/3.0@6199 d708f5d6-7413-0410-9779-e7cbd77b26cf

gtk2_ardour/editor.cc

index 1c16f523bb197c30c737b0933109b1a33ced4b03..0ade4e15631678c94658da53b7265ef0e08b5312 100644 (file)
@@ -2271,16 +2271,8 @@ Editor::set_state (const XMLNode& node, int /*version*/)
                playhead_cursor->set_position (pos);
        } else {
                playhead_cursor->set_position (0);
-
-               /* reset_x_origin() doesn't work right here, since the old
-                  position may be zero already, and it does nothing in such
-                  circumstances.
-               */
-
-               leftmost_frame = 0;
-               horizontal_adjustment.set_value (0);
        }
-
+       
        if ((prop = node.property ("mixer-width"))) {
                editor_mixer_strip_width = Width (string_2_enum (prop->value(), editor_mixer_strip_width));
        }
@@ -2310,6 +2302,15 @@ Editor::set_state (const XMLNode& node, int /*version*/)
                set_mouse_mode (MouseObject, true);
        }
 
+       if ((prop = node.property ("left-frame")) != 0){
+               nframes64_t pos;
+               if (sscanf (prop->value().c_str(), "%" PRId64, &pos) == 1) {
+                       reset_x_origin (pos);
+                       /* this hack prevents the initial call to update_current_screen() from doing re-centering on the playhead */
+                       last_update_frame = pos;
+               }
+       }
+
        if ((prop = node.property ("internal-edit"))) {
                bool yn = string_is_affirmative (prop->value());
                RefPtr<Action> act = ActionManager::get_action (X_("MouseMode"), X_("toggle-internal-edit"));
@@ -2457,6 +2458,8 @@ Editor::get_state ()
 
        snprintf (buf, sizeof (buf), "%" PRIi64, playhead_cursor->current_frame);
        node->add_property ("playhead", buf);
+       snprintf (buf, sizeof (buf), "%" PRIi64, leftmost_frame);
+       node->add_property ("left-frame", buf);
 
        node->add_property ("show-waveforms-recording", _show_waveforms_recording ? "yes" : "no");
        node->add_property ("show-measures", _show_measures ? "yes" : "no");
@@ -4305,7 +4308,7 @@ Editor::queue_visual_change (nframes64_t where)
           can reach.
        */
 
-       if (where > session->current_end_frame()) {
+       if (session && (where > session->current_end_frame())) {
                horizontal_adjustment.set_upper ((where + current_page_frames()) / frames_per_unit);
        }
 
@@ -4321,7 +4324,6 @@ Editor::queue_visual_change (double fpu)
        pending_visual_change.frames_per_unit = fpu;
 
        ensure_visual_change_idle_handler ();
-
 }
 
 void
@@ -4353,9 +4355,7 @@ Editor::idle_visual_changer ()
        VisualChange::Type p = pending_visual_change.pending;
        pending_visual_change.pending = (VisualChange::Type) 0;
 
-#ifdef FIX_THIS_FOR_V3
        double last_time_origin = horizontal_adjustment.get_value();
-#endif
 
        if (p & VisualChange::ZoomLevel) {
                set_frames_per_unit (pending_visual_change.frames_per_unit);
@@ -4382,13 +4382,12 @@ Editor::idle_visual_changer ()
 
        /* if we seek beyond the current end of the canvas, move the end */
 
-#ifdef FIX_THIS_FOR_V3
+
        if (last_time_origin == horizontal_adjustment.get_value() ) {
                /* changed signal not emitted */
                update_fixed_rulers ();
                redisplay_tempo (true);
        }
-#endif
 
        if (current_time_origin != pending_visual_change.time_origin) {
                cef += current_page_frames() / 10; // Add a little extra so we can see the end marker
@@ -4401,7 +4400,7 @@ Editor::idle_visual_changer ()
 
        _summary->set_overlays_dirty ();
 
-       //cerr << "Editor::idle_visual_changer () called ha v:l:u:ps:fpu = " << horizontal_adjustment.get_value() << ":" << horizontal_adjustment.get_lower() << ":" << horizontal_adjustment.get_upper() << ":" << horizontal_adjustment.get_page_size() << ":" << frames_per_unit << endl;//DEBUG
+       // cerr << "Editor::idle_visual_changer () called ha v:l:u:ps:fpu = " << horizontal_adjustment.get_value() << ":" << horizontal_adjustment.get_lower() << ":" << horizontal_adjustment.get_upper() << ":" << horizontal_adjustment.get_page_size() << ":" << frames_per_unit << endl;//DEBUG
        pending_visual_change.idle_handler_id = -1;
        return 0; /* this is always a one-shot call */
 }