diff --git a/src/ViewModels/Repository.cs b/src/ViewModels/Repository.cs index 2294fdde..0c353b03 100644 --- a/src/ViewModels/Repository.cs +++ b/src/ViewModels/Repository.cs @@ -821,6 +821,11 @@ namespace SourceGit.ViewModels } } + public Models.Commit GetCommitInfo(string sha) + { + return new Commands.QuerySingleCommit(_fullpath, sha).Result(); + } + public void NavigateToCurrentHead() { if (_currentBranch != null) diff --git a/src/Views/WorkingCopy.axaml b/src/Views/WorkingCopy.axaml index 926bce6e..47ddfa42 100644 --- a/src/Views/WorkingCopy.axaml +++ b/src/Views/WorkingCopy.axaml @@ -216,7 +216,23 @@ Foreground="DarkOrange" TextDecorations="Underline" Cursor="Hand" - PointerPressed="OnPressedSHA"/> + PointerPressed="OnPressedSHA" + PointerEntered="OnSHAPointerEntered" + ToolTip.ShowDelay="0"> + + + + + + + + + + + + + + @@ -235,7 +251,23 @@ Foreground="DarkOrange" TextDecorations="Underline" Cursor="Hand" - PointerPressed="OnPressedSHA"/> + PointerPressed="OnPressedSHA" + PointerEntered="OnSHAPointerEntered" + ToolTip.ShowDelay="0"> + + + + + + + + + + + + + + diff --git a/src/Views/WorkingCopy.axaml.cs b/src/Views/WorkingCopy.axaml.cs index 04674f86..d904e6dd 100644 --- a/src/Views/WorkingCopy.axaml.cs +++ b/src/Views/WorkingCopy.axaml.cs @@ -1,7 +1,10 @@ +using System.Threading.Tasks; + using Avalonia.Controls; using Avalonia.Input; using Avalonia.Interactivity; using Avalonia.VisualTree; +using Avalonia.Threading; namespace SourceGit.Views { @@ -123,6 +126,36 @@ namespace SourceGit.Views e.Handled = true; } + private void OnSHAPointerEntered(object sender, PointerEventArgs e) + { + var repoView = this.FindAncestorOfType(); + if (repoView is { DataContext: ViewModels.Repository repo } && sender is TextBlock text) + { + var commit = repo.GetCommitInfo(text.Text); + + if (sender is Control control) + { + var tooltip = ToolTip.GetTip(control); + if (tooltip is Models.Commit tip_commit && tip_commit.SHA == commit.SHA) + return; + + Task.Run(() => + { + Dispatcher.UIThread.Invoke(() => + { + if (control.IsEffectivelyVisible && control.IsPointerOver) + { + ToolTip.SetTip(control, commit); + ToolTip.SetIsOpen(control, true); + } + }); + }); + } + } + + e.Handled = true; + } + private void OnUnstageSelectedButtonClicked(object _, RoutedEventArgs e) { if (DataContext is ViewModels.WorkingCopy vm)