Fix for segfault on autoscroll (especially when dragging regions).
authorDavid Robillard <d@drobilla.net>
Tue, 10 Oct 2006 00:42:00 +0000 (00:42 +0000)
committerDavid Robillard <d@drobilla.net>
Tue, 10 Oct 2006 00:42:00 +0000 (00:42 +0000)
git-svn-id: svn://localhost/ardour2/trunk@967 d708f5d6-7413-0410-9779-e7cbd77b26cf

gtk2_ardour/editor.cc
gtk2_ardour/editor.h
gtk2_ardour/editor_canvas.cc

index fb0d0782dc964c7d004c05942f27a81a5bc890fe..ecf3870c7ffe43ddb34ef7155f754f3499f85151 100644 (file)
@@ -248,6 +248,7 @@ Editor::Editor (AudioEngine& eng)
        bbt_beat_subdivision = 4;
        canvas_width = 0;
        canvas_height = 0;
+       autoscroll_active = false;
        autoscroll_timeout_tag = -1;
        interthread_progress_window = 0;
 
index a8c12b4d817d9aad96d81173c7afe4544544e4d6..c83a0da3a06469119ebbe40ccbf4c01a144c1317 100644 (file)
@@ -1498,6 +1498,7 @@ class Editor : public PublicEditor
 
        /* autoscrolling */
 
+       bool autoscroll_active;
        int autoscroll_timeout_tag;
        int autoscroll_direction;
        uint32_t autoscroll_cnt;
index 3ff52499c8d9af05491619ed2fc9b7a315516edb..6f57a510107135e7b5cf1900d41f1db98f81a2b7 100644 (file)
@@ -630,12 +630,13 @@ Editor::autoscroll_canvas ()
 void
 Editor::start_canvas_autoscroll (int dir)
 {
-       if (!session) {
+       if (!session || autoscroll_active) {
                return;
        }
 
        stop_canvas_autoscroll ();
 
+       autoscroll_active = true;
        autoscroll_direction = dir;
        autoscroll_distance = (nframes_t) floor (current_page_frames()/50.0);
        autoscroll_cnt = 0;
@@ -652,6 +653,8 @@ Editor::stop_canvas_autoscroll ()
                g_source_remove (autoscroll_timeout_tag);
                autoscroll_timeout_tag = -1;
        }
+
+       autoscroll_active = false;
 }
 
 gint