WorkArea::~WorkArea()
{
// delete [] buffer;
+
+ // 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");
}
void
}
}
-
// Calculate the window coordinates of the top-left
// corner of the canvas.
//const synfig::Vector::value_type
Glib::RefPtr<Gdk::GC> gc=Gdk::GC::create(drawing_area->get_window());
-
-
// If we are in animate mode, draw a red border around the screen
if(canvas_interface->get_mode()&synfigapp::MODE_ANIMATE)
{
+// #define USE_FRAME_BACKGROUND_TO_SHOW_EDIT_MODE
#ifdef USE_FRAME_BACKGROUND_TO_SHOW_EDIT_MODE
// This method of drawing the red border doesn't work on any
// Gtk theme which uses the crux-engine, hcengine, industrial,
drawing_area->get_width()-1,drawing_area->get_height()-1); // w,h
#endif
}
+#ifdef USE_FRAME_BACKGROUND_TO_SHOW_EDIT_MODE
else
drawing_frame->unset_bg(Gtk::STATE_NORMAL);
-
-
+#endif
previous_focus=get_focus_point();
gboolean
studio::WorkArea::__render_preview(gpointer data)
{
-
WorkArea *work_area(static_cast<WorkArea*>(data));
+ // there's no point anyone trying to cancel the timer now - it's gone off already
+ work_area->render_idle_func_id = 0;
+
work_area->queued=false;
work_area->async_render_preview(work_area->get_canvas_view()->get_time());