From caa18edc794845b1cbf957754ac9dfc4211beb6d Mon Sep 17 00:00:00 2001 From: spycrab Date: Sun, 22 Apr 2018 10:56:15 +0200 Subject: [PATCH] Qt: Implement "Keep Window on top" --- .../DolphinQt2/Config/Graphics/GeneralWidget.cpp | 4 ++-- Source/Core/DolphinQt2/RenderWidget.cpp | 11 +++++++++++ Source/Core/DolphinQt2/RenderWidget.h | 1 + Source/Core/DolphinQt2/Settings.cpp | 14 ++++++++++++++ Source/Core/DolphinQt2/Settings.h | 3 +++ Source/Core/DolphinQt2/Settings/InterfacePane.cpp | 4 ++-- 6 files changed, 33 insertions(+), 4 deletions(-) diff --git a/Source/Core/DolphinQt2/Config/Graphics/GeneralWidget.cpp b/Source/Core/DolphinQt2/Config/Graphics/GeneralWidget.cpp index a99ddfc9b1..339049bd20 100644 --- a/Source/Core/DolphinQt2/Config/Graphics/GeneralWidget.cpp +++ b/Source/Core/DolphinQt2/Config/Graphics/GeneralWidget.cpp @@ -165,7 +165,7 @@ void GeneralWidget::LoadSettings() // Render to Main Window m_render_main_window->setChecked(SConfig::GetInstance().bRenderToMain); // Keep Window on Top - m_keep_window_top->setChecked(SConfig::GetInstance().bKeepWindowOnTop); + m_keep_window_top->setChecked(Settings::Instance().IsKeepWindowOnTopEnabled()); // Autoadjust Window size m_autoadjust_window_size->setChecked(SConfig::GetInstance().bRenderWindowAutoSize); } @@ -222,7 +222,7 @@ void GeneralWidget::SaveSettings() // Render to Main Window SConfig::GetInstance().bRenderToMain = m_render_main_window->isChecked(); // Keep Window on Top - SConfig::GetInstance().bKeepWindowOnTop = m_keep_window_top->isChecked(); + Settings::Instance().SetKeepWindowOnTop(m_keep_window_top->isChecked()); // Autoadjust windowsize SConfig::GetInstance().bRenderWindowAutoSize = m_autoadjust_window_size->isChecked(); } diff --git a/Source/Core/DolphinQt2/RenderWidget.cpp b/Source/Core/DolphinQt2/RenderWidget.cpp index 71a784a79d..b1c1529baa 100644 --- a/Source/Core/DolphinQt2/RenderWidget.cpp +++ b/Source/Core/DolphinQt2/RenderWidget.cpp @@ -53,6 +53,9 @@ RenderWidget::RenderWidget(QWidget* parent) : QWidget(parent) connect(&Settings::Instance(), &Settings::HideCursorChanged, this, &RenderWidget::OnHideCursorChanged); OnHideCursorChanged(); + connect(&Settings::Instance(), &Settings::KeepWindowOnTopChanged, this, + &RenderWidget::OnKeepOnTopChanged); + OnKeepOnTopChanged(Settings::Instance().IsKeepWindowOnTopEnabled()); m_mouse_timer->start(MOUSE_HIDE_DELAY); SetFillBackground(true); @@ -70,6 +73,14 @@ void RenderWidget::OnHideCursorChanged() setCursor(Settings::Instance().GetHideCursor() ? Qt::BlankCursor : Qt::ArrowCursor); } +void RenderWidget::OnKeepOnTopChanged(bool top) +{ + setWindowFlags(top ? windowFlags() | Qt::WindowStaysOnTopHint : + windowFlags() & ~Qt::WindowStaysOnTopHint); + + show(); +} + void RenderWidget::HandleCursorTimer() { if (isActiveWindow()) diff --git a/Source/Core/DolphinQt2/RenderWidget.h b/Source/Core/DolphinQt2/RenderWidget.h index be276d10fc..0c89363fa0 100644 --- a/Source/Core/DolphinQt2/RenderWidget.h +++ b/Source/Core/DolphinQt2/RenderWidget.h @@ -29,6 +29,7 @@ signals: private: void HandleCursorTimer(); void OnHideCursorChanged(); + void OnKeepOnTopChanged(bool top); void SetFillBackground(bool fill); static constexpr int MOUSE_HIDE_DELAY = 3000; diff --git a/Source/Core/DolphinQt2/Settings.cpp b/Source/Core/DolphinQt2/Settings.cpp index b697b8c431..be4ca80011 100644 --- a/Source/Core/DolphinQt2/Settings.cpp +++ b/Source/Core/DolphinQt2/Settings.cpp @@ -130,6 +130,20 @@ bool Settings::GetHideCursor() const return SConfig::GetInstance().bHideCursor; } +void Settings::SetKeepWindowOnTop(bool top) +{ + if (IsKeepWindowOnTopEnabled() == top) + return; + + SConfig::GetInstance().bKeepWindowOnTop = top; + emit KeepWindowOnTopChanged(top); +} + +bool Settings::IsKeepWindowOnTopEnabled() const +{ + return SConfig::GetInstance().bKeepWindowOnTop; +} + int Settings::GetVolume() const { return SConfig::GetInstance().m_Volume; diff --git a/Source/Core/DolphinQt2/Settings.h b/Source/Core/DolphinQt2/Settings.h index 7e40803e17..eea558546c 100644 --- a/Source/Core/DolphinQt2/Settings.h +++ b/Source/Core/DolphinQt2/Settings.h @@ -74,6 +74,8 @@ public: // Graphics void SetHideCursor(bool hide_cursor); bool GetHideCursor() const; + void SetKeepWindowOnTop(bool top); + bool IsKeepWindowOnTopEnabled() const; // Audio int GetVolume() const; @@ -126,6 +128,7 @@ signals: void DefaultGameChanged(const QString&); void PathReloadRequested(const QString&); void HideCursorChanged(); + void KeepWindowOnTopChanged(bool top); void VolumeChanged(int volume); void NANDRefresh(); void RegistersVisibilityChanged(bool visible); diff --git a/Source/Core/DolphinQt2/Settings/InterfacePane.cpp b/Source/Core/DolphinQt2/Settings/InterfacePane.cpp index 7e7fba1ceb..d2b0e5084a 100644 --- a/Source/Core/DolphinQt2/Settings/InterfacePane.cpp +++ b/Source/Core/DolphinQt2/Settings/InterfacePane.cpp @@ -178,7 +178,7 @@ void InterfacePane::LoadConfig() { const SConfig& startup_params = SConfig::GetInstance(); m_checkbox_auto_window->setChecked(startup_params.bRenderWindowAutoSize); - m_checkbox_top_window->setChecked(startup_params.bKeepWindowOnTop); + m_checkbox_top_window->setChecked(Settings::Instance().IsKeepWindowOnTopEnabled()); m_checkbox_render_to_window->setChecked(startup_params.bRenderToMain); m_checkbox_use_builtin_title_database->setChecked(startup_params.m_use_builtin_title_database); m_checkbox_show_debugging_ui->setChecked(Settings::Instance().IsDebugModeEnabled()); @@ -200,7 +200,7 @@ void InterfacePane::OnSaveConfig() { SConfig& settings = SConfig::GetInstance(); settings.bRenderWindowAutoSize = m_checkbox_auto_window->isChecked(); - settings.bKeepWindowOnTop = m_checkbox_top_window->isChecked(); + Settings::Instance().SetKeepWindowOnTop(m_checkbox_top_window->isChecked()); settings.bRenderToMain = m_checkbox_render_to_window->isChecked(); settings.m_use_builtin_title_database = m_checkbox_use_builtin_title_database->isChecked(); Settings::Instance().SetDebugModeEnabled(m_checkbox_show_debugging_ui->isChecked());