+2004-04-21  Mark Wielaard  <mark@klomp.org>
+
+       * javax/awt/JFrame.java: Implement WindowConstants. Remove final
+       static fields defined in interface.
+       * javax/awt/JDialog.java: Likewise.
+       (JDialog): Make constructors public.
+       (getDefaultCloseOperation): Make public.
+       (processWindowEvent): Call System.exit(0) when EXIT_ON_CLOSE set.
+       (setDefaultCloseOperation): Make public. Check argument. Add API doc.
+       * javax/swing/JViewport.java (JViewport): Make constructor public.
+
 2004-04-21  Michael Koch  <konqueror@gmx.de>
 
        * java/util/Map.java
 
 /* JDialog.java --
-   Copyright (C) 2002 Free Software Foundation, Inc.
+   Copyright (C) 2002, 2004 Free Software Foundation, Inc.
 
 This file is part of GNU Classpath.
 
  *
  * @author Ronald Veldema (rveldema@cs.vu.nl)
  */
-public class JDialog extends Dialog implements Accessible
+public class JDialog extends Dialog implements Accessible, WindowConstants
 {
-    public final static int HIDE_ON_CLOSE        = 0;
-    public final static int DISPOSE_ON_CLOSE     = 1;
-    public final static int DO_NOTHING_ON_CLOSE  = 2;
-
     protected  AccessibleContext accessibleContext;
 
     private int close_action = HIDE_ON_CLOSE;    
      *
      *************/
 
-    JDialog(Frame owner)
+    public JDialog(Frame owner)
     {
        this(owner, "dialog");
     }
     
-    JDialog(Frame owner,
+    public JDialog(Frame owner,
            String s)
     {
        this(owner, s, true);
     }
     
-  JDialog(Frame owner,
+  public JDialog(Frame owner,
          String s,
          boolean modeld)
     {
        super(owner, s, modeld);
     }
 
-  JDialog(Frame owner,
+  public JDialog(Frame owner,
          //  String s,
          boolean modeld)
     {
        super(owner, "JDialog", modeld);
     }
-  JDialog(Dialog owner)
+  public JDialog(Dialog owner)
   {
       this(owner, "dialog");
   }
     
-    JDialog(Dialog owner,
+    public JDialog(Dialog owner,
            String s)
     {
        this(owner, s, true);
     }
     
-  JDialog(Dialog owner,
+  public JDialog(Dialog owner,
          String s,
          boolean modeld)
     {
 
     protected  void processWindowEvent(WindowEvent e)
     {
-       //      System.out.println("PROCESS_WIN_EV-1: " + e);
        super.processWindowEvent(e); 
-       //      System.out.println("PROCESS_WIN_EV-2: " + e);
        switch (e.getID())
            {
            case WindowEvent.WINDOW_CLOSING:
                {
                    switch(close_action)
                        {
+                       case EXIT_ON_CLOSE:
+                         {
+                           System.exit(0);
+                           break;
+                         }
                        case DISPOSE_ON_CLOSE:
                            {
-                               System.out.println("user requested dispose on close");
                                dispose();
                                break;
                            }
     }   
  
 
-    void setDefaultCloseOperation(int operation)
-    {  close_action = operation;   }
+  /**
+   * Defines what happens when this frame is closed. Can be one off
+   * <code>EXIT_ON_CLOSE</code>,
+   * <code>DISPOSE_ON_CLOSE</code>,
+   * <code>HIDE_ON_CLOSE</code> or
+   * <code>DO_NOTHING_ON_CLOSE</code>.
+   * The default is <code>HIDE_ON_CLOSE</code>.
+   * When <code>EXIT_ON_CLOSE</code> is specified this method calls
+   * <code>SecurityManager.checkExit(0)</code> which might throw a
+   * <code>SecurityException</code>. When the specified operation is
+   * not one of the above a <code>IllegalArgumentException</code> is
+   * thrown.
+   */
+  public void setDefaultCloseOperation(int operation)
+  {
+    SecurityManager sm = System.getSecurityManager();
+    if (sm != null && operation == EXIT_ON_CLOSE)
+      sm.checkExit(0);
+    
+    if (operation != EXIT_ON_CLOSE && operation != DISPOSE_ON_CLOSE
+       && operation != HIDE_ON_CLOSE && operation != DO_NOTHING_ON_CLOSE)
+      throw new IllegalArgumentException("operation = " + operation);
+    
+    close_action = operation;
+  }
+  
+  public int getDefaultCloseOperation()
+  {    return close_action;   }
 
     protected  String paramString()
     {   return "JDialog";     }
 
 /* JFrame.java --
-   Copyright (C) 2002 Free Software Foundation, Inc.
+   Copyright (C) 2002, 2004 Free Software Foundation, Inc.
 
 This file is part of GNU Classpath.
 
  *
  * @author Ronald Veldema (rveldema@cs.vu.nl)
  */
-public class JFrame extends Frame
+public class JFrame extends Frame implements WindowConstants
 {
-    public final static int HIDE_ON_CLOSE        = 0;
-    public final static int EXIT_ON_CLOSE        = 1;
-    public final static int DISPOSE_ON_CLOSE     = 2;
-    public final static int DO_NOTHING_ON_CLOSE  = 3;
-
     protected  AccessibleContext accessibleContext;
 
-    private int close_action = EXIT_ON_CLOSE;    
+    private int close_action = HIDE_ON_CLOSE;    
     
 
     /***************************************************
     return accessibleContext;
   }
   
-    int getDefaultCloseOperation()
+    public int getDefaultCloseOperation()
     {    return close_action;   }
 
     
                        {
                        case EXIT_ON_CLOSE:
                            {
-                               System.exit(1);
+                               System.exit(0);
                                break;
                            }
                        case DISPOSE_ON_CLOSE:
            }
     }   
  
-
-    void setDefaultCloseOperation(int operation)
-    {  close_action = operation;   }
+    /**
+     * Defines what happens when this frame is closed. Can be one off
+     * <code>EXIT_ON_CLOSE</code>,
+     * <code>DISPOSE_ON_CLOSE</code>,
+     * <code>HIDE_ON_CLOSE</code> or
+     * <code>DO_NOTHING_ON_CLOSE</code>.
+     * The default is <code>HIDE_ON_CLOSE</code>.
+     * When <code>EXIT_ON_CLOSE</code> is specified this method calls
+     * <code>SecurityManager.checkExit(0)</code> which might throw a
+     * <code>SecurityException</code>. When the specified operation is
+     * not one of the above a <code>IllegalArgumentException</code> is
+     * thrown.
+     */
+    public void setDefaultCloseOperation(int operation)
+    {
+      SecurityManager sm = System.getSecurityManager();
+      if (sm != null && operation == EXIT_ON_CLOSE)
+       sm.checkExit(0);
+
+      if (operation != EXIT_ON_CLOSE && operation != DISPOSE_ON_CLOSE
+         && operation != HIDE_ON_CLOSE && operation != DO_NOTHING_ON_CLOSE)
+       throw new IllegalArgumentException("operation = " + operation);
+         
+      close_action = operation;
+    }
 
 }