Fix the crash that the previous commit half-fixed.
[synfig.git] / synfig-studio / trunk / src / gtkmm / canvasview.cpp
index cbaed03..718a90b 100644 (file)
@@ -796,6 +796,13 @@ CanvasView::CanvasView(etl::loose_handle<Instance> instance,etl::handle<synfigap
        int h=get_canvas()->rend_desc().get_h()+70;
        while(w>700 || h>600)
        {
+               // Minor hack:
+               //   zoom_out() =>
+               //         WorkArea::async_update_preview() =>
+               //           WorkArea::set_zoom(float) =>
+               //                 WorkArea::async_update_preview() =>
+               //                       desc.set_time(cur_time), where cur_time isn't initialised
+               work_area->set_time(0);
                work_area->zoom_out();
                w=round_to_int(get_canvas()->rend_desc().get_w()*work_area->get_zoom()+70);
                h=round_to_int(get_canvas()->rend_desc().get_h()*work_area->get_zoom()+70);
@@ -905,6 +912,10 @@ CanvasView::~CanvasView()
 
        hide();
 
+       // don't be calling on_dirty_preview once this object has been deleted;
+       // this was causing a crash before
+       canvas_interface()->signal_dirty_preview().clear();
+
        synfig::info("CanvasView:~CanvasView(): Destructor Finished");
 }
 
@@ -1718,7 +1729,7 @@ CanvasView::popup_layer_menu(synfig::Layer::Handle layer)
 
        //parammenu.items().push_back(Gtk::Menu_Helpers::MenuElem(_("New Layer"),*newlayers));
 
-       if(layer->get_name()=="paste_canvas")
+       if(layer->get_name()=="PasteCanvas")
        {
                menu->items().push_back(Gtk::Menu_Helpers::MenuElem(_("Select All Children"),
                        sigc::bind(
@@ -2146,7 +2157,7 @@ CanvasView::on_layer_user_click(int button, Gtk::TreeRow /*row*/, LayerTree::Col
                                build_new_layer_menu(*newlayers);
 
                                parammenu.items().push_back(Gtk::Menu_Helpers::MenuElem("New Layer",*newlayers));
-                               if(!multiple_selected && layer->get_name()=="paste_canvas")
+                               if(!multiple_selected && layer->get_name()=="PasteCanvas")
                                {
                                        parammenu.items().push_back(Gtk::Menu_Helpers::MenuElem(_("Select All Children"),
                                                sigc::bind(
@@ -2626,7 +2637,7 @@ CanvasView::rebuild_ducks_layer_(synfig::TransformStack& transform_stack, Canvas
 
                // If this is a paste canvas layer, then we need to
                // descend into it
-               if(layer_name=="paste_canvas")
+               if(layer_name=="PasteCanvas")
                {
                        Vector scale;
                        scale[0]=scale[1]=exp(layer->get_param("zoom").get(Real()));
@@ -2821,7 +2832,9 @@ CanvasView::play()
                if(!work_area->sync_render_preview())
                        break;
 
-               studio::App::iteration(false);
+               // wait for the workarea to refresh itself
+               while (studio::App::events_pending())
+                       studio::App::iteration(false);
 
                if(get_cancel_status())
                        return;
@@ -3042,7 +3055,7 @@ CanvasView::on_drop_drag_data_received(const Glib::RefPtr<Gdk::DragContext>& con
                        if(!get_instance()->perform_action(action))
                                break;
 
-                       // Ok, we have successfuly imported at least one item.
+                       // Ok, we have successfully imported at least one item.
                        success=true;
                } while(0); // END of "STRING"