}
bool
-CanvasView::on_delete_event(GdkEventAny* event)
+CanvasView::close_instance_when_safe()
{
+ if (get_work_area()->get_updating())
+ return true;
+
if(get_instance()->get_visible_canvases()==1)
- {
// Schedule a close to occur in a few moments
Glib::signal_timeout().connect(
sigc::bind(
)
,250
);
+
+ return false;
+}
+
+bool
+CanvasView::on_delete_event(GdkEventAny* event)
+{
+ if (get_work_area()->get_updating())
+ {
+ get_work_area()->stop_updating(true); // stop and mark as cancelled
+
+ // give the workarea chances to stop updating
+ Glib::signal_timeout().connect(sigc::mem_fun(*this, &CanvasView::close_instance_when_safe) ,250);
+ return true;
}
+ close_instance_when_safe();
+
//! \todo This causes the window to be deleted straight away - but what if we prompt 'save?' and the user cancels?
// Is there ever any need to pass on the delete event to the window here?
// if(event) return Gtk::Window::on_delete_event(event);
render_idle_func_id=0;
}
+bool
+WorkArea::get_updating()const
+{
+ return App::single_threaded && async_renderer && async_renderer->updating == true;
+}
+
+void
+WorkArea::stop_updating(bool cancel)
+{
+ async_renderer->stop();
+ if (cancel) canceled_=true;
+}
+
void
WorkArea::save_meta_data()
{
bool
studio::WorkArea::async_update_preview()
{
- if (single_threaded() && async_renderer && async_renderer->updating == true)
+ if (get_updating())
{
- async_renderer->stop();
+ stop_updating();
return false;
}
bool get_canceled()const { return canceled_; }
bool get_queued()const { return queued; }
bool get_rendering()const { return rendering; }
+ bool get_updating()const;
+ void stop_updating(bool cancel = false);
bool get_full_frame()const { return full_frame; }
//int get_w()const { return w; }
//int get_h()const { return h; }