Show the window before slow location probes and wrap git.exe for commit, diff, and merge.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-08-24 16:31:56 +02:00
parent a3c54bbb03
commit 9efb306979
42 changed files with 3184 additions and 77 deletions

View File

@@ -0,0 +1,80 @@
<Window x:Class="Explorer.App.GitChangesWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Git changes"
Icon="pack://application:,,,/Assets/explorer-workbench.ico"
Height="620" Width="920"
MinHeight="400" MinWidth="640"
WindowStartupLocation="CenterOwner"
Background="{DynamicResource Bg}" Foreground="{DynamicResource Fg}">
<DockPanel Margin="16">
<DockPanel DockPanel.Dock="Bottom" Margin="0,12,0,0">
<Button DockPanel.Dock="Right" Content="Close" MinWidth="88" Height="32" IsCancel="True" Margin="8,0,0,0"/>
<Button DockPanel.Dock="Right" Content="Commit…" MinWidth="88" Height="32"
Click="OnCommit" IsEnabled="{Binding CanCommit}" Margin="8,0,0,0"/>
<Button DockPanel.Dock="Right" Content="Push" MinWidth="72" Height="32"
Click="OnPush" IsEnabled="{Binding CanNetwork}" Margin="8,0,0,0"/>
<Button DockPanel.Dock="Right" Content="Pull" MinWidth="72" Height="32"
Click="OnPull" IsEnabled="{Binding CanNetwork}" Margin="8,0,0,0"/>
<Button DockPanel.Dock="Right" Content="Fetch" MinWidth="72" Height="32"
Click="OnFetch" IsEnabled="{Binding CanNetwork}" Margin="8,0,0,0"/>
<Button DockPanel.Dock="Right" Content="Refresh" MinWidth="88" Height="32"
Command="{Binding RefreshCommand}" Margin="8,0,0,0"/>
<TextBlock Text="{Binding Status}" VerticalAlignment="Center" Foreground="{DynamicResource FgMuted}"
TextWrapping="Wrap"/>
</DockPanel>
<StackPanel DockPanel.Dock="Top" Margin="0,0,0,8">
<TextBlock Text="{Binding Summary}" FontWeight="SemiBold" TextWrapping="Wrap"/>
<TextBlock Text="{Binding RepoRoot}" Margin="0,4,0,0" Foreground="{DynamicResource FgMuted}"
TextTrimming="CharacterEllipsis"/>
</StackPanel>
<WrapPanel DockPanel.Dock="Top" Margin="0,0,0,8">
<Button Content="View diff" MinWidth="88" Height="32" Click="OnDiff"
IsEnabled="{Binding CanDiff}" Margin="0,0,8,8"/>
<Button Content="Open in Cursor" MinWidth="120" Height="32"
Command="{Binding OpenSelectedInCursorCommand}"
IsEnabled="{Binding CanOpenInCursor}" Margin="0,0,8,8"/>
<Button Content="Stage" MinWidth="72" Height="32" Click="OnStage"
IsEnabled="{Binding CanStage}" Margin="0,0,8,8"/>
<Button Content="Unstage" MinWidth="72" Height="32" Click="OnUnstage"
IsEnabled="{Binding CanUnstage}" Margin="0,0,8,8"/>
<Button Content="Discard…" MinWidth="88" Height="32" Click="OnDiscard"
IsEnabled="{Binding CanDiscard}" Margin="0,0,16,8"/>
<Button Content="Use ours" MinWidth="88" Height="32" Click="OnUseOurs"
IsEnabled="{Binding CanResolve}" Margin="0,0,8,8"/>
<Button Content="Use theirs" MinWidth="88" Height="32" Click="OnUseTheirs"
IsEnabled="{Binding CanResolve}" Margin="0,0,8,8"/>
<Button Content="Mark resolved" MinWidth="110" Height="32" Click="OnMarkResolved"
IsEnabled="{Binding CanResolve}" Margin="0,0,16,8"/>
<Button Content="Abort" MinWidth="72" Height="32" Click="OnAbort"
IsEnabled="{Binding CanAbort}" Margin="0,0,8,8"/>
<Button Content="Continue" MinWidth="88" Height="32" Click="OnContinue"
IsEnabled="{Binding CanContinue}" Margin="0,0,8,8"/>
</WrapPanel>
<ListView ItemsSource="{Binding Changes}" SelectedItem="{Binding Selected}"
MouseDoubleClick="OnRowDoubleClick">
<ListView.ContextMenu>
<ContextMenu>
<MenuItem Header="View diff" Click="OnDiff" IsEnabled="{Binding CanDiff}"/>
<MenuItem Header="Open in Cursor" Command="{Binding OpenSelectedInCursorCommand}"
IsEnabled="{Binding CanOpenInCursor}"/>
<Separator/>
<MenuItem Header="Stage" Click="OnStage" IsEnabled="{Binding CanStage}"/>
<MenuItem Header="Unstage" Click="OnUnstage" IsEnabled="{Binding CanUnstage}"/>
<MenuItem Header="Discard…" Click="OnDiscard" IsEnabled="{Binding CanDiscard}"/>
<Separator/>
<MenuItem Header="Use ours" Click="OnUseOurs" IsEnabled="{Binding CanResolve}"/>
<MenuItem Header="Use theirs" Click="OnUseTheirs" IsEnabled="{Binding CanResolve}"/>
<MenuItem Header="Mark resolved" Click="OnMarkResolved" IsEnabled="{Binding CanResolve}"/>
</ContextMenu>
</ListView.ContextMenu>
<ListView.View>
<GridView>
<GridViewColumn Header="Kind" Width="100" DisplayMemberBinding="{Binding KindLabel}"/>
<GridViewColumn Header="Change" Width="110" DisplayMemberBinding="{Binding ChangeLabel}"/>
<GridViewColumn Header="Path" Width="620" DisplayMemberBinding="{Binding DisplayPath}"/>
</GridView>
</ListView.View>
</ListView>
</DockPanel>
</Window>