merge: show confirmation on cancel in binary merge dialog
authorAleksey Pivovarov <AMPivovarov@gmail.com>
Tue, 11 Aug 2015 12:57:34 +0000 (15:57 +0300)
committerAleksey Pivovarov <AMPivovarov@gmail.com>
Wed, 12 Aug 2015 16:55:49 +0000 (19:55 +0300)
platform/diff-impl/src/com/intellij/diff/merge/BinaryMergeTool.java

index fa330774629401b8732fffd944f3456a3429f51d..76df64d8e1b09711dc12e4fc808070917be84a0b 100644 (file)
@@ -23,6 +23,9 @@ import com.intellij.diff.requests.DiffRequest;
 import com.intellij.diff.requests.SimpleDiffRequest;
 import com.intellij.diff.tools.binary.ThreesideBinaryDiffViewer;
 import com.intellij.diff.tools.holders.BinaryEditorHolder;
+import com.intellij.openapi.diff.DiffBundle;
+import com.intellij.openapi.ui.Messages;
+import com.intellij.openapi.util.BooleanGetter;
 import com.intellij.openapi.util.Disposer;
 import com.intellij.util.containers.ContainerUtil;
 import org.jetbrains.annotations.CalledInAwt;
@@ -110,6 +113,15 @@ public class BinaryMergeTool implements MergeTool {
       components.statusPanel = init.statusPanel;
       components.toolbarActions = init.toolbarActions;
 
+      components.closeHandler = new BooleanGetter() {
+        @Override
+        public boolean get() {
+          return Messages.showYesNoDialog(getComponent().getRootPane(),
+                                          DiffBundle.message("merge.dialog.exit.without.applying.changes.confirmation.message"),
+                                          DiffBundle.message("cancel.visual.merge.dialog.title"), Messages.getQuestionIcon()) == Messages.YES;
+        }
+      };
+
       return components;
     }
 
@@ -122,6 +134,14 @@ public class BinaryMergeTool implements MergeTool {
       return new AbstractAction(caption) {
         @Override
         public void actionPerformed(ActionEvent e) {
+          if (result == MergeResult.CANCEL) {
+            if (Messages.showYesNoDialog(getComponent().getRootPane(),
+                                         DiffBundle.message("merge.dialog.exit.without.applying.changes.confirmation.message"),
+                                         DiffBundle.message("cancel.visual.merge.dialog.title"), Messages.getQuestionIcon()) != Messages.YES) {
+              return;
+            }
+          }
+
           myMergeContext.finishMerge(result);
         }
       };