X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;ds=sidebyside;f=synfig-studio%2Ftrunk%2Fsrc%2Fgtkmm%2Fworkarea.cpp;h=dce50cdd1ba55a45cdb4dc88f2f4859fcf1590b4;hb=5442b08724a36e90837ca46f17660c8b3031beeb;hp=14a54c0ad6745673fc9396aa7e49253473f19417;hpb=8238696eb6ec59ec035c208f13c3e786e3112f89;p=synfig.git diff --git a/synfig-studio/trunk/src/gtkmm/workarea.cpp b/synfig-studio/trunk/src/gtkmm/workarea.cpp index 14a54c0..dce50cd 100644 --- a/synfig-studio/trunk/src/gtkmm/workarea.cpp +++ b/synfig-studio/trunk/src/gtkmm/workarea.cpp @@ -800,6 +800,15 @@ WorkArea::WorkArea(etl::loose_handle canvas_interfac 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 @@ -2497,9 +2506,11 @@ studio::WorkArea::zoom_norm() gboolean studio::WorkArea::__render_preview(gpointer data) { - WorkArea *work_area(static_cast(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());