From 674ba18adbdd171827b1c8e8c2117bda51c74c82 Mon Sep 17 00:00:00 2001 From: hneemann Date: Sat, 29 May 2021 18:29:16 +0200 Subject: [PATCH] removes focus moving, see #756 --- .../components/graphics/GraphicDialog.java | 2 +- .../components/graphics/LedMatrixDialog.java | 2 +- .../gui/components/graphics/MoveFocusTo.java | 22 ++++++++++++++----- .../gui/components/graphics/VGADialog.java | 2 +- 4 files changed, 20 insertions(+), 8 deletions(-) diff --git a/src/main/java/de/neemann/digital/gui/components/graphics/GraphicDialog.java b/src/main/java/de/neemann/digital/gui/components/graphics/GraphicDialog.java index c65885ce6..ed199d5af 100644 --- a/src/main/java/de/neemann/digital/gui/components/graphics/GraphicDialog.java +++ b/src/main/java/de/neemann/digital/gui/components/graphics/GraphicDialog.java @@ -35,7 +35,7 @@ public class GraphicDialog extends JDialog { setLocationRelativeTo(null); setVisible(true); - addWindowFocusListener(new MoveFocusTo(parent)); + MoveFocusTo.addListener(this, parent); } /** diff --git a/src/main/java/de/neemann/digital/gui/components/graphics/LedMatrixDialog.java b/src/main/java/de/neemann/digital/gui/components/graphics/LedMatrixDialog.java index bbf7a1bd1..10fad5e30 100644 --- a/src/main/java/de/neemann/digital/gui/components/graphics/LedMatrixDialog.java +++ b/src/main/java/de/neemann/digital/gui/components/graphics/LedMatrixDialog.java @@ -37,7 +37,7 @@ public class LedMatrixDialog extends JDialog { setLocationRelativeTo(null); setVisible(true); - addWindowFocusListener(new MoveFocusTo(parent)); + MoveFocusTo.addListener(this, parent); } /** diff --git a/src/main/java/de/neemann/digital/gui/components/graphics/MoveFocusTo.java b/src/main/java/de/neemann/digital/gui/components/graphics/MoveFocusTo.java index cbf16ad68..6c471e72d 100644 --- a/src/main/java/de/neemann/digital/gui/components/graphics/MoveFocusTo.java +++ b/src/main/java/de/neemann/digital/gui/components/graphics/MoveFocusTo.java @@ -19,21 +19,33 @@ import java.awt.event.WindowFocusListener; * no longer be used. */ public class MoveFocusTo implements WindowFocusListener { - private final Window parent; /** - * Creates a new instance + * Adds the listener to the given child dialog and moves the focus to the given parent * - * @param parent the window which should keep the focus + * @param child the child dialog + * @param parent the parent window */ - public MoveFocusTo(Window parent) { + public static void addListener(Dialog child, Window parent) { + child.setAlwaysOnTop(true); + child.addWindowFocusListener(new MoveFocusTo(child, parent)); + } + + private final Window child; + private final Window parent; + + private MoveFocusTo(Window child, Window parent) { + this.child = child; this.parent = parent; } @Override public void windowGainedFocus(WindowEvent windowEvent) { if (parent != null) - SwingUtilities.invokeLater(parent::requestFocus); + SwingUtilities.invokeLater(() -> { + child.removeWindowFocusListener(this); + parent.requestFocus(); + }); } @Override diff --git a/src/main/java/de/neemann/digital/gui/components/graphics/VGADialog.java b/src/main/java/de/neemann/digital/gui/components/graphics/VGADialog.java index ea6ac9a25..4a5c6a486 100644 --- a/src/main/java/de/neemann/digital/gui/components/graphics/VGADialog.java +++ b/src/main/java/de/neemann/digital/gui/components/graphics/VGADialog.java @@ -33,7 +33,7 @@ public class VGADialog extends JDialog { setLocationRelativeTo(null); setVisible(true); - addWindowFocusListener(new MoveFocusTo(parent)); + MoveFocusTo.addListener(this, parent); } /**