Added filename filters to file chooser dialogs
diff --git a/java/com/tigervnc/vncviewer/Dialog.java b/java/com/tigervnc/vncviewer/Dialog.java
index 4419159..6204ba1 100644
--- a/java/com/tigervnc/vncviewer/Dialog.java
+++ b/java/com/tigervnc/vncviewer/Dialog.java
@@ -34,6 +34,7 @@
 import java.io.File;
 import javax.swing.*;
 import javax.swing.border.*;
+import javax.swing.filechooser.*;
 import javax.swing.text.*;
 
 class Dialog extends JDialog implements ActionListener,
@@ -137,17 +138,29 @@
     return width + gap;
   }
 
-  public static File showChooser(String title, File defFile, Container c) {
+  public static File showChooser(String title, File defFile,
+                                 Container c, FileNameExtensionFilter f) {
     JFileChooser fc = new JFileChooser(defFile);
     fc.setDialogTitle(title);
     fc.setApproveButtonText("OK  \u21B5");
     fc.setFileHidingEnabled(false);
+    if (f != null)
+      fc.setFileFilter(f);
     if (fc.showOpenDialog(c) == JFileChooser.APPROVE_OPTION)
       return fc.getSelectedFile();
     else
       return null;
   }
 
+  public static File showChooser(String title, File defFile, Container c) {
+    return showChooser(title, defFile, c, null);
+  }
+
+  protected File showChooser(String title, File defFile,
+                             FileNameExtensionFilter f) {
+    return showChooser(title, defFile, this, f);
+  }
+
   protected File showChooser(String title, File defFile) {
     return showChooser(title, defFile, this);
   }
diff --git a/java/com/tigervnc/vncviewer/F8Menu.java b/java/com/tigervnc/vncviewer/F8Menu.java
index 6aadb2d..d7f9e48 100644
--- a/java/com/tigervnc/vncviewer/F8Menu.java
+++ b/java/com/tigervnc/vncviewer/F8Menu.java
@@ -23,6 +23,7 @@
 import java.awt.Cursor;
 import java.awt.event.*;
 import java.io.File;
+import javax.swing.filechooser.*;
 import javax.swing.JCheckBoxMenuItem;
 import javax.swing.JDialog;
 import javax.swing.JFrame;
@@ -139,7 +140,9 @@
 	    File dflt = new File(FileUtils.getVncHomeDir().concat("default.tigervnc"));
 	    if (!dflt.exists() || !dflt.isFile())
 	      dflt = new File(FileUtils.getVncHomeDir());
-	    File f = Dialog.showChooser(title, dflt, this);
+      FileNameExtensionFilter filter =
+        new FileNameExtensionFilter("TigerVNC configuration (*.tigervnc)", "tigervnc");
+	    File f = Dialog.showChooser(title, dflt, this, filter);
 	    while (f != null && f.exists() && f.isFile()) {
 	      String msg = f.getAbsolutePath();
 	      msg = msg.concat(" already exists. Do you want to overwrite?");
@@ -154,7 +157,7 @@
 	      if (op.getValue() == options[0])
 	        break;
 	      else
-	        f = Dialog.showChooser(title, f, this);
+	        f = Dialog.showChooser(title, f, this, filter);
 	    }
 	    if (f != null && (!f.exists() || f.canWrite()))
 	      saveViewerParameters(f.getAbsolutePath(), vncServerName.getValue());
diff --git a/java/com/tigervnc/vncviewer/OptionsDialog.java b/java/com/tigervnc/vncviewer/OptionsDialog.java
index 8d49a2e..4bcb7d8 100644
--- a/java/com/tigervnc/vncviewer/OptionsDialog.java
+++ b/java/com/tigervnc/vncviewer/OptionsDialog.java
@@ -27,6 +27,7 @@
 import java.text.NumberFormat;
 import javax.swing.*;
 import javax.swing.border.*;
+import javax.swing.filechooser.*;
 import javax.swing.UIManager.*;
 import javax.swing.text.*;
 import java.util.*;
@@ -779,7 +780,9 @@
       public void actionPerformed(ActionEvent e) {
         JComponent c = ((JButton)e.getSource()).getRootPane();
         File dflt = new File(CSecurityTLS.X509CA.getValueStr());
-        File f = showChooser("Path to X509 CA certificate", dflt, c);
+        FileNameExtensionFilter filter =
+          new FileNameExtensionFilter("X.509 certificate", "crt", "cer", "pem");
+        File f = showChooser("Path to X509 CA certificate", dflt, c, filter);
         if (f != null && f.exists() && f.canRead())
           caInput.setText(f.getAbsolutePath());
       }
@@ -791,7 +794,9 @@
       public void actionPerformed(ActionEvent e) {
         JComponent c = ((JButton)e.getSource()).getRootPane();
         File dflt = new File(CSecurityTLS.X509CRL.getValueStr());
-        File f = showChooser("Path to X509 CRL file", dflt, c);
+        FileNameExtensionFilter filter =
+          new FileNameExtensionFilter("X.509 CRL", "crl");
+        File f = showChooser("Path to X509 CRL file", dflt, c, filter);
         if (f != null && f.exists() && f.canRead())
           crlInput.setText(f.getAbsolutePath());
       }
diff --git a/java/com/tigervnc/vncviewer/ServerDialog.java b/java/com/tigervnc/vncviewer/ServerDialog.java
index 338e626..4b3f26b 100644
--- a/java/com/tigervnc/vncviewer/ServerDialog.java
+++ b/java/com/tigervnc/vncviewer/ServerDialog.java
@@ -24,6 +24,7 @@
 import java.io.File;
 import javax.swing.*;
 import javax.swing.border.*;
+import javax.swing.filechooser.*;
 import javax.swing.WindowConstants.*;
 import java.util.*;
 
@@ -221,7 +222,9 @@
   private void handleLoad() {
     String title = "Select a TigerVNC configuration file";
     File dflt = new File(FileUtils.getVncHomeDir().concat("default.tigervnc"));
-    File f = showChooser(title, dflt);
+    FileNameExtensionFilter filter =
+      new FileNameExtensionFilter("TigerVNC configuration (*.tigervnc)", "tigervnc");
+    File f = showChooser(title, dflt, filter);
     if (f != null && f.exists() && f.canRead())
       loadViewerParameters(f.getAbsolutePath());
   }
@@ -231,7 +234,9 @@
     File dflt = new File(FileUtils.getVncHomeDir().concat("default.tigervnc"));
     if (!dflt.exists() || !dflt.isFile())
       dflt = new File(FileUtils.getVncHomeDir());
-    File f = showChooser(title, dflt);
+    FileNameExtensionFilter filter =
+      new FileNameExtensionFilter("TigerVNC configuration (*.tigervnc)", "tigervnc");
+    File f = showChooser(title, dflt, filter);
     while (f != null && f.exists() && f.isFile()) {
       String msg = f.getAbsolutePath();
       msg = msg.concat(" already exists. Do you want to overwrite?");
@@ -246,7 +251,7 @@
       if (op.getValue() == options[0])
         break;
       else
-        f = showChooser(title, f);
+        f = showChooser(title, f, filter);
     }
     if (f != null && (!f.exists() || f.canWrite()))
       saveViewerParameters(f.getAbsolutePath(), (String)server.getSelectedItem());