@@ -194,8 +194,53 @@ private async void OnGotoParent(object sender, RoutedEventArgs e)
194194 }
195195 else if ( parents . Count > 1 && TopLevel . GetTopLevel ( this ) is Window owner )
196196 {
197- var dialog = new GotoParentSelector ( ) ;
198- dialog . ParentList . ItemsSource = parents ;
197+ var dialog = new GotoRevisionSelector ( ) ;
198+ dialog . RevisionList . ItemsSource = parents ;
199+
200+ var c = await dialog . ShowDialog < Models . Commit > ( owner ) ;
201+ if ( c != null )
202+ vm . NavigateTo ( c . SHA ) ;
203+ }
204+
205+ e . Handled = true ;
206+ }
207+
208+ private async void OnGotoChild ( object sender , RoutedEventArgs e )
209+ {
210+ if ( DataContext is not ViewModels . Histories vm )
211+ return ;
212+
213+ if ( ! CommitListContainer . IsKeyboardFocusWithin )
214+ return ;
215+
216+ if ( CommitListContainer . SelectedItems is not { Count : 1 } selected )
217+ return ;
218+
219+ if ( selected [ 0 ] is not Models . Commit { Parents . Count : > 0 } commit )
220+ return ;
221+
222+ var children = new List < Models . Commit > ( ) ;
223+ var sha = commit . SHA ;
224+ foreach ( var c in vm . Commits )
225+ {
226+ foreach ( var p in c . Parents )
227+ {
228+ if ( sha . StartsWith ( p , StringComparison . Ordinal ) )
229+ children . Add ( c ) ;
230+ }
231+
232+ if ( sha . Equals ( c . SHA , StringComparison . Ordinal ) )
233+ break ;
234+ }
235+
236+ if ( children . Count == 1 )
237+ {
238+ vm . NavigateTo ( children [ 0 ] . SHA ) ;
239+ }
240+ else if ( children . Count > 1 && TopLevel . GetTopLevel ( this ) is Window owner )
241+ {
242+ var dialog = new GotoRevisionSelector ( ) ;
243+ dialog . RevisionList . ItemsSource = children ;
199244
200245 var c = await dialog . ShowDialog < Models . Commit > ( owner ) ;
201246 if ( c != null )
0 commit comments