mirror of
https://github.com/sourcegit-scm/sourcegit
synced 2025-06-21 02:15:00 +00:00
feature: double tap specific branch (#1416)
* feature: double tap specific branch * exactly match behavior of left sidebar
This commit is contained in:
parent
cadcf40d74
commit
88fd8f32f1
3 changed files with 61 additions and 2 deletions
|
@ -209,8 +209,47 @@ namespace SourceGit.ViewModels
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void DoubleTapped(Models.Commit commit)
|
public void DoubleTapped(Models.Commit commit, Models.Decorator decorator = null)
|
||||||
{
|
{
|
||||||
|
if (decorator != null)
|
||||||
|
{
|
||||||
|
if (decorator.Type == Models.DecoratorType.LocalBranchHead)
|
||||||
|
{
|
||||||
|
var b = _repo.Branches.Find(x => x.FriendlyName == decorator.Name);
|
||||||
|
if (b != null)
|
||||||
|
{
|
||||||
|
_repo.CheckoutBranch(b);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (decorator.Type == Models.DecoratorType.RemoteBranchHead)
|
||||||
|
{
|
||||||
|
var remoteBranch = _repo.Branches.Find(x => x.FriendlyName == decorator.Name);
|
||||||
|
if (remoteBranch != null)
|
||||||
|
{
|
||||||
|
var localBranch = _repo.Branches.Find(x => x.IsLocal && x.Upstream == remoteBranch.FullName);
|
||||||
|
if (localBranch != null)
|
||||||
|
{
|
||||||
|
if (localBranch.IsCurrent)
|
||||||
|
return;
|
||||||
|
if (localBranch.TrackStatus.Ahead.Count > 0)
|
||||||
|
{
|
||||||
|
if (_repo.CanCreatePopup())
|
||||||
|
_repo.ShowPopup(new CreateBranch(_repo, remoteBranch));
|
||||||
|
}
|
||||||
|
else if (localBranch.TrackStatus.Behind.Count > 0)
|
||||||
|
{
|
||||||
|
if (_repo.CanCreatePopup())
|
||||||
|
_repo.ShowPopup(new CheckoutAndFastForward(_repo, localBranch, remoteBranch));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
_repo.CheckoutBranch(localBranch);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (commit == null || commit.IsCurrentHead)
|
if (commit == null || commit.IsCurrentHead)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
|
|
@ -156,6 +156,22 @@ namespace SourceGit.Views
|
||||||
InvalidateMeasure();
|
InvalidateMeasure();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Models.Decorator DecoratorAt(Point point)
|
||||||
|
{
|
||||||
|
if (DataContext is not Models.Commit commit)
|
||||||
|
return null;
|
||||||
|
|
||||||
|
var x = 0.0;
|
||||||
|
for (var i = 0; i < _items.Count; i++)
|
||||||
|
{
|
||||||
|
x += _items[i].Width + 4;
|
||||||
|
if (point.X < x)
|
||||||
|
return commit.Decorators[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
protected override Size MeasureOverride(Size availableSize)
|
protected override Size MeasureOverride(Size availableSize)
|
||||||
{
|
{
|
||||||
_items.Clear();
|
_items.Clear();
|
||||||
|
|
|
@ -173,10 +173,14 @@ namespace SourceGit.Views
|
||||||
{
|
{
|
||||||
if (DataContext is ViewModels.Histories histories && sender is ListBox { SelectedItems.Count: 1 })
|
if (DataContext is ViewModels.Histories histories && sender is ListBox { SelectedItems.Count: 1 })
|
||||||
{
|
{
|
||||||
|
Models.Decorator decorator = null;
|
||||||
|
if (e.Source is CommitRefsPresenter crp)
|
||||||
|
decorator = crp.DecoratorAt(e.GetPosition(crp));
|
||||||
|
|
||||||
var source = e.Source as Control;
|
var source = e.Source as Control;
|
||||||
var item = source.FindAncestorOfType<ListBoxItem>();
|
var item = source.FindAncestorOfType<ListBoxItem>();
|
||||||
if (item is { DataContext: Models.Commit commit })
|
if (item is { DataContext: Models.Commit commit })
|
||||||
histories.DoubleTapped(commit);
|
histories.DoubleTapped(commit, decorator);
|
||||||
}
|
}
|
||||||
e.Handled = true;
|
e.Handled = true;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue