From 8c3527afc14c757cacb2ffea1ca56aed25339ed8 Mon Sep 17 00:00:00 2001 From: BornToBeRoot <16019165+BornToBeRoot@users.noreply.github.com> Date: Wed, 21 Oct 2026 03:50:53 +0200 Subject: [PATCH 1/4] Fix: Profile search filters while typing DispatcherTimer.Start() is a no-op while the timer is running, so the search was filtered 750 ms after the first key press instead of after the last one. Reset the timer (Stop + Start) on every change. Co-Authored-By: Claude Opus 5.5 --- .../ViewModels/ImportProfilesResultViewModel.cs | 4 ++++ Source/NETworkManager/ViewModels/ProfileHostViewModelBase.cs | 4 ++++ Source/NETworkManager/ViewModels/ProfilesViewModel.cs | 4 ++++ Website/docs/changelog/next-release.md | 1 + 4 files changed, 13 insertions(+) diff --git a/Source/NETworkManager/ViewModels/ImportProfilesResultViewModel.cs b/Source/NETworkManager/ViewModels/ImportProfilesResultViewModel.cs index 3d608f6b0b..897d3f4fdc 100644 --- a/Source/NETworkManager/ViewModels/ImportProfilesResultViewModel.cs +++ b/Source/NETworkManager/ViewModels/ImportProfilesResultViewModel.cs @@ -78,6 +78,10 @@ public string Search field = value; IsSearching = true; + + // Stop + Start (instead of just Start) to reset the due time on every change -- + // DispatcherTimer.Start() is a no-op while it's already running. + _searchDispatcherTimer.Stop(); _searchDispatcherTimer.Start(); OnPropertyChanged(); diff --git a/Source/NETworkManager/ViewModels/ProfileHostViewModelBase.cs b/Source/NETworkManager/ViewModels/ProfileHostViewModelBase.cs index b8c1d66bf1..e79e79f019 100644 --- a/Source/NETworkManager/ViewModels/ProfileHostViewModelBase.cs +++ b/Source/NETworkManager/ViewModels/ProfileHostViewModelBase.cs @@ -95,6 +95,10 @@ public string Search if (!_searchDisabled) { IsSearching = true; + + // Stop + Start (instead of just Start) to reset the due time on every change -- + // DispatcherTimer.Start() is a no-op while it's already running. + _searchDispatcherTimer.Stop(); _searchDispatcherTimer.Start(); } diff --git a/Source/NETworkManager/ViewModels/ProfilesViewModel.cs b/Source/NETworkManager/ViewModels/ProfilesViewModel.cs index 9bfd752aba..b0e9033b65 100644 --- a/Source/NETworkManager/ViewModels/ProfilesViewModel.cs +++ b/Source/NETworkManager/ViewModels/ProfilesViewModel.cs @@ -150,6 +150,10 @@ public string Search if (!_searchDisabled) { IsSearching = true; + + // Stop + Start (instead of just Start) to reset the due time on every change -- + // DispatcherTimer.Start() is a no-op while it's already running. + _searchDispatcherTimer.Stop(); _searchDispatcherTimer.Start(); } diff --git a/Website/docs/changelog/next-release.md b/Website/docs/changelog/next-release.md index f1a0e31af8..b889f68ee1 100644 --- a/Website/docs/changelog/next-release.md +++ b/Website/docs/changelog/next-release.md @@ -98,6 +98,7 @@ Release date: **xx.xx.2026** ## Bug Fixes - Fixed changes to lists in the settings (e.g. query histories, port profiles, custom commands) not being saved if no other setting was changed in the same session. This happened since the settings are stored as JSON. [#3607](https://github.com/BornToBeRoot/NETworkManager/pull/3607) +- Fixed the profile search (profile list in the tools, **Profiles** settings and import result) filtering the profiles while still typing. The profiles are now filtered once after the user stopped typing, instead of every 750 ms after the first key press. **Firewall** From 8363a569f7f46e71810911cef93b77c5833fbd7a Mon Sep 17 00:00:00 2001 From: BornToBeRoot <16019165+BornToBeRoot@users.noreply.github.com> Date: Wed, 21 Oct 2026 03:58:03 +0200 Subject: [PATCH 2/4] Fix: WiFi connection status message hidden too early The hide timer was not reset when a new message was shown, because DispatcherTimer.Start() is a no-op while the timer is running. Also shorten the timer comments of the profile search fix. Co-Authored-By: Claude Opus 5.5 --- .../ViewModels/ImportProfilesResultViewModel.cs | 3 +-- .../ViewModels/ProfileHostViewModelBase.cs | 3 +-- .../ViewModels/ProfilesViewModel.cs | 3 +-- Source/NETworkManager/ViewModels/WiFiViewModel.cs | 15 ++++++++++----- Website/docs/changelog/next-release.md | 4 ++++ 5 files changed, 17 insertions(+), 11 deletions(-) diff --git a/Source/NETworkManager/ViewModels/ImportProfilesResultViewModel.cs b/Source/NETworkManager/ViewModels/ImportProfilesResultViewModel.cs index 897d3f4fdc..e82765bfbd 100644 --- a/Source/NETworkManager/ViewModels/ImportProfilesResultViewModel.cs +++ b/Source/NETworkManager/ViewModels/ImportProfilesResultViewModel.cs @@ -79,8 +79,7 @@ public string Search IsSearching = true; - // Stop + Start (instead of just Start) to reset the due time on every change -- - // DispatcherTimer.Start() is a no-op while it's already running. + // Stop + Start, because Start() doesn't reset a running timer _searchDispatcherTimer.Stop(); _searchDispatcherTimer.Start(); diff --git a/Source/NETworkManager/ViewModels/ProfileHostViewModelBase.cs b/Source/NETworkManager/ViewModels/ProfileHostViewModelBase.cs index e79e79f019..f097d33a05 100644 --- a/Source/NETworkManager/ViewModels/ProfileHostViewModelBase.cs +++ b/Source/NETworkManager/ViewModels/ProfileHostViewModelBase.cs @@ -96,8 +96,7 @@ public string Search { IsSearching = true; - // Stop + Start (instead of just Start) to reset the due time on every change -- - // DispatcherTimer.Start() is a no-op while it's already running. + // Stop + Start, because Start() doesn't reset a running timer _searchDispatcherTimer.Stop(); _searchDispatcherTimer.Start(); } diff --git a/Source/NETworkManager/ViewModels/ProfilesViewModel.cs b/Source/NETworkManager/ViewModels/ProfilesViewModel.cs index b0e9033b65..6fe0f0373a 100644 --- a/Source/NETworkManager/ViewModels/ProfilesViewModel.cs +++ b/Source/NETworkManager/ViewModels/ProfilesViewModel.cs @@ -151,8 +151,7 @@ public string Search { IsSearching = true; - // Stop + Start (instead of just Start) to reset the due time on every change -- - // DispatcherTimer.Start() is a no-op while it's already running. + // Stop + Start, because Start() doesn't reset a running timer _searchDispatcherTimer.Stop(); _searchDispatcherTimer.Start(); } diff --git a/Source/NETworkManager/ViewModels/WiFiViewModel.cs b/Source/NETworkManager/ViewModels/WiFiViewModel.cs index 43e2ed1c5b..37dc2c6f17 100644 --- a/Source/NETworkManager/ViewModels/WiFiViewModel.cs +++ b/Source/NETworkManager/ViewModels/WiFiViewModel.cs @@ -1120,7 +1120,8 @@ private void Connect() var ssid = selectedNetwork.IsHidden ? instance.Ssid : selectedNetwork.AvailableNetwork.Ssid; - // Show status message + // Show status message (not hidden by the timer of a previous message) + _hideConnectionStatusMessageTimer.Stop(); IsConnecting = true; ConnectionStatusMessage = string.Format(Strings.ConnectingToXXX, ssid); IsConnectionStatusMessageDisplayed = true; @@ -1165,7 +1166,8 @@ private void Connect() : string.Format(Strings.CouldNotConnectToXXXReasonXXX, ssid, ResourceTranslator.Translate(ResourceIdentifier.WiFiConnectionStatus, connectionResult)); - // Hide message automatically + // Hide message automatically (Stop + Start, because Start() doesn't reset a running timer) + _hideConnectionStatusMessageTimer.Stop(); _hideConnectionStatusMessageTimer.Start(); // Update the Wi-Fi networks. @@ -1179,7 +1181,8 @@ private void Connect() var ssid = selectedNetwork.IsHidden ? instance.Ssid : selectedNetwork.AvailableNetwork.Ssid; - // Show status message + // Show status message (not hidden by the timer of a previous message) + _hideConnectionStatusMessageTimer.Stop(); IsConnecting = true; ConnectionStatusMessage = string.Format(Strings.ConnectingToXXX, ssid); IsConnectionStatusMessageDisplayed = true; @@ -1202,7 +1205,8 @@ private void Connect() : string.Format(Strings.CouldNotConnectToXXXReasonXXX, ssid, ResourceTranslator.Translate(ResourceIdentifier.WiFiConnectionStatus, connectionResult)); - // Hide message automatically + // Hide message automatically (Stop + Start, because Start() doesn't reset a running timer) + _hideConnectionStatusMessageTimer.Stop(); _hideConnectionStatusMessageTimer.Start(); // Update the Wi-Fi networks. @@ -1240,7 +1244,8 @@ private async void Disconnect() connectedNetwork.AvailableNetwork.Ssid); IsConnectionStatusMessageDisplayed = true; - // Hide message automatically + // Hide message automatically (Stop + Start, because Start() doesn't reset a running timer) + _hideConnectionStatusMessageTimer.Stop(); _hideConnectionStatusMessageTimer.Start(); } diff --git a/Website/docs/changelog/next-release.md b/Website/docs/changelog/next-release.md index b889f68ee1..5b3b95c009 100644 --- a/Website/docs/changelog/next-release.md +++ b/Website/docs/changelog/next-release.md @@ -135,6 +135,10 @@ Release date: **xx.xx.2026** - Fixed the query history of **IP Geolocation** being written to the history of **Whois** instead of its own. [#3607](https://github.com/BornToBeRoot/NETworkManager/pull/3607) +**WiFi** + +- Fixed the connection status message (e.g. "Connecting to ...") being hidden too early, while still connecting, if a previous message (e.g. after connecting or disconnecting) was shown shortly before. Each message is now shown for 15 seconds. + ## Dependencies, Refactoring & Documentation - Code cleanup & refactoring From a5d6d7dd3e2690d9f4aa64d4c798f2dcac70931e Mon Sep 17 00:00:00 2001 From: BornToBeRoot <16019165+BornToBeRoot@users.noreply.github.com> Date: Wed, 21 Oct 2026 04:04:33 +0200 Subject: [PATCH 3/4] Docs: Add PR link to changelog Co-Authored-By: Claude Opus 5.5 --- Website/docs/changelog/next-release.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Website/docs/changelog/next-release.md b/Website/docs/changelog/next-release.md index 5b3b95c009..f7bff1533e 100644 --- a/Website/docs/changelog/next-release.md +++ b/Website/docs/changelog/next-release.md @@ -98,7 +98,7 @@ Release date: **xx.xx.2026** ## Bug Fixes - Fixed changes to lists in the settings (e.g. query histories, port profiles, custom commands) not being saved if no other setting was changed in the same session. This happened since the settings are stored as JSON. [#3607](https://github.com/BornToBeRoot/NETworkManager/pull/3607) -- Fixed the profile search (profile list in the tools, **Profiles** settings and import result) filtering the profiles while still typing. The profiles are now filtered once after the user stopped typing, instead of every 750 ms after the first key press. +- Fixed the profile search (profile list in the tools, **Profiles** settings and import result) filtering the profiles while still typing. The profiles are now filtered once after the user stopped typing, instead of every 750 ms after the first key press. [#3638](https://github.com/BornToBeRoot/NETworkManager/pull/3638) **Firewall** @@ -137,7 +137,7 @@ Release date: **xx.xx.2026** **WiFi** -- Fixed the connection status message (e.g. "Connecting to ...") being hidden too early, while still connecting, if a previous message (e.g. after connecting or disconnecting) was shown shortly before. Each message is now shown for 15 seconds. +- Fixed the connection status message (e.g. "Connecting to ...") being hidden too early, while still connecting, if a previous message (e.g. after connecting or disconnecting) was shown shortly before. Each message is now shown for 15 seconds. [#3638](https://github.com/BornToBeRoot/NETworkManager/pull/3638) ## Dependencies, Refactoring & Documentation From 6ce57c3415cafb0193f15ca88e863c345607a85a Mon Sep 17 00:00:00 2001 From: BornToBeRoot <16019165+BornToBeRoot@users.noreply.github.com> Date: Wed, 21 Oct 2026 04:08:48 +0200 Subject: [PATCH 4/4] Chore: Remove obvious timer comments Co-Authored-By: Claude Opus 5.5 --- .../ViewModels/ImportProfilesResultViewModel.cs | 2 -- .../NETworkManager/ViewModels/ProfileHostViewModelBase.cs | 2 -- Source/NETworkManager/ViewModels/ProfilesViewModel.cs | 2 -- Source/NETworkManager/ViewModels/WiFiViewModel.cs | 6 +++--- 4 files changed, 3 insertions(+), 9 deletions(-) diff --git a/Source/NETworkManager/ViewModels/ImportProfilesResultViewModel.cs b/Source/NETworkManager/ViewModels/ImportProfilesResultViewModel.cs index e82765bfbd..d793453a64 100644 --- a/Source/NETworkManager/ViewModels/ImportProfilesResultViewModel.cs +++ b/Source/NETworkManager/ViewModels/ImportProfilesResultViewModel.cs @@ -78,8 +78,6 @@ public string Search field = value; IsSearching = true; - - // Stop + Start, because Start() doesn't reset a running timer _searchDispatcherTimer.Stop(); _searchDispatcherTimer.Start(); diff --git a/Source/NETworkManager/ViewModels/ProfileHostViewModelBase.cs b/Source/NETworkManager/ViewModels/ProfileHostViewModelBase.cs index f097d33a05..dd58d3e331 100644 --- a/Source/NETworkManager/ViewModels/ProfileHostViewModelBase.cs +++ b/Source/NETworkManager/ViewModels/ProfileHostViewModelBase.cs @@ -95,8 +95,6 @@ public string Search if (!_searchDisabled) { IsSearching = true; - - // Stop + Start, because Start() doesn't reset a running timer _searchDispatcherTimer.Stop(); _searchDispatcherTimer.Start(); } diff --git a/Source/NETworkManager/ViewModels/ProfilesViewModel.cs b/Source/NETworkManager/ViewModels/ProfilesViewModel.cs index 6fe0f0373a..a38ea2c606 100644 --- a/Source/NETworkManager/ViewModels/ProfilesViewModel.cs +++ b/Source/NETworkManager/ViewModels/ProfilesViewModel.cs @@ -150,8 +150,6 @@ public string Search if (!_searchDisabled) { IsSearching = true; - - // Stop + Start, because Start() doesn't reset a running timer _searchDispatcherTimer.Stop(); _searchDispatcherTimer.Start(); } diff --git a/Source/NETworkManager/ViewModels/WiFiViewModel.cs b/Source/NETworkManager/ViewModels/WiFiViewModel.cs index 37dc2c6f17..f2f71be416 100644 --- a/Source/NETworkManager/ViewModels/WiFiViewModel.cs +++ b/Source/NETworkManager/ViewModels/WiFiViewModel.cs @@ -1166,7 +1166,7 @@ private void Connect() : string.Format(Strings.CouldNotConnectToXXXReasonXXX, ssid, ResourceTranslator.Translate(ResourceIdentifier.WiFiConnectionStatus, connectionResult)); - // Hide message automatically (Stop + Start, because Start() doesn't reset a running timer) + // Hide message automatically _hideConnectionStatusMessageTimer.Stop(); _hideConnectionStatusMessageTimer.Start(); @@ -1205,7 +1205,7 @@ private void Connect() : string.Format(Strings.CouldNotConnectToXXXReasonXXX, ssid, ResourceTranslator.Translate(ResourceIdentifier.WiFiConnectionStatus, connectionResult)); - // Hide message automatically (Stop + Start, because Start() doesn't reset a running timer) + // Hide message automatically _hideConnectionStatusMessageTimer.Stop(); _hideConnectionStatusMessageTimer.Start(); @@ -1244,7 +1244,7 @@ private async void Disconnect() connectedNetwork.AvailableNetwork.Ssid); IsConnectionStatusMessageDisplayed = true; - // Hide message automatically (Stop + Start, because Start() doesn't reset a running timer) + // Hide message automatically _hideConnectionStatusMessageTimer.Stop(); _hideConnectionStatusMessageTimer.Start(); }