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)