Skip to content

Commit aff003f

Browse files
committed
enhance: cleanup unused resources
Signed-off-by: leo <[email protected]>
1 parent b78f6b0 commit aff003f

File tree

8 files changed

+51
-26
lines changed

8 files changed

+51
-26
lines changed

src/ViewModels/Launcher.cs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -44,10 +44,10 @@ public LauncherPage ActivePage
4444
}
4545
}
4646

47-
public object Switcher
47+
public IDisposable Switcher
4848
{
4949
get => _switcher;
50-
set => SetProperty(ref _switcher, value);
50+
private set => SetProperty(ref _switcher, value);
5151
}
5252

5353
public Launcher(string startupRepo)
@@ -148,12 +148,13 @@ public void OpenTabSwitcher()
148148

149149
public void CancelSwitcher()
150150
{
151+
Switcher?.Dispose();
151152
Switcher = null;
152153
}
153154

154155
public void SwitchWorkspace(Workspace to)
155156
{
156-
if (to.IsActive)
157+
if (to == null || to.IsActive)
157158
return;
158159

159160
foreach (var one in Pages)
@@ -623,6 +624,6 @@ private void UpdateTitle()
623624
private LauncherPage _activePage = null;
624625
private bool _ignoreIndexChange = false;
625626
private string _title = string.Empty;
626-
private object _switcher = null;
627+
private IDisposable _switcher = null;
627628
}
628629
}

src/ViewModels/LauncherPageSwitcher.cs

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,14 @@
44

55
namespace SourceGit.ViewModels
66
{
7-
public class LauncherPageSwitcher : ObservableObject
7+
public class LauncherPageSwitcher : ObservableObject, IDisposable
88
{
99
public List<LauncherPage> VisiblePages
1010
{
1111
get => _visiblePages;
1212
private set => SetProperty(ref _visiblePages, value);
1313
}
14-
14+
1515
public string SearchFilter
1616
{
1717
get => _searchFilter;
@@ -27,26 +27,31 @@ public LauncherPage SelectedPage
2727
get => _selectedPage;
2828
set => SetProperty(ref _selectedPage, value);
2929
}
30-
30+
3131
public LauncherPageSwitcher(Launcher launcher)
3232
{
3333
_launcher = launcher;
3434
UpdateVisiblePages();
3535
}
36-
36+
3737
public void ClearFilter()
3838
{
3939
SearchFilter = string.Empty;
4040
}
4141

4242
public void Switch()
4343
{
44-
if (_selectedPage is { })
45-
_launcher.ActivePage = _selectedPage;
46-
44+
_launcher.ActivePage = _selectedPage ?? _launcher.ActivePage;
4745
_launcher.CancelSwitcher();
4846
}
4947

48+
public void Dispose()
49+
{
50+
_visiblePages.Clear();
51+
_selectedPage = null;
52+
_searchFilter = string.Empty;
53+
}
54+
5055
private void UpdateVisiblePages()
5156
{
5257
var visible = new List<LauncherPage>();

src/ViewModels/WorkspaceSwitcher.cs

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
namespace SourceGit.ViewModels
66
{
7-
public class WorkspaceSwitcher : ObservableObject
7+
public class WorkspaceSwitcher : ObservableObject, IDisposable
88
{
99
public List<Workspace> VisibleWorkspaces
1010
{
@@ -41,12 +41,17 @@ public void ClearFilter()
4141

4242
public void Switch()
4343
{
44-
if (_selectedWorkspace is { })
45-
_launcher.SwitchWorkspace(_selectedWorkspace);
46-
44+
_launcher.SwitchWorkspace(_selectedWorkspace);
4745
_launcher.CancelSwitcher();
4846
}
4947

48+
public void Dispose()
49+
{
50+
_visibleWorkspaces.Clear();
51+
_selectedWorkspace = null;
52+
_searchFilter = string.Empty;
53+
}
54+
5055
private void UpdateVisibleWorkspaces()
5156
{
5257
var visible = new List<Workspace>();

src/Views/Launcher.axaml

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -104,9 +104,10 @@
104104
</ContentControl>
105105

106106
<!-- Workspace/Pages Switcher -->
107-
<Border Grid.Row="1"
107+
<Border Grid.Row="0" Grid.RowSpan="2"
108108
Background="Transparent"
109-
IsVisible="{Binding Switcher, Converter={x:Static ObjectConverters.IsNotNull}}">
109+
IsVisible="{Binding Switcher, Converter={x:Static ObjectConverters.IsNotNull}}"
110+
PointerPressed="OnCancelSwitcher">
110111
<Border HorizontalAlignment="Center" VerticalAlignment="Center" Effect="drop-shadow(0 0 12 #A0000000)">
111112
<Border Background="{DynamicResource Brush.Popup}" CornerRadius="8">
112113
<ContentControl Margin="16,10,16,12" Content="{Binding Switcher}">

src/Views/Launcher.axaml.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -322,6 +322,13 @@ private void OnOpenWorkspaceMenu(object sender, RoutedEventArgs e)
322322
e.Handled = true;
323323
}
324324

325+
private void OnCancelSwitcher(object sender, PointerPressedEventArgs e)
326+
{
327+
if (e.Source == sender)
328+
(DataContext as ViewModels.Launcher)?.CancelSwitcher();
329+
e.Handled = true;
330+
}
331+
325332
private KeyModifiers _unhandledModifiers = KeyModifiers.None;
326333
private WindowState _lastWindowState = WindowState.Normal;
327334
}

src/Views/LauncherPageSwitcher.axaml.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ public LauncherPageSwitcher()
99
{
1010
InitializeComponent();
1111
}
12-
12+
1313
protected override void OnKeyDown(KeyEventArgs e)
1414
{
1515
base.OnKeyDown(e);

src/Views/LauncherTabBar.axaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,7 @@
141141

142142
<Button x:Name="PageSelector" Classes="icon_button" Width="16" Height="16" Margin="8,0">
143143
<Button.Flyout>
144-
<Flyout Opened="OnTabsDropdownOpened">
144+
<Flyout Opened="OnTabsDropdownOpened" Closed="OnTabsDropdownClosed">
145145
<Grid RowDefinitions="28,Auto" KeyDown="OnTabsDropdownKeyDown" LostFocus="OnTabsDropdownLostFocus">
146146
<TextBox Grid.Row="0"
147147
Height="24"

src/Views/LauncherTabBar.axaml.cs

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ public bool IsScrollerVisible
1919
get => GetValue(IsScrollerVisibleProperty);
2020
set => SetValue(IsScrollerVisibleProperty, value);
2121
}
22-
22+
2323
public static readonly StyledProperty<string> SearchFilterProperty =
2424
AvaloniaProperty.Register<LauncherTabBar, string>(nameof(SearchFilter));
2525

@@ -140,15 +140,15 @@ public override void Render(DrawingContext context)
140140
var stroke = new Pen(this.FindResource("Brush.Border0") as IBrush);
141141
context.DrawGeometry(fill, stroke, geo);
142142
}
143-
143+
144144
protected override void OnPropertyChanged(AvaloniaPropertyChangedEventArgs change)
145145
{
146146
base.OnPropertyChanged(change);
147147

148148
if (change.Property == SearchFilterProperty)
149149
UpdateSelectablePages();
150150
}
151-
151+
152152
private void ScrollTabs(object _, PointerWheelEventArgs e)
153153
{
154154
if (!e.KeyModifiers.HasFlag(KeyModifiers.Shift))
@@ -270,12 +270,18 @@ private void OnCloseTab(object sender, RoutedEventArgs e)
270270

271271
e.Handled = true;
272272
}
273-
273+
274274
private void OnTabsDropdownOpened(object sender, EventArgs e)
275275
{
276276
UpdateSelectablePages();
277277
}
278-
278+
279+
private void OnTabsDropdownClosed(object sender, EventArgs e)
280+
{
281+
SelectablePages.Clear();
282+
SearchFilter = string.Empty;
283+
}
284+
279285
private void OnTabsDropdownKeyDown(object sender, KeyEventArgs e)
280286
{
281287
if (e.Key == Key.Escape)
@@ -294,7 +300,7 @@ private void OnTabsDropdownKeyDown(object sender, KeyEventArgs e)
294300
}
295301
}
296302
}
297-
303+
298304
private void OnTabsDropdownSearchBoxKeyDown(object sender, KeyEventArgs e)
299305
{
300306
if (e.Key == Key.Down && TabsDropdownList.ItemCount > 0)
@@ -355,7 +361,7 @@ private void UpdateSelectablePages()
355361
SelectablePages.Add(page);
356362
}
357363
}
358-
364+
359365
private bool _pressedTab = false;
360366
private Point _pressedTabPosition = new Point();
361367
private bool _startDragTab = false;

0 commit comments

Comments
 (0)