aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcrueter <crueter@eden-emu.dev>2025-12-31 23:45:58 +0100
committercrueter <crueter@eden-emu.dev>2025-12-31 23:45:58 +0100
commit73f2535edc25e7e1ff9e054428c956e6dde15555 (patch)
treeaf6b0f12a7f26107d2f27b15fbe25b0bb7c96702
parentd9874fa4bc063a4c48352e75988497a754360f67 (diff)
[desktop, settings] new RendererHacks category, move to Extensions -> Extras, fix GPU accuracy naming (#3245)
added a new RendererHacks category, moved them to the Extensions tab and renamed that tab Extras. Should fit in smaller screens now also Performance -> Fast, GPU Accuracy -> GPU Mode Signed-off-by: crueter <crueter@eden-emu.dev> Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/3245 Reviewed-by: MaranBr <maranbr@eden-emu.dev>
-rw-r--r--src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/view/SettingsItem.kt1
-rw-r--r--src/android/app/src/main/res/values/strings.xml11
-rw-r--r--src/common/settings.cpp1
-rw-r--r--src/common/settings.h8
-rw-r--r--src/common/settings_common.h1
-rw-r--r--src/frontend_common/config.cpp2
-rw-r--r--src/qt_common/config/shared_translation.cpp8
-rw-r--r--src/qt_common/config/shared_translation.h2
-rw-r--r--src/qt_common/config/uisettings.h2
-rw-r--r--src/yuzu/configuration/configure_dialog.cpp2
-rw-r--r--src/yuzu/configuration/configure_graphics_advanced.cpp18
-rw-r--r--src/yuzu/configuration/configure_graphics_advanced.ui39
-rw-r--r--src/yuzu/configuration/configure_graphics_extensions.cpp23
-rw-r--r--src/yuzu/configuration/configure_graphics_extensions.ui45
-rw-r--r--src/yuzu/configuration/configure_per_game.cpp2
-rw-r--r--src/yuzu/main_window.cpp2
-rwxr-xr-xtools/find-unused-strings.sh28
17 files changed, 87 insertions, 108 deletions
diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/view/SettingsItem.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/view/SettingsItem.kt
index da606274eb..50143a449e 100644
--- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/view/SettingsItem.kt
+++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/view/SettingsItem.kt
@@ -306,6 +306,7 @@ abstract class SettingsItem(
SingleChoiceSetting(
IntSetting.RENDERER_ACCURACY,
titleId = R.string.renderer_accuracy,
+ descriptionId = R.string.renderer_accuracy_description,
choicesId = R.array.rendererAccuracyNames,
valuesId = R.array.rendererAccuracyValues
)
diff --git a/src/android/app/src/main/res/values/strings.xml b/src/android/app/src/main/res/values/strings.xml
index 117e7397e0..35f2489223 100644
--- a/src/android/app/src/main/res/values/strings.xml
+++ b/src/android/app/src/main/res/values/strings.xml
@@ -473,7 +473,8 @@
<string name="advanced">Advanced</string>
- <string name="renderer_accuracy">Accuracy level</string>
+ <string name="renderer_accuracy">GPU Mode</string>
+ <string name="renderer_accuracy_description">Controls the GPU emulation mode. Most games render fine with Fast or Balanced modes, but Accurate is still required for some. Particles tend to only render correctly with Accurate mode.</string>
<string name="dma_accuracy">DMA Accuracy</string>
<string name="dma_accuracy_description">Controls the DMA precision accuracy. Safe precision can fix issues in some games, but it can also impact performance in some cases. If unsure, leave this on Default.</string>
<string name="anisotropic_filtering">Anisotropic filtering</string>
@@ -721,18 +722,12 @@
<!-- Custom Paths settings -->
<string name="custom_save_directory">Save Data Directory</string>
<string name="custom_save_directory_description">Set a custom path for save data storage</string>
- <string name="select_directory">Select Directory</string>
- <string name="choose_save_directory_action">Choose an action for the save directory:</string>
- <string name="set_custom_path">Set Custom Path</string>
<string name="reset_to_nand">Reset to Default</string>
<string name="migrate_save_data">Migrate Save Data</string>
<string name="migrate_save_data_question">Do you want to migrate existing save data to the new location?</string>
- <string name="migrate_save_data_description">This will copy your save files from the old location to the new one.</string>
- <string name="migrating_save_data">Migrating save data…</string>
<string name="save_migration_complete">Save data migrated successfully</string>
<string name="save_migration_failed">Save data migration failed</string>
<string name="save_directory_set">Save directory set</string>
- <string name="save_directory_reset">Save directory reset to default</string>
<string name="destination_has_saves">The destination already contains data. Do you want to overwrite it?</string>
<string name="all_files_permission_required">All Files Access permission is required for custom paths</string>
<string name="grant_permission">Grant Permission</string>
@@ -970,7 +965,7 @@
<string name="renderer_none">None</string>
<!-- Renderer Accuracy -->
- <string name="renderer_accuracy_low">Performance</string>
+ <string name="renderer_accuracy_low">Fast</string>
<string name="renderer_accuracy_medium">Balanced</string>
<string name="renderer_accuracy_high">Accurate</string>
diff --git a/src/common/settings.cpp b/src/common/settings.cpp
index e961e1d2d7..b7c2d3c9a9 100644
--- a/src/common/settings.cpp
+++ b/src/common/settings.cpp
@@ -231,6 +231,7 @@ const char* TranslateCategory(Category category) {
return "Overlay";
case Category::Renderer:
case Category::RendererAdvanced:
+ case Category::RendererHacks:
case Category::RendererDebug:
case Category::RendererExtensions:
return "Renderer";
diff --git a/src/common/settings.h b/src/common/settings.h
index 44cdb24f17..b523fb673b 100644
--- a/src/common/settings.h
+++ b/src/common/settings.h
@@ -492,13 +492,13 @@ struct Values {
SwitchableSetting<GpuOverclock> fast_gpu_time{linkage,
GpuOverclock::Medium,
"fast_gpu_time",
- Category::RendererAdvanced,
+ Category::RendererHacks,
Specialization::Default};
SwitchableSetting<bool> skip_cpu_inner_invalidation{linkage,
false,
"skip_cpu_inner_invalidation",
- Category::RendererAdvanced,
+ Category::RendererHacks,
Specialization::Default,
true,
true};
@@ -508,10 +508,10 @@ struct Values {
#else
false,
#endif
- "async_presentation", Category::RendererAdvanced};
+ "async_presentation", Category::RendererHacks};
SwitchableSetting<bool> use_asynchronous_shaders{linkage, false, "use_asynchronous_shaders",
- Category::RendererAdvanced};
+ Category::RendererHacks};
SwitchableSetting<ExtendedDynamicState> dyna_state{linkage,
#if defined (_WIN32)
diff --git a/src/common/settings_common.h b/src/common/settings_common.h
index 0107895c8c..653ce17b89 100644
--- a/src/common/settings_common.h
+++ b/src/common/settings_common.h
@@ -24,6 +24,7 @@ enum class Category : u32 {
Overlay,
Renderer,
RendererAdvanced,
+ RendererHacks,
RendererExtensions,
RendererDebug,
System,
diff --git a/src/frontend_common/config.cpp b/src/frontend_common/config.cpp
index 669e578b33..fdb7ac0833 100644
--- a/src/frontend_common/config.cpp
+++ b/src/frontend_common/config.cpp
@@ -368,6 +368,7 @@ void Config::ReadRendererValues() {
ReadCategory(Settings::Category::Renderer);
ReadCategory(Settings::Category::RendererAdvanced);
+ ReadCategory(Settings::Category::RendererHacks);
ReadCategory(Settings::Category::RendererExtensions);
ReadCategory(Settings::Category::RendererDebug);
@@ -671,6 +672,7 @@ void Config::SaveRendererValues() {
WriteCategory(Settings::Category::Renderer);
WriteCategory(Settings::Category::RendererAdvanced);
+ WriteCategory(Settings::Category::RendererHacks);
WriteCategory(Settings::Category::RendererExtensions);
WriteCategory(Settings::Category::RendererDebug);
diff --git a/src/qt_common/config/shared_translation.cpp b/src/qt_common/config/shared_translation.cpp
index 90e8c81f32..a3a720db8e 100644
--- a/src/qt_common/config/shared_translation.cpp
+++ b/src/qt_common/config/shared_translation.cpp
@@ -272,8 +272,8 @@ std::unique_ptr<TranslationMap> InitializeTranslations(QObject* parent)
tr("Controls the quality of texture rendering at oblique angles.\nSafe to set at 16x on most GPUs."));
INSERT(Settings,
gpu_accuracy,
- tr("GPU Accuracy:"),
- tr("Controls the GPU emulation accuracy.\nMost games render fine with Performance or Balanced modes, but Accurate is still "
+ tr("GPU Mode:"),
+ tr("Controls the GPU emulation mode.\nMost games render fine with Fast or Balanced modes, but Accurate is still "
"required for some.\nParticles tend to only render correctly with Accurate mode."));
INSERT(Settings,
dma_accuracy,
@@ -321,7 +321,7 @@ std::unique_ptr<TranslationMap> InitializeTranslations(QObject* parent)
// Renderer (Extensions)
INSERT(Settings, dyna_state, tr("Extended Dynamic State"),
tr("Controls the number of features that can be used in Extended Dynamic State.\n"
- "Higher numbers allow for more features and can increase performance, but may cause "
+ "Higher states allow for more features and can increase performance, but may cause "
"additional graphical issues."));
INSERT(Settings,
@@ -499,7 +499,7 @@ std::unique_ptr<ComboboxTranslationMap> ComboboxEnumeration(QObject* parent)
}});
translations->insert({Settings::EnumMetadata<Settings::GpuAccuracy>::Index(),
{
- PAIR(GpuAccuracy, Low, tr("Performance")),
+ PAIR(GpuAccuracy, Low, tr("Fast")),
PAIR(GpuAccuracy, Medium, tr("Balanced")),
PAIR(GpuAccuracy, High, tr("Accurate")),
}});
diff --git a/src/qt_common/config/shared_translation.h b/src/qt_common/config/shared_translation.h
index 299c31eaf8..e12b93ea6d 100644
--- a/src/qt_common/config/shared_translation.h
+++ b/src/qt_common/config/shared_translation.h
@@ -61,7 +61,7 @@ static const std::map<Settings::ConsoleMode, QString> use_docked_mode_texts_map
};
static const std::map<Settings::GpuAccuracy, QString> gpu_accuracy_texts_map = {
- {Settings::GpuAccuracy::Low, QStringLiteral(QT_TRANSLATE_NOOP("MainWindow", "Performance"))},
+ {Settings::GpuAccuracy::Low, QStringLiteral(QT_TRANSLATE_NOOP("MainWindow", "Fast"))},
{Settings::GpuAccuracy::Medium, QStringLiteral(QT_TRANSLATE_NOOP("MainWindow", "Balanced"))},
{Settings::GpuAccuracy::High, QStringLiteral(QT_TRANSLATE_NOOP("MainWindow", "Accurate"))},
};
diff --git a/src/qt_common/config/uisettings.h b/src/qt_common/config/uisettings.h
index c5a7d0b483..d139f43871 100644
--- a/src/qt_common/config/uisettings.h
+++ b/src/qt_common/config/uisettings.h
@@ -253,7 +253,7 @@ const std::array<Shortcut, 30> default_hotkeys{{
{QStringLiteral(QT_TRANSLATE_NOOP("Hotkeys", "Capture Screenshot")).toStdString(), QStringLiteral(QT_TRANSLATE_NOOP("Hotkeys", "Main Window")).toStdString(), {std::string("Ctrl+P"), std::string("Screenshot"), Qt::WidgetWithChildrenShortcut, false}},
{QStringLiteral(QT_TRANSLATE_NOOP("Hotkeys", "Change Adapting Filter")).toStdString(), QStringLiteral(QT_TRANSLATE_NOOP("Hotkeys", "Main Window")).toStdString(), {std::string("F8"), std::string("Home+L"), Qt::ApplicationShortcut, false}},
{QStringLiteral(QT_TRANSLATE_NOOP("Hotkeys", "Change Docked Mode")).toStdString(), QStringLiteral(QT_TRANSLATE_NOOP("Hotkeys", "Main Window")).toStdString(), {std::string("F10"), std::string("Home+X"), Qt::ApplicationShortcut, false}},
- {QStringLiteral(QT_TRANSLATE_NOOP("Hotkeys", "Change GPU Accuracy")).toStdString(), QStringLiteral(QT_TRANSLATE_NOOP("Hotkeys", "Main Window")).toStdString(), {std::string("F9"), std::string("Home+R"), Qt::ApplicationShortcut, false}},
+ {QStringLiteral(QT_TRANSLATE_NOOP("Hotkeys", "Change GPU Mode")).toStdString(), QStringLiteral(QT_TRANSLATE_NOOP("Hotkeys", "Main Window")).toStdString(), {std::string("F9"), std::string("Home+R"), Qt::ApplicationShortcut, false}},
{QStringLiteral(QT_TRANSLATE_NOOP("Hotkeys", "Configure")).toStdString(), QStringLiteral(QT_TRANSLATE_NOOP("Hotkeys", "Main Window")).toStdString(), {std::string("Ctrl+,"), std::string(""), Qt::WidgetWithChildrenShortcut, false}},
{QStringLiteral(QT_TRANSLATE_NOOP("Hotkeys", "Configure Current Game")).toStdString(), QStringLiteral(QT_TRANSLATE_NOOP("Hotkeys", "Main Window")).toStdString(), {std::string("Ctrl+."), std::string(""), Qt::WidgetWithChildrenShortcut, false}},
{QStringLiteral(QT_TRANSLATE_NOOP("Hotkeys", "Continue/Pause Emulation")).toStdString(), QStringLiteral(QT_TRANSLATE_NOOP("Hotkeys", "Main Window")).toStdString(), {std::string("F4"), std::string("Home+Plus"), Qt::WindowShortcut, false}},
diff --git a/src/yuzu/configuration/configure_dialog.cpp b/src/yuzu/configuration/configure_dialog.cpp
index 239e78a4d8..c247c53493 100644
--- a/src/yuzu/configuration/configure_dialog.cpp
+++ b/src/yuzu/configuration/configure_dialog.cpp
@@ -74,7 +74,7 @@ ConfigureDialog::ConfigureDialog(QWidget* parent, HotkeyRegistry& registry_,
ui->tabWidget->addTab(general_tab.get(), tr("General"));
ui->tabWidget->addTab(graphics_tab.get(), tr("Graphics"));
ui->tabWidget->addTab(graphics_advanced_tab.get(), tr("GraphicsAdvanced"));
- ui->tabWidget->addTab(graphics_extensions_tab.get(), tr("GraphicsExtensions"));
+ ui->tabWidget->addTab(graphics_extensions_tab.get(), tr("GraphicsExtra"));
ui->tabWidget->addTab(hotkeys_tab.get(), tr("Hotkeys"));
ui->tabWidget->addTab(input_tab.get(), tr("Controls"));
ui->tabWidget->addTab(profile_tab.get(), tr("Profiles"));
diff --git a/src/yuzu/configuration/configure_graphics_advanced.cpp b/src/yuzu/configuration/configure_graphics_advanced.cpp
index efcf7eabdf..9096e3252d 100644
--- a/src/yuzu/configuration/configure_graphics_advanced.cpp
+++ b/src/yuzu/configuration/configure_graphics_advanced.cpp
@@ -35,17 +35,9 @@ void ConfigureGraphicsAdvanced::SetConfiguration() {}
void ConfigureGraphicsAdvanced::Setup(const ConfigurationShared::Builder& builder) {
auto& normal_layout = *ui->normal_target->layout();
- auto& hacks_layout = *ui->hacks_target->layout();
// A map will sort the data for us
std::map<u32, QWidget*> normal_hold{};
- std::map<u32, QWidget*> hacks_hold{};
-
- // These options are hacks and should probably be changed with caution.
- // TODO(crueter) maybe make a separate category RendererHacks?
- QList<u32> hacks = {
- Settings::values.skip_cpu_inner_invalidation.Id(), Settings::values.async_presentation.Id(),
- Settings::values.use_asynchronous_shaders.Id(), Settings::values.fast_gpu_time.Id()};
for (auto setting :
Settings::values.linkage.by_category[Settings::Category::RendererAdvanced]) {
@@ -61,11 +53,7 @@ void ConfigureGraphicsAdvanced::Setup(const ConfigurationShared::Builder& builde
const auto id = setting->Id();
- if (hacks.contains(id)) {
- hacks_hold.emplace(id, widget);
- } else {
- normal_hold.emplace(id, widget);
- }
+ normal_hold.emplace(id, widget);
// Keep track of enable_compute_pipelines so we can display it when needed
if (setting->Id() == Settings::values.enable_compute_pipelines.Id()) {
@@ -76,10 +64,6 @@ void ConfigureGraphicsAdvanced::Setup(const ConfigurationShared::Builder& builde
for (const auto& [id, widget] : normal_hold) {
normal_layout.addWidget(widget);
}
-
- for (const auto& [id, widget] : hacks_hold) {
- hacks_layout.addWidget(widget);
- }
}
void ConfigureGraphicsAdvanced::ApplyConfiguration() {
diff --git a/src/yuzu/configuration/configure_graphics_advanced.ui b/src/yuzu/configuration/configure_graphics_advanced.ui
index 8c9ab1873b..bc8a9b2731 100644
--- a/src/yuzu/configuration/configure_graphics_advanced.ui
+++ b/src/yuzu/configuration/configure_graphics_advanced.ui
@@ -6,7 +6,7 @@
<rect>
<x>0</x>
<y>0</y>
- <width>404</width>
+ <width>465</width>
<height>376</height>
</rect>
</property>
@@ -45,43 +45,6 @@
</widget>
</item>
<item>
- <widget class="QGroupBox" name="hacks">
- <property name="title">
- <string>Hacks</string>
- </property>
- <layout class="QVBoxLayout" name="verticalLayout_6">
- <item>
- <widget class="QLabel" name="label">
- <property name="text">
- <string>Changing these options from their default may cause issues. Novitii cavete!</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QWidget" name="hacks_target" native="true">
- <layout class="QVBoxLayout" name="verticalLayout_7">
- <property name="spacing">
- <number>6</number>
- </property>
- <property name="leftMargin">
- <number>0</number>
- </property>
- <property name="topMargin">
- <number>0</number>
- </property>
- <property name="rightMargin">
- <number>0</number>
- </property>
- <property name="bottomMargin">
- <number>0</number>
- </property>
- </layout>
- </widget>
- </item>
- </layout>
- </widget>
- </item>
- <item>
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Orientation::Vertical</enum>
diff --git a/src/yuzu/configuration/configure_graphics_extensions.cpp b/src/yuzu/configuration/configure_graphics_extensions.cpp
index 71a428059e..7334eccc97 100644
--- a/src/yuzu/configuration/configure_graphics_extensions.cpp
+++ b/src/yuzu/configuration/configure_graphics_extensions.cpp
@@ -35,6 +35,7 @@ void ConfigureGraphicsExtensions::SetConfiguration() {}
void ConfigureGraphicsExtensions::Setup(const ConfigurationShared::Builder& builder) {
auto& layout = *ui->populate_target->layout();
+
std::map<u32, QWidget*> hold{}; // A map will sort the data for us
for (auto setting :
@@ -71,6 +72,28 @@ void ConfigureGraphicsExtensions::Setup(const ConfigurationShared::Builder& buil
for (const auto& [id, widget] : hold) {
layout.addWidget(widget);
}
+
+ auto& hacks = *ui->hacks_target->layout();
+ std::map<u32, QWidget*> hacks_hold{}; // A map will sort the data for us
+
+ for (auto setting : Settings::values.linkage.by_category[Settings::Category::RendererHacks]) {
+ auto* widget = builder.BuildWidget(setting, apply_funcs);
+
+ if (widget == nullptr) {
+ continue;
+ }
+
+ if (!widget->Valid()) {
+ widget->deleteLater();
+ continue;
+ }
+
+ hacks_hold.emplace(setting->Id(), widget);
+ }
+
+ for (const auto& [id, widget] : hacks_hold) {
+ hacks.addWidget(widget);
+ }
}
void ConfigureGraphicsExtensions::ApplyConfiguration() {
diff --git a/src/yuzu/configuration/configure_graphics_extensions.ui b/src/yuzu/configuration/configure_graphics_extensions.ui
index 7906b8318d..79a2107cc9 100644
--- a/src/yuzu/configuration/configure_graphics_extensions.ui
+++ b/src/yuzu/configuration/configure_graphics_extensions.ui
@@ -6,7 +6,7 @@
<rect>
<x>0</x>
<y>0</y>
- <width>404</width>
+ <width>465</width>
<height>376</height>
</rect>
</property>
@@ -14,15 +14,52 @@
<string>Form</string>
</property>
<property name="accessibleName">
- <string>Extensions</string>
+ <string>Extras</string>
</property>
- <layout class="QVBoxLayout" name="verticalLayout_1">
+ <layout class="QVBoxLayout" name="verticalLayout_4">
+ <item>
+ <widget class="QGroupBox" name="hacks">
+ <property name="title">
+ <string>Hacks</string>
+ </property>
+ <layout class="QVBoxLayout" name="verticalLayout_6">
+ <item>
+ <widget class="QLabel" name="label">
+ <property name="text">
+ <string>Changing these options from their default may cause issues. Novitii cavete!</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QWidget" name="hacks_target" native="true">
+ <layout class="QVBoxLayout" name="verticalLayout_7">
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <property name="leftMargin">
+ <number>0</number>
+ </property>
+ <property name="topMargin">
+ <number>0</number>
+ </property>
+ <property name="rightMargin">
+ <number>0</number>
+ </property>
+ <property name="bottomMargin">
+ <number>0</number>
+ </property>
+ </layout>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ </item>
<item>
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<widget class="QGroupBox" name="groupBox_1">
<property name="title">
- <string>Vulkan Extensions Settings</string>
+ <string>Vulkan Extensions</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_3">
<item>
diff --git a/src/yuzu/configuration/configure_per_game.cpp b/src/yuzu/configuration/configure_per_game.cpp
index 691fc766ae..e49978414c 100644
--- a/src/yuzu/configuration/configure_per_game.cpp
+++ b/src/yuzu/configuration/configure_per_game.cpp
@@ -77,7 +77,7 @@ ConfigurePerGame::ConfigurePerGame(QWidget* parent, u64 title_id_, const std::st
ui->tabWidget->addTab(cpu_tab.get(), tr("CPU"));
ui->tabWidget->addTab(graphics_tab.get(), tr("Graphics"));
ui->tabWidget->addTab(graphics_advanced_tab.get(), tr("Adv. Graphics"));
- ui->tabWidget->addTab(graphics_extensions_tab.get(), tr("GPU Extensions"));
+ ui->tabWidget->addTab(graphics_extensions_tab.get(), tr("Ext. Graphics"));
ui->tabWidget->addTab(audio_tab.get(), tr("Audio"));
ui->tabWidget->addTab(input_tab.get(), tr("Input Profiles"));
ui->tabWidget->addTab(network_tab.get(), tr("Network"));
diff --git a/src/yuzu/main_window.cpp b/src/yuzu/main_window.cpp
index 6d5d6fc03e..c246923fcc 100644
--- a/src/yuzu/main_window.cpp
+++ b/src/yuzu/main_window.cpp
@@ -1421,7 +1421,7 @@ void MainWindow::InitializeHotkeys() {
connect_shortcut(QStringLiteral("Change Adapting Filter"),
&MainWindow::OnToggleAdaptingFilter);
connect_shortcut(QStringLiteral("Change Docked Mode"), &MainWindow::OnToggleDockedMode);
- connect_shortcut(QStringLiteral("Change GPU Accuracy"), &MainWindow::OnToggleGpuAccuracy);
+ connect_shortcut(QStringLiteral("Change GPU Mode"), &MainWindow::OnToggleGpuAccuracy);
connect_shortcut(QStringLiteral("Audio Mute/Unmute"), &MainWindow::OnMute);
connect_shortcut(QStringLiteral("Audio Volume Down"), &MainWindow::OnDecreaseVolume);
connect_shortcut(QStringLiteral("Audio Volume Up"), &MainWindow::OnIncreaseVolume);
diff --git a/tools/find-unused-strings.sh b/tools/find-unused-strings.sh
deleted file mode 100755
index 62c8852435..0000000000
--- a/tools/find-unused-strings.sh
+++ /dev/null
@@ -1,28 +0,0 @@
-#!/bin/sh -e
-
-# SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
-# SPDX-License-Identifier: GPL-3.0-or-later
-
-# TODO: rewrite this to get a list of every string used in $ANDROID
-# then search strings.xml
-#
-ANDROID=src/android/app/src/main
-STRINGS=$ANDROID/res/values/strings.xml
-
-SRC=$(mktemp)
-
-# We start out by getting the list of source strings...
-grep -e "string name" $STRINGS | cut -d'"' -f2 > "$SRC"
-
-# ... then search for each string as R.string. or @string/
-while IFS= read -r str; do
- grep -qre "R.string.$str\|@string/$str" "$ANDROID" && continue
-
- echo "-- Removing unused string $str"
- sed "/string name=\"$str\"/d" "$STRINGS" > "$STRINGS.new"
- mv "$STRINGS.new" "$STRINGS"
-done < "$SRC"
-
-rm -rf "$TMP_DIR"
-
-tools/stale-translations.sh