diff --git a/dist/qt_themes/default/style.qss b/dist/qt_themes/default/style.qss index 921950c6c0..db55b9b490 100644 --- a/dist/qt_themes/default/style.qss +++ b/dist/qt_themes/default/style.qss @@ -38,6 +38,18 @@ QPushButton#RendererStatusBarButton:!checked { color: #0066ff; } +QPushButton#RefreshButton { + color: #656565; + border: 1px solid transparent; + background-color: transparent; + padding: 0px 3px 0px 3px; + text-align: center; +} + +QPushButton#RefreshButton:hover { + border: 1px solid #76797C; +} + QPushButton#GPUStatusBarButton { color: #656565; border: 1px solid transparent; diff --git a/dist/qt_themes/default_dark/style.qss b/dist/qt_themes/default_dark/style.qss index ca6daa2d52..6a3f517cb6 100644 --- a/dist/qt_themes/default_dark/style.qss +++ b/dist/qt_themes/default_dark/style.qss @@ -42,6 +42,18 @@ QPushButton#RendererStatusBarButton:!checked { color: #00ccdd; } +QPushButton#RefreshButton { + color: #656565; + border: 1px solid transparent; + background-color: transparent; + padding: 0px 3px 0px 3px; + text-align: center; +} + +QPushButton#RefreshButton:hover { + border: 1px solid #76797C; +} + QPushButton#GPUStatusBarButton { color: #656565; border: 1px solid transparent; diff --git a/dist/qt_themes/qdarkstyle/style.qss b/dist/qt_themes/qdarkstyle/style.qss index 328ac942fc..32610b131e 100644 --- a/dist/qt_themes/qdarkstyle/style.qss +++ b/dist/qt_themes/qdarkstyle/style.qss @@ -1283,6 +1283,19 @@ QPushButton#RendererStatusBarButton:!checked { color: #00ccdd; } +QPushButton#RefreshButton { + min-width: 0px; + color: #656565; + border: 1px solid transparent; + background-color: transparent; + padding: 0px 3px 0px 3px; + text-align: center; +} + +QPushButton#RefreshButton:hover { + border: 1px solid #76797C; +} + QPushButton#GPUStatusBarButton { min-width: 0px; color: #656565; diff --git a/dist/qt_themes/qdarkstyle_midnight_blue/style.qss b/dist/qt_themes/qdarkstyle_midnight_blue/style.qss index eb0889b139..43db5ad0b5 100644 --- a/dist/qt_themes/qdarkstyle_midnight_blue/style.qss +++ b/dist/qt_themes/qdarkstyle_midnight_blue/style.qss @@ -2186,6 +2186,19 @@ QPushButton#RendererStatusBarButton:!checked { color: #00ccdd; } +QPushButton#RefreshButton { + min-width: 0px; + color: #656565; + border: 1px solid transparent; + background-color: transparent; + padding: 0px 3px 0px 3px; + text-align: center; +} + +QPushButton#RefreshButton:hover { + border: 1px solid #76797C; +} + QPushButton#GPUStatusBarButton { min-width: 0px; color: #656565; diff --git a/src/yuzu/game_list.h b/src/yuzu/game_list.h index a7f0201709..6ca50fac2d 100644 --- a/src/yuzu/game_list.h +++ b/src/yuzu/game_list.h @@ -106,6 +106,9 @@ public: static const QStringList supported_file_extensions; +public slots: + void RefreshGameDirectory(); + signals: void BootGame(const QString& game_path, StartGameType type); void GameChosen(const QString& game_path, const u64 title_id = 0); @@ -147,8 +150,6 @@ private: private: void ValidateEntry(const QModelIndex& item); - void RefreshGameDirectory(); - void ToggleFavorite(u64 program_id); void AddFavorite(u64 program_id); void RemoveFavorite(u64 program_id); diff --git a/src/yuzu/main.cpp b/src/yuzu/main.cpp index c497b7c40e..d7aac5e503 100644 --- a/src/yuzu/main.cpp +++ b/src/yuzu/main.cpp @@ -507,6 +507,10 @@ GMainWindow::GMainWindow(bool has_broken_vulkan) QStringList args = QApplication::arguments(); if (args.size() < 2) { + // Some moron added a race condition to the status bar + // so now we have to make this completely unnecessary call + // to prevent the UI from blowing up. + UpdateUITheme(); return; } @@ -1296,6 +1300,15 @@ void GMainWindow::InitializeWidgets() { }); statusBar()->insertPermanentWidget(0, renderer_status_button); + // Setup Refresh Button + refresh_button = new QPushButton(); + refresh_button->setIcon(QIcon::fromTheme(QStringLiteral("view-refresh"))); + refresh_button->setObjectName(QStringLiteral("RefreshButton")); + refresh_button->setFocusPolicy(Qt::NoFocus); + connect(refresh_button, &QPushButton::clicked, this, &GMainWindow::OnGameListRefresh); + + statusBar()->insertPermanentWidget(0, refresh_button); + statusBar()->setVisible(true); setStyleSheet(QStringLiteral("QStatusBar::item{border: none;}")); } @@ -2107,6 +2120,7 @@ void GMainWindow::BootGame(const QString& filename, Service::AM::FrontendAppletP } status_bar_update_timer.start(500); renderer_status_button->setDisabled(true); + refresh_button->setDisabled(true); if (UISettings::values.hide_mouse || Settings::values.mouse_panning) { render_window->installEventFilter(render_window); @@ -2279,6 +2293,7 @@ void GMainWindow::OnEmulationStopped() { game_fps_label->setVisible(false); emu_frametime_label->setVisible(false); renderer_status_button->setEnabled(!UISettings::values.has_broken_vulkan); + refresh_button->setEnabled(true); if (!firmware_label->text().isEmpty()) { firmware_label->setVisible(true); @@ -4476,6 +4491,11 @@ void GMainWindow::OnToggleStatusBar() { statusBar()->setVisible(ui->action_Show_Status_Bar->isChecked()); } +void GMainWindow::OnGameListRefresh() +{ + game_list->RefreshGameDirectory(); +} + void GMainWindow::OnAlbum() { constexpr u64 AlbumId = static_cast(Service::AM::AppletProgramId::PhotoViewer); auto bis_system = system->GetFileSystemController().GetSystemNANDContents(); diff --git a/src/yuzu/main.h b/src/yuzu/main.h index f6a731e050..498a5524b2 100644 --- a/src/yuzu/main.h +++ b/src/yuzu/main.h @@ -389,6 +389,7 @@ private slots: void OnAbout(); void OnToggleFilterBar(); void OnToggleStatusBar(); + void OnGameListRefresh(); void OnDisplayTitleBars(bool); void InitializeHotkeys(); void ToggleFullscreen(); @@ -519,6 +520,7 @@ private: QLabel* firmware_label = nullptr; QPushButton* gpu_accuracy_button = nullptr; QPushButton* renderer_status_button = nullptr; + QPushButton* refresh_button = nullptr; QPushButton* dock_status_button = nullptr; QPushButton* filter_status_button = nullptr; QPushButton* aa_status_button = nullptr;