From aff003fd6dab3e181cddcf53d2a61c823c2d41bb Mon Sep 17 00:00:00 2001 From: leo Date: Sun, 18 May 2025 22:00:35 +0800 Subject: [PATCH] enhance: cleanup unused resources Signed-off-by: leo --- src/ViewModels/Launcher.cs | 9 +++++---- src/ViewModels/LauncherPageSwitcher.cs | 19 ++++++++++++------- src/ViewModels/WorkspaceSwitcher.cs | 13 +++++++++---- src/Views/Launcher.axaml | 5 +++-- src/Views/Launcher.axaml.cs | 7 +++++++ src/Views/LauncherPageSwitcher.axaml.cs | 2 +- src/Views/LauncherTabBar.axaml | 2 +- src/Views/LauncherTabBar.axaml.cs | 20 +++++++++++++------- 8 files changed, 51 insertions(+), 26 deletions(-) diff --git a/src/ViewModels/Launcher.cs b/src/ViewModels/Launcher.cs index 3b6a4dd8..4c0714df 100644 --- a/src/ViewModels/Launcher.cs +++ b/src/ViewModels/Launcher.cs @@ -44,10 +44,10 @@ namespace SourceGit.ViewModels } } - public object Switcher + public IDisposable Switcher { get => _switcher; - set => SetProperty(ref _switcher, value); + private set => SetProperty(ref _switcher, value); } public Launcher(string startupRepo) @@ -148,12 +148,13 @@ namespace SourceGit.ViewModels public void CancelSwitcher() { + Switcher?.Dispose(); Switcher = null; } public void SwitchWorkspace(Workspace to) { - if (to.IsActive) + if (to == null || to.IsActive) return; foreach (var one in Pages) @@ -623,6 +624,6 @@ namespace SourceGit.ViewModels private LauncherPage _activePage = null; private bool _ignoreIndexChange = false; private string _title = string.Empty; - private object _switcher = null; + private IDisposable _switcher = null; } } diff --git a/src/ViewModels/LauncherPageSwitcher.cs b/src/ViewModels/LauncherPageSwitcher.cs index a73a216f..5f53021d 100644 --- a/src/ViewModels/LauncherPageSwitcher.cs +++ b/src/ViewModels/LauncherPageSwitcher.cs @@ -4,14 +4,14 @@ using CommunityToolkit.Mvvm.ComponentModel; namespace SourceGit.ViewModels { - public class LauncherPageSwitcher : ObservableObject + public class LauncherPageSwitcher : ObservableObject, IDisposable { public List VisiblePages { get => _visiblePages; private set => SetProperty(ref _visiblePages, value); } - + public string SearchFilter { get => _searchFilter; @@ -27,13 +27,13 @@ namespace SourceGit.ViewModels get => _selectedPage; set => SetProperty(ref _selectedPage, value); } - + public LauncherPageSwitcher(Launcher launcher) { _launcher = launcher; UpdateVisiblePages(); } - + public void ClearFilter() { SearchFilter = string.Empty; @@ -41,12 +41,17 @@ namespace SourceGit.ViewModels public void Switch() { - if (_selectedPage is { }) - _launcher.ActivePage = _selectedPage; - + _launcher.ActivePage = _selectedPage ?? _launcher.ActivePage; _launcher.CancelSwitcher(); } + public void Dispose() + { + _visiblePages.Clear(); + _selectedPage = null; + _searchFilter = string.Empty; + } + private void UpdateVisiblePages() { var visible = new List(); diff --git a/src/ViewModels/WorkspaceSwitcher.cs b/src/ViewModels/WorkspaceSwitcher.cs index 41f47631..7a2da9be 100644 --- a/src/ViewModels/WorkspaceSwitcher.cs +++ b/src/ViewModels/WorkspaceSwitcher.cs @@ -4,7 +4,7 @@ using CommunityToolkit.Mvvm.ComponentModel; namespace SourceGit.ViewModels { - public class WorkspaceSwitcher : ObservableObject + public class WorkspaceSwitcher : ObservableObject, IDisposable { public List VisibleWorkspaces { @@ -41,12 +41,17 @@ namespace SourceGit.ViewModels public void Switch() { - if (_selectedWorkspace is { }) - _launcher.SwitchWorkspace(_selectedWorkspace); - + _launcher.SwitchWorkspace(_selectedWorkspace); _launcher.CancelSwitcher(); } + public void Dispose() + { + _visibleWorkspaces.Clear(); + _selectedWorkspace = null; + _searchFilter = string.Empty; + } + private void UpdateVisibleWorkspaces() { var visible = new List(); diff --git a/src/Views/Launcher.axaml b/src/Views/Launcher.axaml index 18e307fe..bd115fef 100644 --- a/src/Views/Launcher.axaml +++ b/src/Views/Launcher.axaml @@ -104,9 +104,10 @@ - + IsVisible="{Binding Switcher, Converter={x:Static ObjectConverters.IsNotNull}}" + PointerPressed="OnCancelSwitcher"> diff --git a/src/Views/Launcher.axaml.cs b/src/Views/Launcher.axaml.cs index abcbaba9..be4cdf5b 100644 --- a/src/Views/Launcher.axaml.cs +++ b/src/Views/Launcher.axaml.cs @@ -322,6 +322,13 @@ namespace SourceGit.Views e.Handled = true; } + private void OnCancelSwitcher(object sender, PointerPressedEventArgs e) + { + if (e.Source == sender) + (DataContext as ViewModels.Launcher)?.CancelSwitcher(); + e.Handled = true; + } + private KeyModifiers _unhandledModifiers = KeyModifiers.None; private WindowState _lastWindowState = WindowState.Normal; } diff --git a/src/Views/LauncherPageSwitcher.axaml.cs b/src/Views/LauncherPageSwitcher.axaml.cs index 277eb549..1effb93c 100644 --- a/src/Views/LauncherPageSwitcher.axaml.cs +++ b/src/Views/LauncherPageSwitcher.axaml.cs @@ -9,7 +9,7 @@ namespace SourceGit.Views { InitializeComponent(); } - + protected override void OnKeyDown(KeyEventArgs e) { base.OnKeyDown(e); diff --git a/src/Views/LauncherTabBar.axaml b/src/Views/LauncherTabBar.axaml index f770a5d9..a56da2b0 100644 --- a/src/Views/LauncherTabBar.axaml +++ b/src/Views/LauncherTabBar.axaml @@ -141,7 +141,7 @@