diff options
Diffstat (limited to 'Source/Core/DolphinQt2/MainWindow.cpp')
| -rw-r--r-- | Source/Core/DolphinQt2/MainWindow.cpp | 24 |
1 files changed, 14 insertions, 10 deletions
diff --git a/Source/Core/DolphinQt2/MainWindow.cpp b/Source/Core/DolphinQt2/MainWindow.cpp index b8b5e716a6..b7779dc159 100644 --- a/Source/Core/DolphinQt2/MainWindow.cpp +++ b/Source/Core/DolphinQt2/MainWindow.cpp @@ -566,7 +566,7 @@ void MainWindow::FullScreen() // settings. If it's set to be fullscreen then it just remakes the window, // which probably isn't ideal. bool was_fullscreen = m_render_widget->isFullScreen(); - HideRenderWidget(); + HideRenderWidget(false); if (was_fullscreen) ShowRenderWidget(); else @@ -630,7 +630,7 @@ void MainWindow::ShowRenderWidget() { // Otherwise, just show it. m_rendering_to_main = false; - if (SConfig::GetInstance().bFullscreen) + if (SConfig::GetInstance().bFullscreen && !m_render_widget->isFullScreen()) { m_render_widget->showFullScreen(); } @@ -642,7 +642,7 @@ void MainWindow::ShowRenderWidget() } } -void MainWindow::HideRenderWidget() +void MainWindow::HideRenderWidget(bool reinit) { if (m_rendering_to_main) { @@ -655,19 +655,23 @@ void MainWindow::HideRenderWidget() setWindowTitle(QString::fromStdString(Common::scm_rev_str)); } + m_render_widget->hide(); + // The following code works around a driver bug that would lead to Dolphin crashing when changing // graphics backends (e.g. OpenGL to Vulkan). To avoid this the render widget is (safely) // recreated - disconnect(m_render_widget, &RenderWidget::Closed, this, &MainWindow::ForceStop); + if (reinit) + { + disconnect(m_render_widget, &RenderWidget::Closed, this, &MainWindow::ForceStop); - m_render_widget->hide(); - m_render_widget->removeEventFilter(this); - m_render_widget->deleteLater(); + m_render_widget->removeEventFilter(this); + m_render_widget->deleteLater(); - m_render_widget = new RenderWidget; + m_render_widget = new RenderWidget; - m_render_widget->installEventFilter(this); - connect(m_render_widget, &RenderWidget::Closed, this, &MainWindow::ForceStop); + m_render_widget->installEventFilter(this); + connect(m_render_widget, &RenderWidget::Closed, this, &MainWindow::ForceStop); + } } void MainWindow::ShowControllersWindow() |
