Merge pull request #17367 from hyarion/fix-open-with-file-crash

Workaround for macOS crash when loading FreeCAD by opening a `.FCStd` file from Finder
This commit is contained in:
Yorik van Havre
2024-10-21 18:16:36 +02:00
committed by GitHub
2 changed files with 14 additions and 4 deletions

View File

@@ -975,10 +975,6 @@ void Application::checkForRecomputes() {
return;
WaitCursor wc;
wc.restoreCursor();
// Splasher is shown ontop of warnings on macOS so stop it before it's too late
getMainWindow()->stopSplasher();
auto res = QMessageBox::warning(getMainWindow(), QObject::tr("Recomputation required"),
QObject::tr("Some document(s) require recomputation for migration purposes. "
"It is highly recommended to perform a recomputation before "

View File

@@ -159,6 +159,20 @@ void GUIApplication::commitData(QSessionManager &manager)
bool GUIApplication::event(QEvent * ev)
{
if (ev->type() == QEvent::FileOpen) {
// (macOS workaround when opening FreeCAD by opening a .FCStd file in 1.0)
// With the current implementation of the splash screen boot procedure, Qt will
// start an event loop before FreeCAD is fully initalized. This event loop will
// process the QFileOpenEvent that is sent by macOS before the main window is ready.
if (!Gui::getMainWindow()->property("eventLoop").toBool()) {
// If we never reach this point when opening FreeCAD by double clicking an
// .FCStd file, then the workaround isn't needed anymore and can be removed
QEvent* eventCopy = new QFileOpenEvent(static_cast<QFileOpenEvent*>(ev)->file());
QTimer::singleShot(0, [eventCopy, this]() {
QCoreApplication::postEvent(this, eventCopy);
});
return true;
}
QString file = static_cast<QFileOpenEvent*>(ev)->file();
QFileInfo fi(file);
if (fi.suffix().toLower() == QLatin1String("fcstd")) {