From 9a71a1a1db1128816b8079624270995f24875fda Mon Sep 17 00:00:00 2001 From: indep-arg <333053532+indep-arg@users.noreply.github.com> Date: Sat, 10 Oct 2026 22:17:59 -0300 Subject: [PATCH] Add an option to turn off the unused-driver selection warning Issue #472 asks for a way to stop the "Select Unused Driver(s)" confirmation dialog from showing every time. Add "Warn Before Selecting Unused Drivers" under Options, on by default and saved like the other options. When it is off the selection happens straight away; the yellow review reminder in the status bar is still shown. The menu text is translated for all 21 locales. Because it has no generated Language property, the item is created in code after InitializeComponent(). That same setup now also restores the "Include Boot Critical in Old Drivers" check mark after switching language, which was previously lost. Fixes #472 --- Rapr/DSEForm.cs | 31 ++++++++++++++++++++++---- Rapr/Lang/Language.ar-SA.resx | 3 +++ Rapr/Lang/Language.de-DE.resx | 3 +++ Rapr/Lang/Language.el-GR.resx | 3 +++ Rapr/Lang/Language.es-ES.resx | 3 +++ Rapr/Lang/Language.fr-FR.resx | 3 +++ Rapr/Lang/Language.he-IL.resx | 3 +++ Rapr/Lang/Language.hu-HU.resx | 3 +++ Rapr/Lang/Language.it-IT.resx | 3 +++ Rapr/Lang/Language.ja-JP.resx | 3 +++ Rapr/Lang/Language.ko-KR.resx | 3 +++ Rapr/Lang/Language.nb-NO.resx | 3 +++ Rapr/Lang/Language.pl-PL.resx | 3 +++ Rapr/Lang/Language.pt-BR.resx | 3 +++ Rapr/Lang/Language.resx | 3 +++ Rapr/Lang/Language.ru-RU.resx | 3 +++ Rapr/Lang/Language.sk-SK.resx | 3 +++ Rapr/Lang/Language.tr-TR.resx | 3 +++ Rapr/Lang/Language.tt-RU.resx | 3 +++ Rapr/Lang/Language.uk-UA.resx | 3 +++ Rapr/Lang/Language.vi-VN.resx | 3 +++ Rapr/Lang/Language.zh-CN.resx | 3 +++ Rapr/Lang/Language.zh-TW.resx | 3 +++ Rapr/Properties/Settings.Designer.cs | 13 +++++++++++ Rapr/Properties/Settings.settings | 3 +++ RaprTests/DSEFormTests.cs | 33 ++++++++++++++++++++++++++++ 26 files changed, 142 insertions(+), 4 deletions(-) diff --git a/Rapr/DSEForm.cs b/Rapr/DSEForm.cs index 8af08f2..c89d6f8 100644 --- a/Rapr/DSEForm.cs +++ b/Rapr/DSEForm.cs @@ -36,6 +36,7 @@ public partial class DSEForm : Form private HashSet driversWithNewerDate = new HashSet(); private HashSet unusedDriversToReview = new HashSet(); + private ToolStripMenuItem warnBeforeSelectingUnusedDriversStripMenuItem; private static readonly IUpdateManager UpdateManager = CreateUpdateManager(); @@ -110,9 +111,7 @@ public DSEForm() this.Icon = DSEFormHelper.ExtractAssociatedIcon(Application.ExecutablePath); this.BuildLanguageMenu(); - - // Initialize the BootCritical option menu item - this.includeBootCriticalDriversStripMenuItem.Checked = Settings.Default.IncludeBootCriticalInOldDriverSelection; + this.SetupOptionsMenu(); this.lstDriverStoreEntries.PrimarySortColumn = this.driverClassColumn; this.lstDriverStoreEntries.PrimarySortOrder = SortOrder.Ascending; @@ -350,6 +349,23 @@ private void BuildLanguageMenu() } } + // Called after every InitializeComponent(), including when the language is switched, + // so the option menu items always reflect the saved settings. + private void SetupOptionsMenu() + { + this.includeBootCriticalDriversStripMenuItem.Checked = Settings.Default.IncludeBootCriticalInOldDriverSelection; + + // Created here because its text has no generated Language property yet. + this.warnBeforeSelectingUnusedDriversStripMenuItem = new ToolStripMenuItem + { + CheckOnClick = true, + Checked = Settings.Default.WarnBeforeSelectingUnusedDrivers, + Text = Language.ResourceManager.GetString("Menu_Options_WarnBeforeSelectingUnusedDrivers", Language.Culture), + }; + this.warnBeforeSelectingUnusedDriversStripMenuItem.Click += this.WarnBeforeSelectingUnusedDriversStripMenuItem_Click; + this.optionsStripMenuItem.DropDownItems.Add(this.warnBeforeSelectingUnusedDriversStripMenuItem); + } + private void EnsureOnScreen() { var workArea = Screen.GetWorkingArea(this); @@ -931,7 +947,7 @@ private void CtxMenuSelectUnusedDrivers_Click(object sender, EventArgs e) { if (!this.operationInProgress && this.driverStore.SupportDeviceNameColumn && this.lstDriverStoreEntries.Objects != null) { - if (!this.ConfirmUnusedDriverSelection()) + if (Settings.Default.WarnBeforeSelectingUnusedDrivers && !this.ConfirmUnusedDriverSelection()) { return; } @@ -1030,6 +1046,7 @@ private void SwitchCulture(object sender, EventArgs e) this.Controls.Clear(); this.InitializeComponent(); this.BuildLanguageMenu(); + this.SetupOptionsMenu(); this.RightToLeft = ci.TextInfo.IsRightToLeft ? RightToLeft.Yes : RightToLeft.No; this.RightToLeftLayout = ci.TextInfo.IsRightToLeft; this.SetupListViewColumns(); @@ -1491,6 +1508,12 @@ private void IncludeBootCriticalDriversStripMenuItem_Click(object sender, System Settings.Default.Save(); } + private void WarnBeforeSelectingUnusedDriversStripMenuItem_Click(object sender, System.EventArgs e) + { + Settings.Default.WarnBeforeSelectingUnusedDrivers = this.warnBeforeSelectingUnusedDriversStripMenuItem.Checked; + Settings.Default.Save(); + } + private async void CtxMenuExportDriver_Click(object sender, System.EventArgs e) { using (var dialog = new CommonOpenFileDialog { IsFolderPicker = true }) diff --git a/Rapr/Lang/Language.ar-SA.resx b/Rapr/Lang/Language.ar-SA.resx index d9eb128..5c660d2 100644 --- a/Rapr/Lang/Language.ar-SA.resx +++ b/Rapr/Lang/Language.ar-SA.resx @@ -505,4 +505,7 @@ https://github.com/lostindark/DriverStoreExplorer/blob/master/LICENSE قد تظل التعريفات المحددة مطلوبة. راجعها وأنشئ نسخة احتياطية منها قبل حذفها. + + التحذير قبل تحديد التعريفات غير المستخدمة + \ No newline at end of file diff --git a/Rapr/Lang/Language.de-DE.resx b/Rapr/Lang/Language.de-DE.resx index 1bf26df..f8bbe5c 100644 --- a/Rapr/Lang/Language.de-DE.resx +++ b/Rapr/Lang/Language.de-DE.resx @@ -542,4 +542,7 @@ Mit der Auswahl der Treiber fortfahren? Die ausgewählten Treiber werden möglicherweise weiterhin benötigt. Prüfen und sichern Sie die Treiber vor dem Löschen. + + Vor dem Auswählen nicht verwendeter Treiber warnen + diff --git a/Rapr/Lang/Language.el-GR.resx b/Rapr/Lang/Language.el-GR.resx index 44c6090..8dd143e 100644 --- a/Rapr/Lang/Language.el-GR.resx +++ b/Rapr/Lang/Language.el-GR.resx @@ -542,4 +542,7 @@ Credits: Οι επιλεγμένοι οδηγοί ενδέχεται να είναι ακόμα απαραίτητοι. Ελέγξτε τους και δημιουργήστε αντίγραφα ασφαλείας πριν από τη διαγραφή. + + Προειδοποίηση πριν από την επιλογή μη χρησιμοποιούμενων Drivers + diff --git a/Rapr/Lang/Language.es-ES.resx b/Rapr/Lang/Language.es-ES.resx index 273e938..aeb2e28 100644 --- a/Rapr/Lang/Language.es-ES.resx +++ b/Rapr/Lang/Language.es-ES.resx @@ -542,4 +542,7 @@ Borrarlos puede hacer que los programas o dispositivos dejen de funcionar. Revis Los controladores seleccionados podrían seguir siendo necesarios. Revíselos y haga una copia de seguridad antes de borrarlos. + + Advertir antes de seleccionar controladores sin usar + \ No newline at end of file diff --git a/Rapr/Lang/Language.fr-FR.resx b/Rapr/Lang/Language.fr-FR.resx index 0cef7e8..db9b577 100644 --- a/Rapr/Lang/Language.fr-FR.resx +++ b/Rapr/Lang/Language.fr-FR.resx @@ -542,4 +542,7 @@ Continuer la sélection des pilotes ? Les pilotes sélectionnés peuvent encore être nécessaires. Vérifiez-les et sauvegardez-les avant de les supprimer. + + Avertir avant de sélectionner les pilotes inutilisés + diff --git a/Rapr/Lang/Language.he-IL.resx b/Rapr/Lang/Language.he-IL.resx index f35cd14..674d90e 100644 --- a/Rapr/Lang/Language.he-IL.resx +++ b/Rapr/Lang/Language.he-IL.resx @@ -516,4 +516,7 @@ ייתכן שמנהלי ההתקנים שנבחרו עדיין נחוצים. יש לבדוק ולגבות אותם לפני המחיקה. + + הצג אזהרה לפני בחירת מנהלי התקנים שאינם בשימוש + \ No newline at end of file diff --git a/Rapr/Lang/Language.hu-HU.resx b/Rapr/Lang/Language.hu-HU.resx index 0eaea86..1345779 100644 --- a/Rapr/Lang/Language.hu-HU.resx +++ b/Rapr/Lang/Language.hu-HU.resx @@ -542,4 +542,7 @@ Folytatja az illesztőprogramok kiválasztását? A kijelölt illesztőprogramokra továbbra is szükség lehet. Törlés előtt ellenőrizze őket, és készítsen róluk biztonsági másolatot. + + Figyelmeztetés a nem használt illesztőprogramok kijelölése előtt + diff --git a/Rapr/Lang/Language.it-IT.resx b/Rapr/Lang/Language.it-IT.resx index e41fc3e..71bef5c 100644 --- a/Rapr/Lang/Language.it-IT.resx +++ b/Rapr/Lang/Language.it-IT.resx @@ -543,4 +543,7 @@ Continuare con la selezione dei driver? I driver selezionati potrebbero essere ancora necessari. Controllali ed esegui un backup prima di eliminarli. + + Avvisa prima di selezionare i driver non usati + diff --git a/Rapr/Lang/Language.ja-JP.resx b/Rapr/Lang/Language.ja-JP.resx index 1c616d1..2ca8a29 100644 --- a/Rapr/Lang/Language.ja-JP.resx +++ b/Rapr/Lang/Language.ja-JP.resx @@ -542,4 +542,7 @@ Windowsインストールまたはイメージのルートディレクトリ(W 選択したドライバーは引き続き必要な可能性があります。削除前に確認し、バックアップしてください。 + + 未使用のドライバーを選択する前に警告する + diff --git a/Rapr/Lang/Language.ko-KR.resx b/Rapr/Lang/Language.ko-KR.resx index ee08152..13c469f 100644 --- a/Rapr/Lang/Language.ko-KR.resx +++ b/Rapr/Lang/Language.ko-KR.resx @@ -542,4 +542,7 @@ Windows 폴더 자체가 아닌 Windows 설치 또는 이미지의 루트 디렉 선택한 드라이버가 여전히 필요할 수 있습니다. 삭제하기 전에 검토하고 백업하세요. + + 사용하지 않는 드라이버 선택 전에 경고 + diff --git a/Rapr/Lang/Language.nb-NO.resx b/Rapr/Lang/Language.nb-NO.resx index cd56512..e3384e9 100644 --- a/Rapr/Lang/Language.nb-NO.resx +++ b/Rapr/Lang/Language.nb-NO.resx @@ -542,4 +542,7 @@ Vil du fortsette å velge drivere? De valgte driverne kan fortsatt være nødvendige. Gå gjennom og sikkerhetskopier driverne før sletting. + + Advar før ubrukte drivere velges + \ No newline at end of file diff --git a/Rapr/Lang/Language.pl-PL.resx b/Rapr/Lang/Language.pl-PL.resx index 40db74f..e265731 100644 --- a/Rapr/Lang/Language.pl-PL.resx +++ b/Rapr/Lang/Language.pl-PL.resx @@ -542,4 +542,7 @@ Czy kontynuować wybieranie sterowników? Wybrane sterowniki mogą być nadal potrzebne. Sprawdź je i wykonaj kopię zapasową przed usunięciem. + + Ostrzegaj przed wybraniem nieużywanych sterowników + diff --git a/Rapr/Lang/Language.pt-BR.resx b/Rapr/Lang/Language.pt-BR.resx index f2a134e..e83523b 100644 --- a/Rapr/Lang/Language.pt-BR.resx +++ b/Rapr/Lang/Language.pt-BR.resx @@ -506,4 +506,7 @@ Continuar selecionando drivers? Os drivers selecionados ainda podem ser necessários. Revise-os e faça backup antes de excluí-los. + + Avisar antes de selecionar drivers não usados + diff --git a/Rapr/Lang/Language.resx b/Rapr/Lang/Language.resx index 4eb46f6..1515b60 100644 --- a/Rapr/Lang/Language.resx +++ b/Rapr/Lang/Language.resx @@ -542,4 +542,7 @@ Continue selecting drivers? Selected drivers may still be required. Review and back up drivers before deleting. + + Warn Before Selecting Unused Drivers + diff --git a/Rapr/Lang/Language.ru-RU.resx b/Rapr/Lang/Language.ru-RU.resx index 62a6459..c1ddac6 100644 --- a/Rapr/Lang/Language.ru-RU.resx +++ b/Rapr/Lang/Language.ru-RU.resx @@ -542,4 +542,7 @@ Выбранные драйверы могут по-прежнему быть необходимы. Проверьте их и создайте резервную копию перед удалением. + + Предупреждать перед выделением неиспользуемых драйверов + diff --git a/Rapr/Lang/Language.sk-SK.resx b/Rapr/Lang/Language.sk-SK.resx index ec05a4c..c57f762 100644 --- a/Rapr/Lang/Language.sk-SK.resx +++ b/Rapr/Lang/Language.sk-SK.resx @@ -542,4 +542,7 @@ Pokračovať vo výbere ovládačov? Vybrané ovládače môžu byť stále potrebné. Pred odstránením ich skontrolujte a zálohujte. + + Upozorniť pred označením nepoužívaných ovládačov + diff --git a/Rapr/Lang/Language.tr-TR.resx b/Rapr/Lang/Language.tr-TR.resx index 2e9a129..b449486 100644 --- a/Rapr/Lang/Language.tr-TR.resx +++ b/Rapr/Lang/Language.tr-TR.resx @@ -542,4 +542,7 @@ Sürücü seçimine devam edilsin mi? Seçilen sürücüler hâlâ gerekli olabilir. Silmeden önce sürücüleri gözden geçirin ve yedekleyin. + + Kullanılmayan Sürücüleri Seçmeden Önce Uyar + diff --git a/Rapr/Lang/Language.tt-RU.resx b/Rapr/Lang/Language.tt-RU.resx index e97f92f..8d59531 100644 --- a/Rapr/Lang/Language.tt-RU.resx +++ b/Rapr/Lang/Language.tt-RU.resx @@ -542,4 +542,7 @@ Сайланган драйверлар һаман кирәк булырга мөмкин. Бетерер алдыннан аларны тикшерегез һәм резерв күчермәсен ясагыз. + + Кулланылмый торган драйверларны сайлау алдыннан кисәтү + \ No newline at end of file diff --git a/Rapr/Lang/Language.uk-UA.resx b/Rapr/Lang/Language.uk-UA.resx index e52a49d..226fa3c 100644 --- a/Rapr/Lang/Language.uk-UA.resx +++ b/Rapr/Lang/Language.uk-UA.resx @@ -542,4 +542,7 @@ Вибрані драйвери можуть і далі бути потрібними. Перевірте їх і створіть резервну копію перед видаленням. + + Попереджати перед вибором невикористаних драйверів + diff --git a/Rapr/Lang/Language.vi-VN.resx b/Rapr/Lang/Language.vi-VN.resx index cdbd091..1d8a743 100644 --- a/Rapr/Lang/Language.vi-VN.resx +++ b/Rapr/Lang/Language.vi-VN.resx @@ -547,4 +547,7 @@ Tiếp tục chọn driver? Các driver đã chọn có thể vẫn cần thiết. Hãy kiểm tra và sao lưu các driver trước khi xóa. + + Cảnh báo trước khi chọn các driver không sử dụng + \ No newline at end of file diff --git a/Rapr/Lang/Language.zh-CN.resx b/Rapr/Lang/Language.zh-CN.resx index b958818..f5313ff 100644 --- a/Rapr/Lang/Language.zh-CN.resx +++ b/Rapr/Lang/Language.zh-CN.resx @@ -508,4 +508,7 @@ 所选驱动可能仍然需要使用。请在删除前检查并备份驱动。 + + 选择未使用的驱动前显示警告 + diff --git a/Rapr/Lang/Language.zh-TW.resx b/Rapr/Lang/Language.zh-TW.resx index 089f424..44ba6fd 100644 --- a/Rapr/Lang/Language.zh-TW.resx +++ b/Rapr/Lang/Language.zh-TW.resx @@ -541,4 +541,7 @@ 選取的驅動程式可能仍有需要。請在刪除前檢查並備份驅動程式。 + + 選擇未使用的驅動程式前顯示警告 + diff --git a/Rapr/Properties/Settings.Designer.cs b/Rapr/Properties/Settings.Designer.cs index 957abc0..f909f46 100644 --- a/Rapr/Properties/Settings.Designer.cs +++ b/Rapr/Properties/Settings.Designer.cs @@ -147,5 +147,18 @@ public string DriverStoreOption { this["LogRetentionPeriod"] = value; } } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("True")] + [global::System.Configuration.SettingsManageabilityAttribute(global::System.Configuration.SettingsManageability.Roaming)] + public bool WarnBeforeSelectingUnusedDrivers { + get { + return ((bool)(this["WarnBeforeSelectingUnusedDrivers"])); + } + set { + this["WarnBeforeSelectingUnusedDrivers"] = value; + } + } } } diff --git a/Rapr/Properties/Settings.settings b/Rapr/Properties/Settings.settings index b00f90a..11638a6 100644 --- a/Rapr/Properties/Settings.settings +++ b/Rapr/Properties/Settings.settings @@ -29,6 +29,9 @@ Native + + True + 180.00:00:00 diff --git a/RaprTests/DSEFormTests.cs b/RaprTests/DSEFormTests.cs index ea45e8c..4fd82a6 100644 --- a/RaprTests/DSEFormTests.cs +++ b/RaprTests/DSEFormTests.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Configuration; using System.Diagnostics; using System.Drawing; using System.Linq; @@ -207,6 +208,38 @@ public void UnusedDriverSelectionRequiresConfirmationBeforeChangingChecks(string }); } + [TestMethod] + [DataRow("CtxMenuSelectUnusedDrivers_Click")] + [DataRow("ButtonSelectUnusedDrivers_Click")] + public void DisabledUnusedDriverWarningSelectsWithoutConfirmation(string handler) + { + // Settings is internal to Rapr, so reach it through ApplicationSettingsBase. + var settings = (ApplicationSettingsBase)typeof(DSEForm).Assembly + .GetType("Rapr.Properties.Settings") + .GetProperty("Default", BindingFlags.Static | BindingFlags.Public) + .GetValue(null); + object previous = settings["WarnBeforeSelectingUnusedDrivers"]; + settings["WarnBeforeSelectingUnusedDrivers"] = false; + + try + { + WithSelectionForm((form, list) => + { + var unused = CreateDriver("unused.inf", 1); + list.SetObjects(new[] { unused }); + + Invoke(form, handler, null, EventArgs.Empty); + + Assert.AreEqual(0, ((SelectionTestForm)form).ConfirmationCount); + CollectionAssert.AreEquivalent(new[] { unused }, list.CheckedObjects.Cast().ToArray()); + }); + } + finally + { + settings["WarnBeforeSelectingUnusedDrivers"] = previous; + } + } + [TestMethod] [DataRow(true, false)] [DataRow(false, true)]