Skip to content

Commit

Permalink
Merge pull request #6481 from spycrab/qt_fix_fs
Browse files Browse the repository at this point in the history
Qt: Fix fullscreen
  • Loading branch information
Helios747 committed Mar 21, 2018
2 parents 1b0f6a7 + 8ead5be commit 30ccaa3
Show file tree
Hide file tree
Showing 5 changed files with 25 additions and 11 deletions.
3 changes: 3 additions & 0 deletions Source/Core/DolphinQt2/Debugger/CodeWidget.cpp
Expand Up @@ -247,6 +247,9 @@ void CodeWidget::Update()

void CodeWidget::UpdateCallstack()
{
if (Core::GetState() == Core::State::Starting)
return;

m_callstack_list->clear();

std::vector<Dolphin_Debugger::CallstackEntry> stack;
Expand Down
24 changes: 14 additions & 10 deletions Source/Core/DolphinQt2/MainWindow.cpp
Expand Up @@ -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
Expand Down Expand Up @@ -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();
}
Expand All @@ -642,7 +642,7 @@ void MainWindow::ShowRenderWidget()
}
}

void MainWindow::HideRenderWidget()
void MainWindow::HideRenderWidget(bool reinit)
{
if (m_rendering_to_main)
{
Expand All @@ -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()
Expand Down
2 changes: 1 addition & 1 deletion Source/Core/DolphinQt2/MainWindow.h
Expand Up @@ -100,7 +100,7 @@ class MainWindow final : public QMainWindow
void StartGame(const std::string& path, const std::optional<std::string>& savestate_path = {});
void StartGame(std::unique_ptr<BootParameters>&& parameters);
void ShowRenderWidget();
void HideRenderWidget();
void HideRenderWidget(bool reinit = true);

void ShowSettingsWindow();
void ShowGeneralWindow();
Expand Down
6 changes: 6 additions & 0 deletions Source/Core/DolphinQt2/RenderWidget.cpp
Expand Up @@ -49,6 +49,12 @@ void RenderWidget::HandleCursorTimer()
setCursor(Qt::BlankCursor);
}

void RenderWidget::showFullScreen()
{
QWidget::showFullScreen();
emit SizeChanged(width(), height());
}

bool RenderWidget::event(QEvent* event)
{
switch (event->type())
Expand Down
1 change: 1 addition & 0 deletions Source/Core/DolphinQt2/RenderWidget.h
Expand Up @@ -17,6 +17,7 @@ class RenderWidget final : public QWidget
explicit RenderWidget(QWidget* parent = nullptr);

bool event(QEvent* event) override;
void showFullScreen();

signals:
void EscapePressed();
Expand Down

0 comments on commit 30ccaa3

Please sign in to comment.