Fix bugs in previous commit that caused FTBFS in synfig and ETL FTBFS with older...
[synfig.git] / synfig-studio / tags / stable / src / gtkmm / dock_navigator.cpp
index cc48ab6..62a18c3 100644 (file)
@@ -6,6 +6,7 @@
 **
 **     \legal
 **     Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley
+**     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
@@ -43,6 +44,8 @@
 
 #include "asyncrenderer.h"
 
+#include "general.h"
+
 #endif
 
 /* === U S I N G =========================================================== */
@@ -166,8 +169,8 @@ void studio::Widget_NavView::on_start_render()
 
                renderer = new AsyncRenderer(targ);
                renderer->signal_success().connect(sigc::mem_fun(*this,&Widget_NavView::on_finish_render));
-               renderer->start();
                dirty = false;
+               renderer->start();
        }
 }
 
@@ -179,7 +182,6 @@ void studio::Widget_NavView::on_finish_render()
        //synfig::warning("Nav: It hath succeeded!!!");
 
        //assert(renderer && renderer->has_success());
-       DEBUGPOINT();
        //synfig::warning("Nav: now we know it really succeeded");
        if(!*surface)
        {
@@ -219,7 +221,7 @@ void studio::Widget_NavView::on_finish_render()
                        dw,     // width
                        dh,     // height
                        dw*synfig::channels(pf), // stride (pitch)
-                       SigC::slot(freegu8)
+                       sigc::ptr_fun(freegu8)
                );
        }
        else
@@ -255,8 +257,15 @@ static double zoom_to_unit(double f)
        }else return -999999.0;
 }
 
-bool studio::Widget_NavView::on_expose_draw(GdkEventExpose *exp)
+bool studio::Widget_NavView::on_expose_draw(GdkEventExpose */*exp*/)
 {
+#ifdef SINGLE_THREADED
+       // don't redraw if the previous redraw is still running single-threaded
+       // or we end up destroying the renderer that's rendering it
+       if (App::single_threaded && renderer && renderer->updating)
+               return false;
+#endif
+
        //print out the zoom
        //HACK kind of...
        //zoom_print.set_text(strprintf("%.1f%%",100*unit_to_zoom(adj_zoom.get_value())));