diff --git a/src/gui/MainWindow.cpp b/src/gui/MainWindow.cpp index c8e79372..b9be40b5 100644 --- a/src/gui/MainWindow.cpp +++ b/src/gui/MainWindow.cpp @@ -39,8 +39,12 @@ namespace mmp { +MainWindow* MainWindow::_instance = nullptr; + MainWindow::MainWindow() { + _instance = this; + // Create model. #if QT_VERSION >= 0x050500 QMessageLogger(__FILE__, __LINE__, nullptr).info() << "Video support: " << @@ -3617,11 +3621,10 @@ QString MainWindow::locateMediaFile(const QString &uri, bool isImage) } MainWindow* MainWindow::window() { - static MainWindow* instance = nullptr; - if (!instance) { - instance = new MainWindow; + if (!_instance) { + new MainWindow; // sets _instance first thing } - return instance; + return _instance; } void MainWindow::updateCanvases() diff --git a/src/gui/MainWindow.h b/src/gui/MainWindow.h index fb17d9ca..80000770 100644 --- a/src/gui/MainWindow.h +++ b/src/gui/MainWindow.h @@ -363,6 +363,15 @@ public slots: static MainWindow* window(); +private: + // The singleton, published as soon as construction starts so that anything + // triggered from inside the constructor (e.g. restoring the output window in + // fullscreen repaints OutputGLCanvas, which asks for the main window) gets + // this instance instead of constructing a second one recursively. + static MainWindow* _instance; + +public: + // Returns a short version of filename. static QString strippedName(const QString &fullFileName);