diff --git a/pom.xml b/pom.xml
index f956370..3f26866 100644
--- a/pom.xml
+++ b/pom.xml
@@ -109,7 +109,7 @@
netbeans
NetBeans
- http://netbeans.apidesign.org/maven2/
+ https://netbeans.apidesign.org/maven2/
@@ -152,6 +152,11 @@
org-openide-util-lookup
RELEASE82
+
+ org.netbeans.api
+ org-openide-windows
+ RELEASE82
+
org.netbeans.api
org-openide-modules
diff --git a/src/main/java/org/chrisle/netbeans/plugins/nbscratchfile/CreateScratchFile.java b/src/main/java/org/chrisle/netbeans/plugins/nbscratchfile/CreateScratchFile.java
index b31e074..29af9e1 100644
--- a/src/main/java/org/chrisle/netbeans/plugins/nbscratchfile/CreateScratchFile.java
+++ b/src/main/java/org/chrisle/netbeans/plugins/nbscratchfile/CreateScratchFile.java
@@ -17,13 +17,13 @@
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
-import javax.swing.JFrame;
import org.chrisle.netbeans.plugins.nbscratchfile.ui.FilterableFileTypeDialog;
import org.openide.awt.ActionID;
import org.openide.awt.ActionReference;
import org.openide.awt.ActionReferences;
import org.openide.awt.ActionRegistration;
import org.openide.util.NbBundle.Messages;
+import org.openide.windows.WindowManager;
/**
*
@@ -43,10 +43,14 @@
})
@Messages("CTL_CreateScratchFile=New Scratch File...")
public final class CreateScratchFile implements ActionListener {
- private final FilterableFileTypeDialog _dialog = new FilterableFileTypeDialog(new JFrame(), false);
+ private FilterableFileTypeDialog dialog;
@Override
public void actionPerformed(ActionEvent e) {
- _dialog.showDialog();
+ if (dialog == null) {
+ dialog = new FilterableFileTypeDialog(WindowManager.getDefault().getMainWindow(), false);
+ }
+
+ dialog.showDialog();
}
}
diff --git a/src/main/java/org/chrisle/netbeans/plugins/nbscratchfile/ui/FilterableFileTypeDialog.java b/src/main/java/org/chrisle/netbeans/plugins/nbscratchfile/ui/FilterableFileTypeDialog.java
index cd339d9..3df397f 100644
--- a/src/main/java/org/chrisle/netbeans/plugins/nbscratchfile/ui/FilterableFileTypeDialog.java
+++ b/src/main/java/org/chrisle/netbeans/plugins/nbscratchfile/ui/FilterableFileTypeDialog.java
@@ -17,6 +17,7 @@
import java.awt.Color;
import java.awt.Component;
+import java.awt.EventQueue;
import java.awt.Frame;
import java.awt.KeyboardFocusManager;
import java.awt.event.ActionEvent;
@@ -125,13 +126,12 @@ public void keyReleased(KeyEvent e) {
super.addWindowFocusListener(new WindowFocusListener() {
@Override
public void windowGainedFocus(WindowEvent e) {
- searchField.setFocusable(true);
+ searchField.requestFocusInWindow();
}
@Override
public void windowLostFocus(WindowEvent e) {
- FilterableFileTypeDialog.this.setVisible(false);
- searchField.setText("");
+ EventQueue.invokeLater(FilterableFileTypeDialog.this::closeIfFocusRemainsLost);
}
});
@@ -156,6 +156,15 @@ public void showDialog() {
super.setVisible(true);
}
+ private void closeIfFocusRemainsLost() {
+ KeyboardFocusManager focusManager = KeyboardFocusManager.getCurrentKeyboardFocusManager();
+
+ if (isVisible() && !isFocused() && focusManager.getActiveWindow() != this) {
+ super.setVisible(false);
+ searchField.setText("");
+ }
+ }
+
private static boolean languagesFilter(LanguageType lang, String str) {
return lang.LanguageName().toLowerCase().contains(str.toLowerCase());
}