Sorted alphabetically.
[synfig.git] / synfig-studio / trunk / src / gtkmm / workarea.cpp
index 5ab2563..ba0d49b 100644 (file)
@@ -7,6 +7,7 @@
 **     \legal
 **     Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley
 **     Copyright 2006 Yue Shi Lai
+**     Copyright (c) 2007 Chris Moore
 **
 **     This package is free software; you can redistribute it and/or
 **     modify it under the terms of the GNU General Public License as
@@ -806,11 +807,20 @@ WorkArea::~WorkArea()
        // don't leave the render function queued if we are about to vanish;
        // that causes crashes
        if(render_idle_func_id)
-       {
-               synfig::info("g_source_remove() returns %d", g_source_remove(render_idle_func_id));
                render_idle_func_id=0;
-       } else
-               synfig::info("no render_idle_func_id to clear\n");
+}
+
+bool
+WorkArea::get_updating()const
+{
+       return App::single_threaded && async_renderer && async_renderer->updating;
+}
+
+void
+WorkArea::stop_updating(bool cancel)
+{
+       async_renderer->stop();
+       if (cancel) canceled_=true;
 }
 
 void
@@ -2177,6 +2187,13 @@ public:
 bool
 studio::WorkArea::async_update_preview()
 {
+       if (get_updating())
+       {
+               stop_updating();
+               queue_render_preview();
+               return false;
+       }
+
        async_renderer=0;
 
        queued=false;
@@ -2470,6 +2487,7 @@ WorkArea::queue_scroll()
                drawing_area->queue_draw_area(4-dx, 4-dy, 4-dx+timecode_width, 4-dy+timecode_height);
        }
 
+#ifndef USE_FRAME_BACKGROUND_TO_SHOW_EDIT_MODE
        if(canvas_interface->get_mode()&synfigapp::MODE_ANIMATE)
        {
                int maxx = drawing_area->get_width()-1;
@@ -2496,6 +2514,7 @@ WorkArea::queue_scroll()
                        drawing_area->queue_draw_area(0,     -dy, maxx,     -dy);
                }
        }
+#endif // USE_FRAME_BACKGROUND_TO_SHOW_EDIT_MODE
 
        last_focus_point=focus_point;
 }