/hg/icedtea-web: JDialog removed as main keeper of information i...

jvanek at icedtea.classpath.org jvanek at icedtea.classpath.org
Tue Oct 25 12:28:02 UTC 2016


changeset 51d1bce42e06 in /hg/icedtea-web
details: http://icedtea.classpath.org/hg/icedtea-web?cmd=changeset;node=51d1bce42e06
author: Jiri Vanek <jvanek at redhat.com>
date: Tue Oct 25 14:31:58 2016 +0200

	JDialog removed as main keeper of information in SecurityDialog class


diffstat:

 ChangeLog                                                                                                |   44 ++
 netx/net/sourceforge/jnlp/cache/DefaultDownloadIndicator.java                                            |    7 +-
 netx/net/sourceforge/jnlp/resources/Messages.properties                                                  |    2 +
 netx/net/sourceforge/jnlp/runtime/JNLPRuntime.java                                                       |   27 +-
 netx/net/sourceforge/jnlp/security/SecurityDialog.java                                                   |   98 +--
 netx/net/sourceforge/jnlp/security/SecurityDialogMessageHandler.java                                     |    6 +-
 netx/net/sourceforge/jnlp/security/SecurityDialogs.java                                                  |    2 -
 netx/net/sourceforge/jnlp/security/dialogresults/SetValueHandler.java                                    |    2 +-
 netx/net/sourceforge/jnlp/security/dialogs/AccessWarningPane.java                                        |    8 +-
 netx/net/sourceforge/jnlp/security/dialogs/InetSecurity511Panel.java                                     |    6 +-
 netx/net/sourceforge/jnlp/security/dialogs/MissingALACAttributePanel.java                                |    2 +-
 netx/net/sourceforge/jnlp/security/dialogs/MissingPermissionsAttributePanel.java                         |    2 +-
 netx/net/sourceforge/jnlp/security/dialogs/MoreInfoPane.java                                             |    2 +-
 netx/net/sourceforge/jnlp/security/dialogs/PasswordAuthenticationPane.java                               |    6 +-
 netx/net/sourceforge/jnlp/security/dialogs/ViwableDialog.java                                            |  219 ++++++++++
 netx/net/sourceforge/jnlp/security/dialogs/apptrustwarningpanel/MatchingALACAttributePanel.java          |    3 +-
 netx/net/sourceforge/jnlp/security/dialogs/apptrustwarningpanel/PartiallySignedAppTrustWarningPanel.java |    3 +-
 netx/net/sourceforge/jnlp/security/dialogs/apptrustwarningpanel/UnsignedAppletTrustWarningPanel.java     |    3 +-
 netx/net/sourceforge/jnlp/security/dialogs/remember/RememberDialog.java                                  |    9 +-
 netx/net/sourceforge/jnlp/util/logging/JavaConsole.java                                                  |   85 ++-
 20 files changed, 397 insertions(+), 139 deletions(-)

diffs (truncated from 1091 to 500 lines):

diff -r bf5ff6cf2dac -r 51d1bce42e06 ChangeLog
--- a/ChangeLog	Wed Oct 19 13:40:39 2016 +0200
+++ b/ChangeLog	Tue Oct 25 14:31:58 2016 +0200
@@ -1,3 +1,47 @@
+2016-10-25  Jiri Vanek <jvanek at redhat.com>
+
+	JDialog removed as main keeper of information in SecurityDialog class
+	* netx/net/sourceforge/jnlp/cache/DefaultDownloadIndicator.java:
+	If headless, is printing downloading message to console
+	* netx/net/sourceforge/jnlp/resources/Messages.properties:
+	Added key HEADLESS_MISSCONFIGURED warning user that he do not have X
+	* netx/net/sourceforge/jnlp/runtime/JNLPRuntime.java:
+	checkHeadless made lazy in first call to isHeadless
+	* netx/net/sourceforge/jnlp/security/SecurityDialog.java:
+	no longer Extends JDialog, instead have member ViwableDialog.
+	All calls to former extensions of JDialog changed to this viwableDialog
+	* netx/net/sourceforge/jnlp/security/SecurityDialogMessageHandler.java:
+	All calls to former JDialog changed to viwableDialog
+	* netx/net/sourceforge/jnlp/security/SecurityDialogs.java:
+	same
+	* netx/net/sourceforge/jnlp/security/dialogresults/SetValueHandler.java:
+	same
+	* netx/net/sourceforge/jnlp/security/dialogs/AccessWarningPane.java:
+	same
+	* netx/net/sourceforge/jnlp/security/dialogs/InetSecurity511Panel.java:
+	same
+	* netx/net/sourceforge/jnlp/security/dialogs/MissingALACAttributePanel.java:
+	same
+	* netx/net/sourceforge/jnlp/security/dialogs/MissingPermissionsAttributePanel.java:
+	same
+	* netx/net/sourceforge/jnlp/security/dialogs/MoreInfoPane.java:
+	same
+	* netx/net/sourceforge/jnlp/security/dialogs/PasswordAuthenticationPane.java:
+	same
+	* netx/net/sourceforge/jnlp/security/dialogs/apptrustwarningpanel/MatchingALACAttributePanel.java:
+	same
+	* netx/net/sourceforge/jnlp/security/dialogs/apptrustwarningpanel/PartiallySignedAppTrustWarningPanel.java:
+	same
+	* netx/net/sourceforge/jnlp/security/dialogs/apptrustwarningpanel/UnsignedAppletTrustWarningPanel.java:
+	same
+	* netx/net/sourceforge/jnlp/security/dialogs/remember/RememberDialog.java:
+	Search now contains check for itself, as input is not dialog, but security panel
+	* netx/net/sourceforge/jnlp/util/logging/JavaConsole.java:
+	made better accepting headless state
+    * netx/net/sourceforge/jnlp/security/dialogs/ViwableDialog.java:
+	New class. Instead of applying all sets to jdialog itself, those are saved,
+	and applied just before cration of the dialog itself.
+
 2016-10-17  Jiri Vanek <jvanek at redhat.com>
 
 	Workarounded to pass configure checks on jdk9 to debug build failures themselves
diff -r bf5ff6cf2dac -r 51d1bce42e06 netx/net/sourceforge/jnlp/cache/DefaultDownloadIndicator.java
--- a/netx/net/sourceforge/jnlp/cache/DefaultDownloadIndicator.java	Wed Oct 19 13:40:39 2016 +0200
+++ b/netx/net/sourceforge/jnlp/cache/DefaultDownloadIndicator.java	Tue Oct 25 14:31:58 2016 +0200
@@ -30,6 +30,7 @@
 import net.sourceforge.jnlp.runtime.*;
 import net.sourceforge.jnlp.util.ImageResources;
 import net.sourceforge.jnlp.util.ScreenFinder;
+import net.sourceforge.jnlp.util.logging.OutputController;
 
 /**
  * Show the progress of downloads.
@@ -338,7 +339,11 @@
             // don't get whole string from resource and sub in
             // values because it'll be doing a MessageFormat for
             // each update.
-            header.setText(downloading + " " + downloadName + ": " + percent + "% " + complete + ".");
+            String s = downloading + " " + downloadName + ": " + percent + "% " + complete + ".";
+            if (JNLPRuntime.isHeadless()){
+                OutputController.getLogger().log(OutputController.Level.MESSAGE_ALL, s);
+            }
+            header.setText(s);
             Container c = header.getParent();
             //we need to adapt both panels and also dialog to new length of header text
             while (c != null) {
diff -r bf5ff6cf2dac -r 51d1bce42e06 netx/net/sourceforge/jnlp/resources/Messages.properties
--- a/netx/net/sourceforge/jnlp/resources/Messages.properties	Wed Oct 19 13:40:39 2016 +0200
+++ b/netx/net/sourceforge/jnlp/resources/Messages.properties	Tue Oct 25 14:31:58 2016 +0200
@@ -31,6 +31,8 @@
 BUTforward=Forward
 BUTreload=Reload
 
+HEADLESS_MISSCONFIGURED=Headless check failed. You are forced to run without any graphics. IcedTea-Web can run like this, but your app probably not. This is likely bug in your system.
+
 CertWarnRunTip=Trust this applet and run with full permissions
 CertWarnSandboxTip=Do not trust this applet and run with restricted permissions
 CertWarnCancelTip=Do not run this applet
diff -r bf5ff6cf2dac -r 51d1bce42e06 netx/net/sourceforge/jnlp/runtime/JNLPRuntime.java
--- a/netx/net/sourceforge/jnlp/runtime/JNLPRuntime.java	Wed Oct 19 13:40:39 2016 +0200
+++ b/netx/net/sourceforge/jnlp/runtime/JNLPRuntime.java	Tue Oct 25 14:31:58 2016 +0200
@@ -48,6 +48,7 @@
 import javax.net.ssl.SSLSocketFactory;
 import javax.net.ssl.TrustManager;
 import javax.swing.JOptionPane;
+import javax.swing.JWindow;
 import javax.swing.UIManager;
 import javax.swing.text.html.parser.ParserDelegator;
 
@@ -126,6 +127,7 @@
 
     /** whether netx is in command-line mode (headless) */
     private static boolean headless = false;
+    private static boolean headlessChecked = false;
 
     /** whether we'll be checking for jar signing */
     private static boolean verify = true;
@@ -241,14 +243,11 @@
         System.setProperty("javawebstart.version", "javaws-" +
                 System.getProperty("java.version"));
 
-        if (headless == false)
-            checkHeadless();
-
-        if (!headless && indicator == null)
+        if (!isHeadless() && indicator == null)
             indicator = new DefaultDownloadIndicator();
 
         if (handler == null) {
-            if (headless) {
+            if (isHeadless()) {
                 handler = new DefaultLaunchHandler(OutputController.getLogger());
             } else {
                 handler = new GuiLaunchHandler(OutputController.getLogger());
@@ -500,6 +499,10 @@
      * components.
      */
     public static boolean isHeadless() {
+        if (!headless && !headlessChecked) {
+            checkHeadless();
+
+        }
         return headless;
     }
 
@@ -733,9 +736,21 @@
         //if (GraphicsEnvironment.isHeadless()) // jdk1.4+ only
         //    headless = true;
         try {
-            if ("true".equalsIgnoreCase(System.getProperty("java.awt.headless")))
+            if ("true".equalsIgnoreCase(System.getProperty("java.awt.headless"))){
                 headless = true;
+            }
+            if (!headless) {
+                try {
+                    new JWindow().getOwner();
+                } catch (Exception ex) {
+                    headless = true;
+                    OutputController.getLogger().log(ex);
+                    OutputController.getLogger().log(OutputController.Level.MESSAGE_ALL, Translator.R("HEADLESS_MISSCONFIGURED"));
+                }
+            }
         } catch (SecurityException ex) {
+        } finally {
+            headlessChecked = true;
         }
     }
 
diff -r bf5ff6cf2dac -r 51d1bce42e06 netx/net/sourceforge/jnlp/security/SecurityDialog.java
--- a/netx/net/sourceforge/jnlp/security/SecurityDialog.java	Wed Oct 19 13:40:39 2016 +0200
+++ b/netx/net/sourceforge/jnlp/security/SecurityDialog.java	Tue Oct 25 14:31:58 2016 +0200
@@ -38,13 +38,12 @@
 package net.sourceforge.jnlp.security;
 
 import java.awt.BorderLayout;
-import java.awt.event.ActionListener;
+import java.awt.Component;
+import java.awt.Dialog.ModalityType;
 import java.awt.event.WindowAdapter;
 import java.awt.event.WindowEvent;
 import java.net.URL;
 import java.security.cert.X509Certificate;
-import java.util.List;
-import java.util.concurrent.CopyOnWriteArrayList;
 
 import javax.swing.JDialog;
 
@@ -64,8 +63,8 @@
 import net.sourceforge.jnlp.security.dialogs.PasswordAuthenticationPane;
 import net.sourceforge.jnlp.security.dialogs.SecurityDialogPanel;
 import net.sourceforge.jnlp.security.dialogs.SingleCertInfoPane;
+import net.sourceforge.jnlp.security.dialogs.ViwableDialog;
 import net.sourceforge.jnlp.security.dialogs.apptrustwarningpanel.AppTrustWarningDialog;
-import net.sourceforge.jnlp.util.ImageResources;
 import net.sourceforge.jnlp.util.ScreenFinder;
 import net.sourceforge.jnlp.util.logging.OutputController;
 
@@ -77,7 +76,7 @@
  *
  * @author <a href="mailto:jsumali at redhat.com">Joshua Sumali</a>
  */
-public class SecurityDialog extends JDialog {
+public class SecurityDialog {
 
     /** The type of dialog we want to show */
     private final DialogType dialogType;
@@ -104,14 +103,15 @@
     private boolean initialized = false;
 
     private DialogResult value;
+    
+    private ViwableDialog viwableDialog;
 
     /** Should show signed JNLP file warning */
     private boolean requiresSignedJNLPWarning;
 
     SecurityDialog(DialogType dialogType, AccessType accessType,
                 JNLPFile file, CertVerifier JarCertVerifier, X509Certificate cert, Object[] extras) {
-        super();
-        setIconImages(ImageResources.INSTANCE.getApplicationImages());
+        this.viwableDialog = new ViwableDialog();
         this.dialogType = dialogType;
         this.accessType = accessType;
         this.file = file;
@@ -188,9 +188,9 @@
         SecurityDialog dialog =
                         new SecurityDialog(DialogType.MORE_INFO, null, file,
                                 certVerifier);
-        dialog.setModalityType(ModalityType.APPLICATION_MODAL);
-        dialog.setVisible(true);
-        dialog.dispose();
+        dialog.getViwableDialog().setModalityType(ModalityType.APPLICATION_MODAL);
+        dialog.getViwableDialog().show();
+        dialog.getViwableDialog().dispose();
     }
 
     /**
@@ -200,13 +200,13 @@
      * @param parent the parent option pane
      */
     public static void showCertInfoDialog(CertVerifier certVerifier,
-                SecurityDialog parent) {
+                Component parent) {
         SecurityDialog dialog = new SecurityDialog(DialogType.CERT_INFO,
                         null, null, certVerifier);
-        dialog.setLocationRelativeTo(parent);
-        dialog.setModalityType(ModalityType.APPLICATION_MODAL);
-        dialog.setVisible(true);
-        dialog.dispose();
+        dialog.getViwableDialog().setLocationRelativeTo(parent);
+        dialog.getViwableDialog().setModalityType(ModalityType.APPLICATION_MODAL);
+        dialog.getViwableDialog().show();
+        dialog.getViwableDialog().dispose();
     }
 
     /**
@@ -218,24 +218,24 @@
     public static void showSingleCertInfoDialog(X509Certificate c,
                         JDialog parent) {
         SecurityDialog dialog = new SecurityDialog(DialogType.SINGLE_CERT_INFO, c);
-        dialog.setLocationRelativeTo(parent);
-        dialog.setModalityType(ModalityType.APPLICATION_MODAL);
-        dialog.setVisible(true);
-        dialog.dispose();
+        dialog.getViwableDialog().setLocationRelativeTo(parent);
+        dialog.getViwableDialog().setModalityType(ModalityType.APPLICATION_MODAL);
+        dialog.getViwableDialog().show();
+        dialog.getViwableDialog().dispose();
     }
 
     private void initDialog() {
         String dialogTitle = createTitle();
 
-        setTitle(dialogTitle);
-        setModalityType(ModalityType.MODELESS);
+        getViwableDialog().setTitle(dialogTitle);
+        getViwableDialog().setModalityType(ModalityType.MODELESS);
 
-        setDefaultCloseOperation(DISPOSE_ON_CLOSE);
+        getViwableDialog().setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
 
         installPanel();
 
-        pack();
-        centerDialog(this);
+        getViwableDialog().pack();
+        getViwableDialog().centerDialog();
 
         WindowAdapter adapter = new WindowAdapter() {
             private boolean gotFocus = false;
@@ -253,13 +253,13 @@
             public void windowOpened(WindowEvent e) {
                 if (e.getSource() instanceof SecurityDialog) {
                     SecurityDialog dialog = (SecurityDialog) e.getSource();
-                    dialog.setResizable(true);
+                    dialog.getViwableDialog().setResizable(true);
                     dialog.setValue(null);
                 }
             }
         };
-        addWindowListener(adapter);
-        addWindowFocusListener(adapter);
+        getViwableDialog().addWindowListener(adapter);
+        getViwableDialog().addWindowFocusListener(adapter);
     }
 
     private String createTitle() {
@@ -356,11 +356,7 @@
      */
     private void installPanel() {
         panel = getPanel();
-        add(panel, BorderLayout.CENTER);
-    }
-
-    private static void centerDialog(JDialog dialog) {
-        ScreenFinder.centerWindowsToCurrentScreen(dialog);
+        getViwableDialog().add(panel, BorderLayout.CENTER);
     }
 
     private void selectDefaultButton() {
@@ -381,37 +377,6 @@
         return value;
     }
 
-    /**
-     * Called when the SecurityDialog is hidden - either because the user
-     * made a choice (Ok, Cancel, etc) or closed the window
-     */
-    @Override
-    public void dispose() {
-        notifySelectionMade();
-        super.dispose();
-    }
-
-    private final List<ActionListener> listeners = new CopyOnWriteArrayList<>();
-
-    /**
-     * Notify all the listeners that the user has made a decision using this
-     * security dialog.
-     */
-    private void notifySelectionMade() {
-        for (ActionListener listener : listeners) {
-            listener.actionPerformed(null);
-        }
-    }
-
-    /**
-     * Adds an {@link ActionListener} which will be notified if the user makes a
-     * choice using this SecurityDialog. The listener should use {@link #getValue()}
-     * to actually get the user's response.
-     * @param listener another action listener to be listen to
-     */
-    public void addActionListener(ActionListener listener) {
-        listeners.add(listener);
-    }
     
     public boolean requiresSignedJNLPWarning()
     {
@@ -438,4 +403,11 @@
         return panel.helpToStdIn();
     }
 
+    public ViwableDialog getViwableDialog() {
+        return viwableDialog;
+    }
+    
+    public SecurityDialogPanel getSecurityDialogPanel(){
+        return panel;
+    }
 }
diff -r bf5ff6cf2dac -r 51d1bce42e06 netx/net/sourceforge/jnlp/security/SecurityDialogMessageHandler.java
--- a/netx/net/sourceforge/jnlp/security/SecurityDialogMessageHandler.java	Wed Oct 19 13:40:39 2016 +0200
+++ b/netx/net/sourceforge/jnlp/security/SecurityDialogMessageHandler.java	Tue Oct 25 14:31:58 2016 +0200
@@ -117,7 +117,7 @@
             return;
         }
 
-        final RememberableDialog found = RememberDialog.getInstance().findRememberablePanel(dialog);
+        final RememberableDialog found = RememberDialog.getInstance().findRememberablePanel(dialog.getSecurityDialogPanel());
         SavedRememberAction action = null;
         if (found!=null){
             action = RememberDialog.getInstance().getRememberedState(found);
@@ -155,7 +155,7 @@
     }
 
     private void processMessageInGui(final SecurityDialog dialog, final RememberableDialog found, final SecurityDialogMessage message) {
-        dialog.addActionListener(new ActionListener() {
+        dialog.getViwableDialog().addActionListener(new ActionListener() {
             
             @Override
             public void actionPerformed(ActionEvent e) {
@@ -169,7 +169,7 @@
             }
             
         });
-        dialog.setVisible(true);
+        dialog.getViwableDialog().show();
     }
 
     private void processMessageInHeadless(final SecurityDialog dialog, final SecurityDialogMessage message) {
diff -r bf5ff6cf2dac -r 51d1bce42e06 netx/net/sourceforge/jnlp/security/SecurityDialogs.java
--- a/netx/net/sourceforge/jnlp/security/SecurityDialogs.java	Wed Oct 19 13:40:39 2016 +0200
+++ b/netx/net/sourceforge/jnlp/security/SecurityDialogs.java	Tue Oct 25 14:31:58 2016 +0200
@@ -50,7 +50,6 @@
 import javax.swing.SwingUtilities;
 
 import net.sourceforge.jnlp.JNLPFile;
-import net.sourceforge.jnlp.LaunchException;
 import net.sourceforge.jnlp.cache.Resource;
 import net.sourceforge.jnlp.runtime.JNLPClassLoader.SecurityDelegate;
 import net.sourceforge.jnlp.runtime.JNLPRuntime;
@@ -60,7 +59,6 @@
 import net.sourceforge.jnlp.security.dialogresults.YesCancel;
 import net.sourceforge.jnlp.security.dialogresults.YesNoSandbox;
 import net.sourceforge.jnlp.security.dialogresults.YesNoSandboxLimited;
-import net.sourceforge.jnlp.security.dialogs.InetSecurity511Panel;
 import net.sourceforge.jnlp.util.UrlUtils;
 import net.sourceforge.jnlp.util.logging.OutputController;
 
diff -r bf5ff6cf2dac -r 51d1bce42e06 netx/net/sourceforge/jnlp/security/dialogresults/SetValueHandler.java
--- a/netx/net/sourceforge/jnlp/security/dialogresults/SetValueHandler.java	Wed Oct 19 13:40:39 2016 +0200
+++ b/netx/net/sourceforge/jnlp/security/dialogresults/SetValueHandler.java	Tue Oct 25 14:31:58 2016 +0200
@@ -72,7 +72,7 @@
     @Override
     public void actionPerformed(ActionEvent e) {
         dialog.setValue(returnValue);
-        dialog.dispose();
+        dialog.getViwableDialog().dispose();
     }
 
 }
diff -r bf5ff6cf2dac -r 51d1bce42e06 netx/net/sourceforge/jnlp/security/dialogs/AccessWarningPane.java
--- a/netx/net/sourceforge/jnlp/security/dialogs/AccessWarningPane.java	Wed Oct 19 13:40:39 2016 +0200
+++ b/netx/net/sourceforge/jnlp/security/dialogs/AccessWarningPane.java	Tue Oct 25 14:31:58 2016 +0200
@@ -289,7 +289,7 @@
                 negateVisibility(rememberPanel);
                 negateVisibility(htmlPanelDesktop);
                 negateVisibility(htmlPanelMenu);
-                AccessWarningPane.this.parent.pack();
+                AccessWarningPane.this.parent.getViwableDialog().pack();
                 
             }
 
@@ -305,7 +305,7 @@
             @Override
             public void actionPerformed(ActionEvent e) {
                 parent.setValue(getModifier(BasicDialogValue.Primitive.YES));
-                parent.dispose();
+                parent.getViwableDialog().dispose();
             }
         });
         cancel.addActionListener(new ActionListener() {
@@ -313,7 +313,7 @@
             @Override
             public void actionPerformed(ActionEvent e) {
                 parent.setValue(getModifier(BasicDialogValue.Primitive.NO));
-                parent.dispose();
+                parent.getViwableDialog().dispose();
             }
         });
         initialFocusComponent = cancel;
@@ -329,7 +329,7 @@
         add(buttonPanel);
         
         rememberPanel.setVisible(false);
-        this.parent.pack();
+        this.parent.getViwableDialog().pack();
 
     }
 
diff -r bf5ff6cf2dac -r 51d1bce42e06 netx/net/sourceforge/jnlp/security/dialogs/InetSecurity511Panel.java
--- a/netx/net/sourceforge/jnlp/security/dialogs/InetSecurity511Panel.java	Wed Oct 19 13:40:39 2016 +0200
+++ b/netx/net/sourceforge/jnlp/security/dialogs/InetSecurity511Panel.java	Tue Oct 25 14:31:58 2016 +0200
@@ -92,7 +92,7 @@
             public void actionPerformed(ActionEvent e) {
                 if (sd != null) {
                     sd.setValue(YesCancelSkip.yes());
-                    sd.dispose();
+                    parent.getViwableDialog().dispose();
                 }
             }
         });
@@ -103,7 +103,7 @@
             public void actionPerformed(ActionEvent e) {
                 if (sd != null) {
                     sd.setValue(YesCancelSkip.cancel());
-                    sd.dispose();
+                    parent.getViwableDialog().dispose();
                 }
             }
         });
@@ -143,7 +143,7 @@
         this.add(title, BorderLayout.NORTH);
         if (sd != null) {
             //for testing pusposes
-            sd.pack();
+            sd.getViwableDialog().pack();
         }
     }
 
diff -r bf5ff6cf2dac -r 51d1bce42e06 netx/net/sourceforge/jnlp/security/dialogs/MissingALACAttributePanel.java
--- a/netx/net/sourceforge/jnlp/security/dialogs/MissingALACAttributePanel.java	Wed Oct 19 13:40:39 2016 +0200
+++ b/netx/net/sourceforge/jnlp/security/dialogs/MissingALACAttributePanel.java	Tue Oct 25 14:31:58 2016 +0200
@@ -89,7 +89,7 @@
             throw new RuntimeException(ex);
         }
         if (x != null) {
-            x.setMinimumSize(new Dimension(600, 400));
+            x.getViwableDialog().setMinimumSize(new Dimension(600, 400));
         }
     }


More information about the distro-pkg-dev mailing list