@@ -157,33 +157,46 @@ public ContextMenu CreateChangeContextMenu(Models.Change change)
157157 {
158158 var menu = new ContextMenu ( ) ;
159159
160- if ( change . Index != Models . ChangeState . Deleted )
160+ var diffWithMerger = new MenuItem ( ) ;
161+ diffWithMerger . Header = App . Text ( "DiffWithMerger" ) ;
162+ diffWithMerger . Icon = App . CreateMenuIcon ( "Icons.Diff" ) ;
163+ diffWithMerger . Click += ( _ , ev ) =>
161164 {
162- var history = new MenuItem ( ) ;
163- history . Header = App . Text ( "FileHistory" ) ;
164- history . Click += ( _ , ev ) =>
165+ var opt = new Models . DiffOption ( StartPoint . SHA , EndPoint . SHA , change ) ;
166+ var type = Preference . Instance . ExternalMergeToolType ;
167+ var exec = Preference . Instance . ExternalMergeToolPath ;
168+
169+ var tool = Models . ExternalMergeTools . Supported . Find ( x => x . Type == type ) ;
170+ if ( tool == null || ! File . Exists ( exec ) )
165171 {
166- var window = new Views . FileHistories ( ) { DataContext = new FileHistories ( _repo , change . Path ) } ;
167- window . Show ( ) ;
168- ev . Handled = true ;
169- } ;
172+ App . RaiseException ( _repo , "Invalid merge tool in preference setting!" ) ;
173+ return ;
174+ }
170175
176+ var args = tool . Type != 0 ? tool . DiffCmd : Preference . Instance . ExternalMergeToolDiffCmd ;
177+ Task . Run ( ( ) => Commands . MergeTool . OpenForDiff ( _repo , exec , args , opt ) ) ;
178+ ev . Handled = true ;
179+ } ;
180+ menu . Items . Add ( diffWithMerger ) ;
181+
182+ if ( change . Index != Models . ChangeState . Deleted )
183+ {
171184 var full = Path . GetFullPath ( Path . Combine ( _repo , change . Path ) ) ;
172185 var explore = new MenuItem ( ) ;
173186 explore . Header = App . Text ( "RevealFile" ) ;
187+ explore . Icon = App . CreateMenuIcon ( "Icons.Folder.Open" ) ;
174188 explore . IsEnabled = File . Exists ( full ) ;
175189 explore . Click += ( _ , ev ) =>
176190 {
177191 Native . OS . OpenInFileManager ( full , true ) ;
178192 ev . Handled = true ;
179193 } ;
180-
181- menu . Items . Add ( history ) ;
182194 menu . Items . Add ( explore ) ;
183195 }
184196
185197 var copyPath = new MenuItem ( ) ;
186198 copyPath . Header = App . Text ( "CopyPath" ) ;
199+ copyPath . Icon = App . CreateMenuIcon ( "Icons.Copy" ) ;
187200 copyPath . Click += ( _ , ev ) =>
188201 {
189202 App . CopyText ( change . Path ) ;
0 commit comments