diff --git a/Source/Core/DolphinQt2/Config/Graphics/GraphicsWindow.cpp b/Source/Core/DolphinQt2/Config/Graphics/GraphicsWindow.cpp index bccac209de..0aaa900588 100644 --- a/Source/Core/DolphinQt2/Config/Graphics/GraphicsWindow.cpp +++ b/Source/Core/DolphinQt2/Config/Graphics/GraphicsWindow.cpp @@ -27,6 +27,17 @@ GraphicsWindow::GraphicsWindow(X11Utils::XRRConfiguration* xrr_config, MainWindow* parent) : QDialog(parent), m_xrr_config(xrr_config) { + // GraphicsWindow initialization is heavy due to dependencies on the graphics subsystem. + // To prevent blocking startup, we create the layout and children at first show time. +} + +void GraphicsWindow::Initialize() +{ + if (m_lazy_initialized) + return; + + m_lazy_initialized = true; + g_Config.Refresh(); g_video_backend->InitBackendInfo(); diff --git a/Source/Core/DolphinQt2/Config/Graphics/GraphicsWindow.h b/Source/Core/DolphinQt2/Config/Graphics/GraphicsWindow.h index 1850180dcd..bebcaa43d2 100644 --- a/Source/Core/DolphinQt2/Config/Graphics/GraphicsWindow.h +++ b/Source/Core/DolphinQt2/Config/Graphics/GraphicsWindow.h @@ -29,6 +29,8 @@ class GraphicsWindow final : public QDialog public: explicit GraphicsWindow(X11Utils::XRRConfiguration* xrr_config, MainWindow* parent); + void Initialize(); + void RegisterWidget(GraphicsWidget* widget); bool eventFilter(QObject* object, QEvent* event) override; signals: @@ -39,6 +41,8 @@ private: void OnBackendChanged(const QString& backend); void OnDescriptionAdded(QWidget* widget, const char* description); + bool m_lazy_initialized = false; + QTabWidget* m_tab_widget; QLabel* m_description; QDialogButtonBox* m_button_box; diff --git a/Source/Core/DolphinQt2/MainWindow.cpp b/Source/Core/DolphinQt2/MainWindow.cpp index b81b60b83a..25326547db 100644 --- a/Source/Core/DolphinQt2/MainWindow.cpp +++ b/Source/Core/DolphinQt2/MainWindow.cpp @@ -935,6 +935,7 @@ void MainWindow::ShowHotkeyDialog() void MainWindow::ShowGraphicsWindow() { + m_graphics_window->Initialize(); m_graphics_window->show(); m_graphics_window->raise(); m_graphics_window->activateWindow();