From e2fb8fab2f695ee53ab0aa7a5ff2fe752c719ce8 Mon Sep 17 00:00:00 2001 From: "Admiral H. Curtiss" Date: Mon, 31 Jul 2023 00:42:15 +0200 Subject: DolphinQt: Set window decorations for all top-level QWidgets. --- Source/Core/DolphinQt/MainWindow.cpp | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) (limited to 'Source/Core/DolphinQt/MainWindow.cpp') diff --git a/Source/Core/DolphinQt/MainWindow.cpp b/Source/Core/DolphinQt/MainWindow.cpp index 42a6a04603..b193fe15c7 100644 --- a/Source/Core/DolphinQt/MainWindow.cpp +++ b/Source/Core/DolphinQt/MainWindow.cpp @@ -108,6 +108,7 @@ #include "DolphinQt/QtUtils/ParallelProgressDialog.h" #include "DolphinQt/QtUtils/QueueOnObject.h" #include "DolphinQt/QtUtils/RunOnObject.h" +#include "DolphinQt/QtUtils/SetWindowDecorations.h" #include "DolphinQt/QtUtils/WindowActivationEventFilter.h" #include "DolphinQt/RenderWidget.h" #include "DolphinQt/ResourcePackManager.h" @@ -1225,6 +1226,7 @@ void MainWindow::ShowControllersWindow() InstallHotkeyFilter(m_controllers_window); } + SetQWidgetWindowDecorations(m_controllers_window); m_controllers_window->show(); m_controllers_window->raise(); m_controllers_window->activateWindow(); @@ -1238,6 +1240,7 @@ void MainWindow::ShowFreeLookWindow() InstallHotkeyFilter(m_freelook_window); } + SetQWidgetWindowDecorations(m_freelook_window); m_freelook_window->show(); m_freelook_window->raise(); m_freelook_window->activateWindow(); @@ -1251,6 +1254,7 @@ void MainWindow::ShowSettingsWindow() InstallHotkeyFilter(m_settings_window); } + SetQWidgetWindowDecorations(m_settings_window); m_settings_window->show(); m_settings_window->raise(); m_settings_window->activateWindow(); @@ -1271,6 +1275,7 @@ void MainWindow::ShowGeneralWindow() void MainWindow::ShowAboutDialog() { AboutDialog about{this}; + SetQWidgetWindowDecorations(&about); about.exec(); } @@ -1282,6 +1287,7 @@ void MainWindow::ShowHotkeyDialog() InstallHotkeyFilter(m_hotkey_window); } + SetQWidgetWindowDecorations(m_hotkey_window); m_hotkey_window->show(); m_hotkey_window->raise(); m_hotkey_window->activateWindow(); @@ -1304,6 +1310,7 @@ void MainWindow::ShowGraphicsWindow() InstallHotkeyFilter(m_graphics_window); } + SetQWidgetWindowDecorations(m_graphics_window); m_graphics_window->show(); m_graphics_window->raise(); m_graphics_window->activateWindow(); @@ -1311,6 +1318,7 @@ void MainWindow::ShowGraphicsWindow() void MainWindow::ShowNetPlaySetupDialog() { + SetQWidgetWindowDecorations(m_netplay_setup_dialog); m_netplay_setup_dialog->show(); m_netplay_setup_dialog->raise(); m_netplay_setup_dialog->activateWindow(); @@ -1321,6 +1329,7 @@ void MainWindow::ShowNetPlayBrowser() auto* browser = new NetPlayBrowser(this); browser->setAttribute(Qt::WA_DeleteOnClose, true); connect(browser, &NetPlayBrowser::Join, this, &MainWindow::NetPlayJoin); + SetQWidgetWindowDecorations(browser); browser->exec(); } @@ -1333,6 +1342,7 @@ void MainWindow::ShowFIFOPlayer() [this](const QString& path) { StartGame(path, ScanForSecondDisc::No); }); } + SetQWidgetWindowDecorations(m_fifo_window); m_fifo_window->show(); m_fifo_window->raise(); m_fifo_window->activateWindow(); @@ -1345,6 +1355,7 @@ void MainWindow::ShowSkylanderPortal() m_skylander_window = new SkylanderPortalWindow(); } + SetQWidgetWindowDecorations(m_skylander_window); m_skylander_window->show(); m_skylander_window->raise(); m_skylander_window->activateWindow(); @@ -1357,6 +1368,7 @@ void MainWindow::ShowInfinityBase() m_infinity_window = new InfinityBaseWindow(); } + SetQWidgetWindowDecorations(m_infinity_window); m_infinity_window->show(); m_infinity_window->raise(); m_infinity_window->activateWindow(); @@ -1759,6 +1771,7 @@ void MainWindow::OnImportNANDBackup() dialog.Reset(); }); + SetQWidgetWindowDecorations(dialog.GetRaw()); dialog.GetRaw()->exec(); result.wait(); @@ -1866,6 +1879,7 @@ void MainWindow::ShowTASInput() const auto si_device = Config::Get(Config::GetInfoForSIDevice(i)); if (si_device == SerialInterface::SIDEVICE_GC_GBA_EMULATED) { + SetQWidgetWindowDecorations(m_gba_tas_input_windows[i]); m_gba_tas_input_windows[i]->show(); m_gba_tas_input_windows[i]->raise(); m_gba_tas_input_windows[i]->activateWindow(); @@ -1873,6 +1887,7 @@ void MainWindow::ShowTASInput() else if (si_device != SerialInterface::SIDEVICE_NONE && si_device != SerialInterface::SIDEVICE_GC_GBA) { + SetQWidgetWindowDecorations(m_gc_tas_input_windows[i]); m_gc_tas_input_windows[i]->show(); m_gc_tas_input_windows[i]->raise(); m_gc_tas_input_windows[i]->activateWindow(); @@ -1884,6 +1899,7 @@ void MainWindow::ShowTASInput() if (Config::Get(Config::GetInfoForWiimoteSource(i)) == WiimoteSource::Emulated && (!Core::IsRunning() || SConfig::GetInstance().bWii)) { + SetQWidgetWindowDecorations(m_wii_tas_input_windows[i]); m_wii_tas_input_windows[i]->show(); m_wii_tas_input_windows[i]->raise(); m_wii_tas_input_windows[i]->activateWindow(); @@ -1910,6 +1926,7 @@ void MainWindow::ShowAchievementsWindow() m_achievements_window = new AchievementsWindow(this); } + SetQWidgetWindowDecorations(m_achievements_window); m_achievements_window->show(); m_achievements_window->raise(); m_achievements_window->activateWindow(); @@ -1920,6 +1937,7 @@ void MainWindow::ShowMemcardManager() { GCMemcardManager manager(this); + SetQWidgetWindowDecorations(&manager); manager.exec(); } @@ -1927,11 +1945,13 @@ void MainWindow::ShowResourcePackManager() { ResourcePackManager manager(this); + SetQWidgetWindowDecorations(&manager); manager.exec(); } void MainWindow::ShowCheatsManager() { + SetQWidgetWindowDecorations(m_cheats_manager); m_cheats_manager->show(); } @@ -1950,6 +1970,7 @@ void MainWindow::ShowRiivolutionBootWidget(const UICommon::GameFile& game) auto& disc = std::get(boot_params->parameters); RiivolutionBootWidget w(disc.volume->GetGameID(), disc.volume->GetRevision(), disc.volume->GetDiscNumber(), game.GetFilePath(), this); + SetQWidgetWindowDecorations(&w); w.exec(); if (!w.ShouldBoot()) return; @@ -1961,7 +1982,10 @@ void MainWindow::ShowRiivolutionBootWidget(const UICommon::GameFile& game) void MainWindow::Show() { if (!Settings::Instance().IsBatchModeEnabled()) + { + SetQWidgetWindowDecorations(this); QWidget::show(); + } // If the booting of a game was requested on start up, do that now if (m_pending_boot != nullptr) -- cgit v1.2.3 From 250d5f55deb0febb9ea94090332bbbbd91d1af5c Mon Sep 17 00:00:00 2001 From: "Admiral H. Curtiss" Date: Mon, 31 Jul 2023 23:22:53 +0200 Subject: DolphinQt: Switch dark/light theme when Windows theme changes. --- Source/Core/DolphinQt/MainWindow.cpp | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) (limited to 'Source/Core/DolphinQt/MainWindow.cpp') diff --git a/Source/Core/DolphinQt/MainWindow.cpp b/Source/Core/DolphinQt/MainWindow.cpp index b193fe15c7..1f5223179c 100644 --- a/Source/Core/DolphinQt/MainWindow.cpp +++ b/Source/Core/DolphinQt/MainWindow.cpp @@ -1715,6 +1715,30 @@ QSize MainWindow::sizeHint() const return QSize(800, 600); } +#ifdef _WIN32 +bool MainWindow::nativeEvent(const QByteArray& eventType, void* message, qintptr* result) +{ + auto* msg = reinterpret_cast(message); + if (msg && msg->message == WM_SETTINGCHANGE && msg->lParam != NULL && + std::wstring_view(L"ImmersiveColorSet") + .compare(reinterpret_cast(msg->lParam)) == 0) + { + // Windows light/dark theme has changed. Update our flag and refresh the theme. + auto& settings = Settings::Instance(); + const bool was_dark_before = settings.IsSystemDark(); + settings.UpdateSystemDark(); + if (settings.IsSystemDark() != was_dark_before) + settings.SetCurrentUserStyle(settings.GetCurrentUserStyle()); + + // TODO: When switching from light to dark, the window decorations remain light. Qt seems very + // convinced that it needs to change these in response to this message, so even if we set them + // to dark here, Qt sets them back to light afterwards. + } + + return false; +} +#endif + void MainWindow::OnBootGameCubeIPL(DiscIO::Region region) { StartGame(std::make_unique(BootParameters::IPL{region})); -- cgit v1.2.3 From 24012cfc7f396177732e9a8b7d849045a65a5512 Mon Sep 17 00:00:00 2001 From: "Admiral H. Curtiss" Date: Tue, 1 Aug 2023 20:47:17 +0200 Subject: DolphinQt: Adjust panel-specific colors and syntax highlighting for dark theme. --- Source/Core/DolphinQt/MainWindow.cpp | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'Source/Core/DolphinQt/MainWindow.cpp') diff --git a/Source/Core/DolphinQt/MainWindow.cpp b/Source/Core/DolphinQt/MainWindow.cpp index 1f5223179c..67d4ac46bb 100644 --- a/Source/Core/DolphinQt/MainWindow.cpp +++ b/Source/Core/DolphinQt/MainWindow.cpp @@ -1728,8 +1728,14 @@ bool MainWindow::nativeEvent(const QByteArray& eventType, void* message, qintptr const bool was_dark_before = settings.IsSystemDark(); settings.UpdateSystemDark(); if (settings.IsSystemDark() != was_dark_before) + { settings.SetCurrentUserStyle(settings.GetCurrentUserStyle()); + // force the colors in the Skylander window to update + if (m_skylander_window) + m_skylander_window->RefreshList(); + } + // TODO: When switching from light to dark, the window decorations remain light. Qt seems very // convinced that it needs to change these in response to this message, so even if we set them // to dark here, Qt sets them back to light afterwards. -- cgit v1.2.3