From 92863b76eb02613b98a62957d92a44d9eb33804e Mon Sep 17 00:00:00 2001 From: hneemann Date: Thu, 22 Aug 2019 10:20:47 +0200 Subject: [PATCH] Mouse actions are aborted if the window loses focus. --- .../gui/components/CircuitComponent.java | 22 ++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/src/main/java/de/neemann/digital/gui/components/CircuitComponent.java b/src/main/java/de/neemann/digital/gui/components/CircuitComponent.java index b1d3cbeb7..df2dee02d 100644 --- a/src/main/java/de/neemann/digital/gui/components/CircuitComponent.java +++ b/src/main/java/de/neemann/digital/gui/components/CircuitComponent.java @@ -264,6 +264,15 @@ public class CircuitComponent extends JComponent implements ChangedListener, Lib mouseNormal.activate(); + if (parent != null) { + parent.addWindowListener(new WindowAdapter() { + @Override + public void windowDeactivated(WindowEvent e) { + activeMouseController.escapePressed(); + } + }); + } + setToolTipText(""); } @@ -477,12 +486,15 @@ public class CircuitComponent extends JComponent implements ChangedListener, Lib * redo last undo */ private void redo() { - if (!isLocked() && undoManager.redoAvailable()) { + if (activeMouseController != mouseNormal) activeMouseController.escapePressed(); - try { - undoManager.redo(); - } catch (ModifyException e) { - throw new RuntimeException("internal error in redo", e); + else { + if (!isLocked() && undoManager.redoAvailable()) { + try { + undoManager.redo(); + } catch (ModifyException e) { + throw new RuntimeException("internal error in redo", e); + } } } }