mirror of
https://github.com/sourcegit-scm/sourcegit.git
synced 2024-12-23 20:47:25 -08:00
enhance: keep selection after unstaging (#320)
This commit is contained in:
parent
4ba7c879c5
commit
90e3abed8d
1 changed files with 35 additions and 4 deletions
|
@ -218,7 +218,22 @@ namespace SourceGit.ViewModels
|
|||
|
||||
public bool SetData(List<Models.Change> changes)
|
||||
{
|
||||
if (!IsChanged(_cached, changes))
|
||||
{
|
||||
// Just force refresh selected changes.
|
||||
Dispatcher.UIThread.Invoke(() =>
|
||||
{
|
||||
if (_selectedUnstaged.Count > 0)
|
||||
SelectedUnstaged = new List<Models.Change>(_selectedUnstaged);
|
||||
else if (_selectedStaged.Count > 0)
|
||||
SelectedStaged = new List<Models.Change>(_selectedStaged);
|
||||
});
|
||||
|
||||
return _cached.Find(x => x.IsConflit) != null;
|
||||
}
|
||||
|
||||
_cached = changes;
|
||||
_count = _cached.Count;
|
||||
|
||||
var unstaged = new List<Models.Change>();
|
||||
var staged = new List<Models.Change>();
|
||||
|
@ -227,12 +242,12 @@ namespace SourceGit.ViewModels
|
|||
|
||||
var lastSelectedUnstaged = new HashSet<string>();
|
||||
var lastSelectedStaged = new HashSet<string>();
|
||||
if (_selectedUnstaged != null)
|
||||
if (_selectedUnstaged != null && _selectedUnstaged.Count > 0)
|
||||
{
|
||||
foreach (var c in _selectedUnstaged)
|
||||
lastSelectedUnstaged.Add(c.Path);
|
||||
}
|
||||
else if (_selectedStaged != null)
|
||||
else if (_selectedStaged != null && _selectedStaged.Count > 0)
|
||||
{
|
||||
foreach (var c in _selectedStaged)
|
||||
lastSelectedStaged.Add(c.Path);
|
||||
|
@ -258,8 +273,6 @@ namespace SourceGit.ViewModels
|
|||
selectedStaged.Add(c);
|
||||
}
|
||||
|
||||
_count = changes.Count;
|
||||
|
||||
Dispatcher.UIThread.Invoke(() =>
|
||||
{
|
||||
_isLoadingData = true;
|
||||
|
@ -1273,6 +1286,24 @@ namespace SourceGit.ViewModels
|
|||
});
|
||||
}
|
||||
|
||||
private bool IsChanged(List<Models.Change> old, List<Models.Change> cur)
|
||||
{
|
||||
if (old.Count != cur.Count)
|
||||
return true;
|
||||
|
||||
var oldSet = new HashSet<string>();
|
||||
foreach (var c in old)
|
||||
oldSet.Add($"{c.Path}\n{c.WorkTree}\n{c.Index}");
|
||||
|
||||
foreach (var c in cur)
|
||||
{
|
||||
if (!oldSet.Contains($"{c.Path}\n{c.WorkTree}\n{c.Index}"))
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
private Repository _repo = null;
|
||||
private bool _isLoadingData = false;
|
||||
private bool _isStaging = false;
|
||||
|
|
Loading…
Reference in a new issue