QCoreApplication::setApplicationName(app_name + "-" + lyx_version);
//FIXME: quitOnLastWindowClosed is true by default, at least on Windows and
- // X11 platform. We should have a setting for this in order to let the
- // application to stay resident.
+ // X11 platforms. We should have a lyxrc setting for this in order to let the
+ // application stay resident.
/*
if (lyxrc.quit_on_last_window_closed)
setQuitOnLastWindowClosed(false);
return QApplication::notify(receiver, event);
}
catch (ExceptionMessage const & e) {
- if (e.type_ == ErrorException) {
+ switch(e.type_) {
+ case ErrorException:
+ LyX::cref().emergencyCleanup();
+ setQuitOnLastWindowClosed(false);
+ closeAllViews();
Alert::error(e.title_, e.details_);
- LyX::cref().exit(1);
- } else if (e.type_ == WarningException) {
- Alert::warning(e.title_, e.details_);
+#ifndef NDEBUG
+ // Properly crash in debug mode in order to get a useful backtrace.
+ abort();
+#endif
+ // In release mode, try to exit gracefully.
+ this->exit(1);
+
+ case BufferException: {
+ Buffer * buf = current_view_->buffer();
+ docstring details = e.details_ + '\n';
+ details += theBufferList().emergencyWrite(buf);
+ theBufferList().release(buf);
+ details += _("\nThe current document was closed.");
+ Alert::error(e.title_, details);
return false;
}
+ case WarningException:
+ Alert::warning(e.title_, e.details_);
+ return false;
+ };
}
catch (exception const & e) {
docstring s = _("LyX has caught an exception, it will now "