From b5badb5254bbef9624481e92759c781fb4d90e9f Mon Sep 17 00:00:00 2001 From: Jen Warman Date: Sat, 2 Mar 2024 10:29:05 +0000 Subject: [PATCH] fix: Add focus to first field in macro popup --- .../universalgcodesender/MacroHelper.java | 3 +++ .../RequestFocusListener.java | 27 +++++++++++++++++++ 2 files changed, 30 insertions(+) create mode 100644 ugs-core/src/com/willwinder/universalgcodesender/RequestFocusListener.java diff --git a/ugs-core/src/com/willwinder/universalgcodesender/MacroHelper.java b/ugs-core/src/com/willwinder/universalgcodesender/MacroHelper.java index 3e991c5de0..4cec6a0192 100644 --- a/ugs-core/src/com/willwinder/universalgcodesender/MacroHelper.java +++ b/ugs-core/src/com/willwinder/universalgcodesender/MacroHelper.java @@ -168,6 +168,9 @@ private static String parsePrompts(String command) { myPanel.setLayout(new MigLayout("wrap 2, width 200")); for (String s : prompts) { JTextField field = new JTextField(); + if (fields.size() == 0){ + field.addHierarchyListener(new RequestFocusListener()); + } myPanel.add(new JLabel(s + ":")); myPanel.add(field, "growx, pushx"); fields.add(field); diff --git a/ugs-core/src/com/willwinder/universalgcodesender/RequestFocusListener.java b/ugs-core/src/com/willwinder/universalgcodesender/RequestFocusListener.java new file mode 100644 index 0000000000..980afcc5c4 --- /dev/null +++ b/ugs-core/src/com/willwinder/universalgcodesender/RequestFocusListener.java @@ -0,0 +1,27 @@ +package com.willwinder.universalgcodesender; + +import java.awt.Component; +import java.awt.Window; +import java.awt.event.HierarchyEvent; +import java.awt.event.HierarchyListener; +import java.awt.event.WindowAdapter; +import java.awt.event.WindowEvent; +import javax.swing.SwingUtilities; + +public class RequestFocusListener implements HierarchyListener { + + @Override + public void hierarchyChanged(HierarchyEvent e) { + final Component c = e.getComponent(); + if (c.isShowing() && (e.getChangeFlags() & HierarchyEvent.SHOWING_CHANGED) != 0) { + Window toplevel = SwingUtilities.getWindowAncestor(c); + toplevel.addWindowFocusListener(new WindowAdapter() { + + @Override + public void windowGainedFocus(WindowEvent e) { + c.requestFocus(); + } + }); + } + } +} \ No newline at end of file