@@ -209,6 +209,44 @@ public ContextMenu CreateChangeContextMenu(Models.Change change)
209209 if ( DataContext is not ViewModels . CommitDetail { Repository : { } repo , Commit : { } commit } vm )
210210 return null ;
211211
212+ var openWith = new MenuItem ( ) ;
213+ openWith . Header = App . Text ( "Open" ) ;
214+ openWith . Icon = App . CreateMenuIcon ( "Icons.OpenWith" ) ;
215+ openWith . IsEnabled = change . Index != Models . ChangeState . Deleted ;
216+ if ( openWith . IsEnabled )
217+ {
218+ var defaultEditor = new MenuItem ( ) ;
219+ defaultEditor . Header = App . Text ( "Open.SystemDefaultEditor" ) ;
220+ defaultEditor . Click += async ( _ , ev ) =>
221+ {
222+ await vm . OpenRevisionFileAsync ( change . Path , null ) ;
223+ ev . Handled = true ;
224+ } ;
225+
226+ openWith . Items . Add ( defaultEditor ) ;
227+
228+ var tools = Native . OS . ExternalTools ;
229+ if ( tools . Count > 0 )
230+ {
231+ openWith . Items . Add ( new MenuItem ( ) { Header = "-" } ) ;
232+
233+ for ( var i = 0 ; i < tools . Count ; i ++ )
234+ {
235+ var tool = tools [ i ] ;
236+ var item = new MenuItem ( ) ;
237+ item . Header = tool . Name ;
238+ item . Icon = new Image { Width = 16 , Height = 16 , Source = tool . IconImage } ;
239+ item . Click += async ( _ , ev ) =>
240+ {
241+ await vm . OpenRevisionFileAsync ( change . Path , tool ) ;
242+ ev . Handled = true ;
243+ } ;
244+
245+ openWith . Items . Add ( item ) ;
246+ }
247+ }
248+ }
249+
212250 var openWithMerger = new MenuItem ( ) ;
213251 openWithMerger . Header = App . Text ( "OpenInExternalMergeTool" ) ;
214252 openWithMerger . Icon = App . CreateMenuIcon ( "Icons.OpenWith" ) ;
@@ -219,16 +257,6 @@ public ContextMenu CreateChangeContextMenu(Models.Change change)
219257 ev . Handled = true ;
220258 } ;
221259
222- var openWith = new MenuItem ( ) ;
223- openWith . Header = App . Text ( "OpenWith" ) ;
224- openWith . Icon = App . CreateMenuIcon ( "Icons.OpenWith" ) ;
225- openWith . IsEnabled = change . Index != Models . ChangeState . Deleted ;
226- openWith . Click += async ( _ , ev ) =>
227- {
228- await vm . OpenRevisionFileWithDefaultEditorAsync ( change . Path ) ;
229- ev . Handled = true ;
230- } ;
231-
232260 var fullPath = Native . OS . GetAbsPath ( repo . FullPath , change . Path ) ;
233261 var explore = new MenuItem ( ) ;
234262 explore . Header = App . Text ( "RevealFile" ) ;
@@ -291,8 +319,8 @@ public ContextMenu CreateChangeContextMenu(Models.Change change)
291319 } ;
292320
293321 var menu = new ContextMenu ( ) ;
294- menu . Items . Add ( openWithMerger ) ;
295322 menu . Items . Add ( openWith ) ;
323+ menu . Items . Add ( openWithMerger ) ;
296324 menu . Items . Add ( explore ) ;
297325 menu . Items . Add ( new MenuItem { Header = "-" } ) ;
298326 menu . Items . Add ( history ) ;
0 commit comments