summaryrefslogtreecommitdiffstats
path: root/libjava/java/awt
diff options
context:
space:
mode:
authorgraydon <graydon@138bc75d-0d04-0410-961f-82ee72b054a4>2005-02-16 20:03:29 +0000
committergraydon <graydon@138bc75d-0d04-0410-961f-82ee72b054a4>2005-02-16 20:03:29 +0000
commit9a88c53bf3f17897356531c943b1613f38a1f9d2 (patch)
treea4155758493cddf09d676b0715a4317059dda9dc /libjava/java/awt
parent1e89119c853abeb23c81639f8c93305c3b87bbe9 (diff)
downloadppe42-gcc-9a88c53bf3f17897356531c943b1613f38a1f9d2.tar.gz
ppe42-gcc-9a88c53bf3f17897356531c943b1613f38a1f9d2.zip
2005-02-15 Mark Wielaard <mark@klomp.org>
* java/awt/BasicStroke.java (hashCode): Check for null dash. 2005-02-15 Michael Koch <konqueror@gmx.de> * gnu/java/awt/peer/gtk/GtkArg.java, gnu/java/awt/peer/gtk/GtkArgList.java: Removed. 2005-02-15 Craig Black <craig.black@aonix.com> * gnu/java/awt/peer/gtk/GtkCheckboxMenuItem.java (postMenuActionEvent): Implement to notify ItemListeners. * java/awt/CheckboxMenuItem.java (dispatchEventImpl): Update state on ItemEvent. * java/awt/MenuItem.java (processActionEvent): Retarget event source. 2005-02-15 Andrew John Hughes <gnu_andrew@member.fsf.org> * gnu/java/awt/color/ClutProfileConverter.java, gnu/java/awt/peer/ClasspathTextLayoutPeer.java, gnu/java/awt/peer/gtk/GdkFontPeer.java, gnu/java/awt/peer/gtk/GdkGlyphVector.java, gnu/java/awt/peer/gtk/GdkGraphics2D.java, gnu/java/awt/peer/gtk/GdkGraphicsEnvironment.java, gnu/java/awt/peer/gtk/GdkPixbufDecoder.java, gnu/java/awt/peer/gtk/GdkRobotPeer.java, gnu/java/awt/peer/gtk/GdkTextLayout.java, gnu/java/awt/peer/gtk/GtkButtonPeer.java, gnu/java/awt/peer/gtk/GtkCheckboxPeer.java, gnu/java/awt/peer/gtk/GtkChoicePeer.java, gnu/java/awt/peer/gtk/GtkComponentPeer.java, gnu/java/awt/peer/gtk/GtkContainerPeer.java, gnu/java/awt/peer/gtk/GtkDialogPeer.java, gnu/java/awt/peer/gtk/GtkFileDialogPeer.java, gnu/java/awt/peer/gtk/GtkFontPeer.java, gnu/java/awt/peer/gtk/GtkFramePeer.java, gnu/java/awt/peer/gtk/GtkLabelPeer.java, gnu/java/awt/peer/gtk/GtkMenuComponentPeer.java, gnu/java/awt/peer/gtk/GtkMenuItemPeer.java, gnu/java/awt/peer/gtk/GtkScrollPanePeer.java, gnu/java/awt/peer/gtk/GtkTextComponentPeer.java, gnu/java/awt/peer/gtk/GtkToolkit.java, gnu/java/awt/peer/gtk/GtkWindowPeer.java, javax/swing/JPopupMenu.java, javax/swing/JSpinner.java, javax/swing/SortingFocusTraversalPolicy.java, javax/swing/SwingUtilities.java, javax/swing/plaf/basic/BasicComboBoxEditor.java, javax/swing/plaf/basic/BasicComboBoxRenderer.java, javax/swing/tree/DefaultMutableTreeNode.java: Removed unused imports and expanded starred imports. 2005-02-15 Mark Wielaard <mark@klomp.org> * java/awt/AWTKeyStroke.java (getAWTKeyStroke(String)): Throw IllegalArgumentException when the given String is null. * javax/swing/KeyStroke.java (getKeyStroke(String)): Return null when given keystoke sequence cannot be parsed. * javax/swing/JRootPane.java (setJMenuBar): Remove current menubar if one is installed. Only install the given menubar is not null. * javax/swing/JViewport.java (getViewSize): Return an empty Dimension when the view isn't set or preferred component size when no viewSize is set. * javax/swing/ViewportLayout.java (preferredLayoutSize): Return an empty Dimension when there is no view set. (minimumLayoutSize): Likewise. (layoutContainer): Don't try to layout when there is no view. 2005-02-15 Anthony Green <green@redhat.com> * jni/gtk-peer/gtk_jawt.c (classpath_jawt_get_drawable, classpath_jawt_lock, classpath_jawt_unlock): New functions. * jawt.c (_Jv_JAWT_Lock, _Jv_JAWT_Unlock): New functions. (_Jv_GetDrawingSurface): Set visualID. (_Jv_FreeDrawingSurfaceInfo): Clear visualID. (JAWT_GetAWT): Set Lock and Unlock. * include/jawt_md.h (struct _JAWT_X11DrawingSurfaceInfo): Add visualID. * include/jawt.h (JAWT_VERSION_1_4, JAWT_LOCK_ERROR, JAWT_LOCK_CLIP_CHANGED, JAWT_LOCK_BOUNDS_CHANGED, JAWT_LOCK_SURFACE_CHANGED): New macros. (struct _JAWT): Add Lock and Unlock. 2005-02-15 Thomas Fitzsimmons <fitzsim@redhat.com> * jawt.c: New file. * include/jawt.h: Likewise. * include/jawt_md.h: Likewise. * include/Makefile.am (tool_include__HEADERS): Add jawt.h and jawt_md.h files. * jni/classpath/classpath_jawt.h: Likewise. * jni/gtk-peer/gtk_jawt.c: Likewise. * Makefile.am: Build libjawt.so. 2005-02-15 Michael Koch <konqueror@gmx.de> * gnu/java/awt/peer/gtk/GdkGraphics2D.java: Merged file header with classpath CVS head. * gnu/java/awt/peer/gtk/GdkPixbufDecoder.java: Merged code formatting with classpath CVS head. * jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontPeer.c: Removed debug code. (Java_gnu_java_awt_peer_gtk_GdkFontPeer_getGlyphVector): Handle special JNI strings with 2 '\0' at the end. * jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c: Merged file header with classpath CVS head. * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFileDialogPeer.c: Merged code formatting with classpath CVS head. 2005-02-15 Thomas Fitzsimmons <fitzsim@redhat.com> * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFileDialogPeer.c (create): Use GTK's built-in file system backend. Use GTK_RESPONSE_ACCEPT. (handle_response): Use GTK_RESPONSE_ACCEPT. 2005-02-15 Graydon Hoare <graydon@redhat.com> * Makefile.am: Fix library build breakage. * Makefile.in: Regenerate. 2005-02-15 Michael Koch <konqueror@gmx.de> * javax/swing/JTabbedPane.java (Page.setDisplayedMnemonicIndex): Handle empty menmonic. 2005-02-15 Michael Koch <konqueror@gmx.de> * javax/swing/tree/DefaultMutableTreeNode.java: Reworked Javadocs all over. (getPathToRoot): Fixed direction of result array initialization. 2005-02-15 Michael Koch <konqueror@gmx.de> * jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c: Fix includes for cairo 0.3.0 snappshot. * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkListPeer.c: Merged file header from classpath CVS HEAD. 2005-02-15 Craig Black <craig.black@aonix.com> * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c (copyState): Pass a JNI global reference to signal handler. (realize_cb): Use and free JNI global reference. * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkChoicePeer.c (create): Pass a JNI global reference to signal handler. (selection_changed): Match declaration. * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkGenericPeer.c (dispose): Do not remove entries from state tables until after widget is destroyed. 2005-02-15 Michael Koch <konqueror@gmx.de> * java/awt/Container.javai (paramString): If layoutMgr is null just return result of super.paramString(). * java/awt/Scrollbar.java: Reformatted. * java/awt/im/InputContext.java (static): Removed redundant initializations. 2005-02-15 Michael Koch <konqueror@gmx.de> * javax/swing/ImageIcon.java, javax/swing/UIManager.java, javax/swing/text/EditorKit.java, javax/swing/text/Segment.java: More whitespace cleanups. 2005-02-15 Michael Koch <konqueror@gmx.de> * gnu/java/awt/EmbeddedWindow.java, gnu/java/awt/image/ImageDecoder.java, gnu/java/awt/peer/gtk/GtkFileDialogPeer.java, java/awt/DefaultKeyboardFocusManager.java, java/awt/Frame.java, java/awt/image/RGBImageFilter.java, javax/swing/AbstractButton.java, javax/swing/ActionMap.java, javax/swing/ComponentInputMap.java, javax/swing/DefaultDesktopManager.java, javax/swing/ImageIcon.java, javax/swing/InputMap.java, javax/swing/JButton.java, javax/swing/JCheckBox.java, javax/swing/JCheckBoxMenuItem.java, javax/swing/JEditorPane.java, javax/swing/JMenu.java, javax/swing/JMenuItem.java, javax/swing/JOptionPane.java, javax/swing/JRootPane.java, javax/swing/JTable.java, javax/swing/MenuSelectionManager.java, javax/swing/RepaintManager.java, javax/swing/ScrollPaneLayout.java, javax/swing/SortingFocusTraversalPolicy.java, javax/swing/UIManager.java, javax/swing/ViewportLayout.java, javax/swing/plaf/basic/BasicCheckBoxMenuItemUI.java, javax/swing/plaf/basic/BasicInternalFrameUI.java, javax/swing/plaf/basic/BasicLabelUI.java, javax/swing/plaf/basic/BasicListUI.java, javax/swing/plaf/basic/BasicMenuItemUI.java, javax/swing/plaf/basic/BasicMenuUI.java, javax/swing/plaf/basic/BasicOptionPaneUI.java, javax/swing/plaf/basic/BasicRadioButtonMenuItemUI.java, javax/swing/plaf/basic/BasicRootPaneUI.java, javax/swing/plaf/basic/BasicScrollPaneUI.java, javax/swing/plaf/basic/BasicSplitPaneDivider.java, javax/swing/plaf/basic/BasicTextUI.java, javax/swing/table/TableColumnModel.java, javax/swing/text/AbstractDocument.java, javax/swing/text/EditorKit.java, javax/swing/text/Position.java, javax/swing/text/Segment.java, javax/swing/text/StyledEditorKit.java, javax/swing/text/ViewFactory.java: Cleanup whitespace differences to classpath CVS HEAD. 2005-02-15 Graydon Hoare <graydon@redhat.com> * gnu/java/awt/peer/gtk/GdkPixbufDecoder.java: (finalize): Call finish from here. (produce): Not from here. * Makefile.am (gtk_c_source_files): Remove jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontMetrics.c. * Makefile.in: Regenerate. * gnu/java/awt/peer/gtk/GdkGraphics2D.java (cairoSetFont): (cairoDrawGdkTextLayout): (cairoDrawString): (getPeerTextMetrics): (getPeerFontMetrics): Remove. (setFont): Don't call cairoSetFont. (cairoDrawGlyphVector): Accept font peer argument. (drawGlyphVector): Pass font peer to cairoDrawGlyphVector. * jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c (ensure_metrics_cairo): (gnu_java_awt_peer_gtk_GdkGraphics2D_cairoSetFont): (gnu_java_awt_peer_gtk_GdkGraphics2D_cairoDrawString): (gnu_java_awt_peer_gtk_GdkGraphics2D_getPeerFontMetrics): (gnu_java_awt_peer_gtk_GdkGraphics2D_getPeerTextMetrics): (metrics_cairo): (metrics_surface): Remove. (gnu_java_awt_peer_gtk_GdkGraphics2D_cairoDrawGlyphVector): Pass and install font peer. 2005-02-15 Graydon Hoare <graydon@redhat.com> * Makefile.am: Create "split library" structure. * Makefile.in: Regenerate. 2005-02-15 Graydon Hoare <graydon@redhat.com> * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c: * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c: * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextComponentPeer.c: * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c: Release GDK lock during upcalls. 2005-02-15 Graydon Hoare <graydon@redhat.com> * jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontMetrics.c: Remove. * jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontPeer.c (Java_gnu_java_awt_peer_gtk_GdkFontPeer_getGlyphVector): (Java_gnu_java_awt_peer_gtk_GdkFontPeer_getFontMetrics): (Java_gnu_java_awt_peer_gtk_GdkFontPeer_getTextMetrics): New methods. * jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGlyphVector.c: Remove. * gnu/java/awt/peer/gtk/GdkFontPeer.java (getGlyphVector): (getFontMetrics): (getTextMetrics): New native methods. * gnu/java/awt/peer/gtk/GdkFontMetrics.java: Remove native parts. * gnu/java/awt/peer/gtk/GdkGlyphVector.java: Likewise. * Makefile.am: Remove native entries for GdkFontMetrics, GdkGlyphVector. * Makefile.in: Regenerate. 2005-02-15 Andrew John Hughes <gnu_andrew@member.fsf.org> * javax/swing/SwingUtilities.java: (getAccessibleAt(java.awt.Component, java.awt.Point)): Implemented and documented. (getAccessibleChild(java.awt.Component, int)): Likewise. (getAccessibleChildrenCount(java.awt.Component)): Likewise. (getAccessibleIndexInParent(java.awt.Component)): Likewise. (getAccessibleStateSet(java.awt.Component)): Likewise. 2005-02-15 Michael Koch <konqueror@gmx.de> * javax/swing/SwingUtilities.java (getFontMetrics): Removed. 2005-02-15 Michael Koch <konqueror@gmx.de> * java/awt/Container.java (paramString): Implemented. * javax/swing/AbstractButton.java (paramString): Implemented. * javax/swing/JComponent.java (paramString): Implemented. * javax/swing/JMenu.java (paramString): Implemented. * javax/swing/JMenuBar.java (paramString): Implemented. * javax/swing/JMenuItem.java (paramString): Implemented. * javax/swing/JPopupMenu.java (paramString): Implemented. 2005-02-15 Michael Koch <konqueror@gmx.de> * javax/swing/JMenu.java (uiClassID): Removed. (JMenu): Set invoker on popup menu. (getUIClassID): Return id directly. (getItemCount): Simply return getMenuComponentCount(). Fixed javadoc. (isTopLevelMenu): Simplified. * javax/swing/JMenuItem.java (uiClassID): Removed. (getUIClassID): Return id directly. * javax/swing/JPopupMenu.java (uiClassID): Removed. (JPopupMenu): Always initialize correctly. (getSubElements): Only return components implementing MenuElement interface. (HeavyWeightPopup.hide): Removed. 2005-02-15 Michael Koch <konqueror@gmx.de> * java/awt/image/ReplicateScaleFilter.java (replicatePixels): Made private. * javax/swing/colorchooser/DefaultRGBChooserPanel.java (DefaultRGBChooserPanel): Made package private. * javax/swing/colorchooser/DefaultSwatchChooserPanel.java (RecentSwatchPanel): Likewise. * javax/swing/event/MouseInputAdapter.java: Reformatted. (MouseInputAdapter): Made abstract. * javax/swing/tree/DefaultMutableTreeNode.java (random): Removed. (growTree): Likewise. 2005-02-15 Michael Koch <konqueror@gmx.de> * java/awt/dnd/DropTarget.java (addDropTargetListener): Clarified comments. 2005-02-15 Michael Koch <konqueror@gmx.de> * javax/swing/JComponent.java (getComponentGraphics): Removed accidently commited code. 2005-02-15 Graydon Hoare <graydon@redhat.com> * java/awt/dnd/DropTarget.java (addDropTargetListener): Despite documentation, do not throw. * javax/swing/JComponent.java: Set a default DropTarget. 2005-02-15 Michael Koch <konqueror@gmx.de> * javax/swing/AbstractAction.java (ENABLED_PROPERTY): Removed. (setEnabled): Replaced constant with real string. * javax/swing/AbstractButton.java (createActionPropertyChangeListener.propertyChange): Likewise. * javax/swing/JComboBox.java (DEFAULT_MAXIMUM_ROW_COUNT): Made private. (EDITABLE_CHANGED_PROPERTY): Removed. (MAXIMUM_ROW_COUNT_CHANGED_PROPERTY):Likewise. (ENABLED_CHANGED_PROPERTY):Likewise. (RENDERER_CHANGED_PROPERTY):Likewise. (EDITOR_CHANGED_PROPERTY):Likewise. (MODEL_CHANGED_PROPERTY):Likewise. (uiClassID):Likewise. (getUIClassID): Replaced constant with real string. (setModel):Likewise. (setEditable):Likewise. (setMaximumRowCount):Likewise. (setRenderer):Likewise. (setEditor):Likewise. (setEnabled):Likewise. * javax/swing/JLabel.java (DISABLED_ICON_CHANGED_PROPERTY): Removed. (DISPLAYED_MNEMONIC_CHANGED_PROPERTY): Likewise. (DISPLAYED_MNEMONIC_INDEX_CHANGED_PROPERTY): Likewise. (HORIZONTAL_ALIGNMENT_CHANGED_PROPERTY): Likewise. (HORIZONTAL_TEXT_POSITION_CHANGED_PROPERTY): Likewise. (ICON_CHANGED_PROPERTY): Likewise. (ICON_TEXT_GAP_CHANGED_PROPERTY): Likewise. (LABEL_FOR_CHANGED_PROPERTY): Likewise. (TEXT_CHANGED_PROPERTY): Likewise. (VERTICAL_ALIGNMENT_CHANGED_PROPERTY): Likewise. (VERTICAL_TEXT_POSITION_CHANGED_PROPERTY): Likewise. (setText): Replaced constant with real string. (setIcon): Likewise. (setDisabledIcon): Likewise. (setDisplayedMnemonic): Likewise. (setIconTextGap): Likewise. (setVerticalAlignment): Likewise. (setHorizontalAlignment): Likewise. (setVerticalTextPosition): Likewise. (setHorizontalTextPosition): Likewise. (setLabelFor): Replaced constant with real string. Fire property change event after property got changed. * javax/swing/JList.java (CELL_RENDERER_PROPERTY_CHANGED): Likewise. (FIXED_CELL_HEIGHT_PROPERTY_CHANGED): Likewise. (FIXED_CELL_WIDTH_PROPERTY_CHANGED): Likewise. (LAYOUT_ORIENTATION_PROPERTY_CHANGED): Likewise. (MODEL_PROPERTY_CHANGED): Likewise. (PROTOTYPE_CELL_VALUE_PROPERTY_CHANGED): Likewise. (SELECTION_BACKGROUND_PROPERTY_CHANGED): Likewise. (SELECTION_FOREGROUND_PROPERTY_CHANGED): Likewise. (SELECTION_MODEL_PROPERTY_CHANGED): Likewise. (setFixedCellWidth): Reimplemented. (setFixedCellHeight): Exit if new value is identical. Replaced constant with real string. (setSelectionBackground): Likewise. (setSelectionForeground): Likewise. (setPrototypeCellValue): Likewise. (setCellRenderer): Replaced constant with real string. (setModel): Likewise. (setSelectionModel): Likewise. * javax/swing/JMenuBar.java (BORDER_PAINTED_CHANGED_PROPERTY): Removed. (MODEL_CHANGED_PROPERTY): Likewise. (MARGIN_CHANGED_PROPERTY): Likewise. (setBorderPainted): Reimplemented. (setMargin): Likewise. (setSelectionModel): Replaced constant with real string. * javax/swing/JPopupMenu.java (LABEL_CHANGED_PROPERTY): Removed. (VISIBLE_CHANGED_PROPERTY): Likewise. (borderPainted): Likewise. (setLabel): Replaced constant with real string. (setVisible): Exit if new value is identical. Replaced constant with real string. * javax/swing/JProgressBar.java (BORDER_PAINTED_CHANGED_PROPERTY): Removed. (ORIENTATION_CHANGED_PROPERTY): Likewise. (STRING_CHANGED_PROPERTY): Likewise. (STRING_PAINTED_CHANGED_PROPERTY): Likewise. (INDETERMINATE_CHANGED_PROPERTY): Likewise. (setOrientation): Replaced constant with real string. (setStringPainted): Likewise. (setString): Likewise. (setBorderPainted): Likewise. (setIndeterminate): Likewise. * javax/swing/JScrollBar.java (BLOCK_INCREMENT_CHANGED_PROPERTY): Removed. (MODEL_CHANGED_PROPERTY): Likewise. (ORIENTATION_CHANGED_PROPERTY): Likewise. (setOrientation): Replaced constant with real string. (setModel): Likewise. (setUnitIncrement): Likewise. (setBlockIncrement): Likewise. * javax/swing/JScrollPane.java (COLUMN_HEADER_CHANGED_PROPERTY): Removed. (COMPONENT_ORIENTATION_CHANGED_PROPERTY): Likewise. (HORIZONTAL_SCROLLBAR_CHANGED_PROPERTY): Likewise. (HORIZONTAL_SCROLLBAR_POLICY_CHANGED_PROPERTY): Likewise. (LAYOUT_CHANGED_PROPERTY): Likewise. (ROW_HEADER_CHANGED_PROPERTY): Likewise. (VERTICAL_SCROLLBAR_CHANGED_PROPERTY): Likewise. (VERTICAL_SCROLLBAR_POLICY_CHANGED_PROPERTY): Likewise. (VIEWPORT_CHANGED_PROPERTY): Likewise. (VIEWPORT_BORDER_CHANGED_PROPERTY): Likewise. (WHEEL_SCROLLING_ENABLED_CHANGED_PROPERTY): Likewise. (setComponentOrientation): Replaced constant with real string. (setColumnHeader): Likewise. (setHorizontalScrollBar): Likewise. (setHorizontalScrollBarPolicy): Likewise. (setRowHeader): Likewise. (setVerticalScrollBar): Likewise. (setVerticalScrollBarPolicy): Likewise. (setWheelScrollingEnabled): Likewise. (setViewport): Likewise. (setViewportBorder): Likewise. * javax/swing/JSlider.java (INVERTED_CHANGED_PROPERTY): Removed. (LABEL_TABLE_CHANGED_PROPERTY): Likewise. (MAJOR_TICK_SPACING_CHANGED_PROPERTY): Likewise. (MINOR_TICK_SPACING_CHANGED_PROPERTY): Likewise. (MODEL_CHANGED_PROPERTY): Likewise. (ORIENTATION_CHANGED_PROPERTY): Likewise. (PAINT_LABELS_CHANGED_PROPERTY): Likewise. (PAINT_TICKS_CHANGED_PROPERTY): Likewise. (setModel): Replaced constant with real string. (setOrientation): Likewise. (setLabelTable): Likewise. (setInverted): Likewise. (setMajorTickSpacing): Likewise. (setMinorTickSpacing): Likewise. (setPaintTicks): Likewise. (setPaintLabels): Likewise. * javax/swing/JTabbedPane.java (MODEL_CHANGED_PROPERTY): Removed. (TAB_PLACEMENT_CHANGED_PROPERTY): Likewise. (TAB_LAYOUT_POLICY_CHANGED_PROPERTY): Likewise. (setModel): Replaced constant with real string. (setTabPlacement): Likewise. (setTabLayoutPolicy): Likewise. * javax/swing/JToolBar.java (ORIENTATION_CHANGED_PROPERTY): Removed. (FLOATABLE_CHANGED_PROPERTY): Likewise. (BORDER_PAINTED_CHANGED_PROPERTY): Likewise. (MARGIN_CHANGED_PROPERTY): Likewise. (ROLLOVER_CHANGED_PROPERTY): Likewise. (setRollover): Replaced constant with real string. (setMargin): Likewise. (setBorderPainted): Likewise. (setFloatable): Likewise. (setOrientation): Likewise. * javax/swing/plaf/basic/BasicComboBoxUI.java (PropertyChangeHandler.propertyChange): Likewise. * javax/swing/plaf/basic/BasicComboPopup.java (PropertyChangeHandler.propertyChange): Likewise. * javax/swing/plaf/basic/BasicMenuBarUI.java (PropertyChangeHandler.propertyChange): Likewise. * javax/swing/plaf/basic/BasicProgressBarUI.java (PropertyChangeHandler.propertyChange): Likewise. * javax/swing/plaf/basic/BasicScrollBarUI.java (PropertyChangeHandler.propertyChange): Likewise. * javax/swing/plaf/basic/BasicSliderUI.java (PropertyChangeHandler.propertyChange): Likewise. * javax/swing/plaf/basic/BasicTabbedPaneUI.java (PropertyChangeHandler.propertyChange): Likewise. * javax/swing/plaf/basic/BasicToolBarUI.java (PropertyChangeHandler.propertyChange): Likewise. 2005-02-15 Michael Koch <konqueror@gmx.de> * javax/swing/DefaultButtonModel.java (changeState): Made private. * javax/swing/DefaultDesktopManager.java (setWasIcon): Fixed second argument to be java.lang.Boolean. * javax/swing/JLayeredPane.java (layerToRange): Made private. (incrLayer): Likewise. (decrLayer): Likewise. * javax/swing/JTable.java (dragEnabled): Likewise. (preferredViewportSize): Renamed from preferredScrollableViewportSize. * javax/swing/KeyStroke.java (Keystroke): Made private. * javax/swing/TransferHandler.java (COMMAND_COPY): Likewise. (COMMAND_CUT): Likewise. (COMMAND_PASTE): Likewise. 2005-02-15 Michael Koch <konqueror@gmx.de> * javax/swing/JTextField.java (postActionEvent): Use text in field when actionCommand is null. (getActionCommand): Removed. 2005-02-15 Michael Koch <konqueror@gmx.de> * javax/swing/AbstractSet.java: Removed. * Makefile.am: Removed javax/swing/AbstractSet.java. * Makefile.in: Regenerated. 2005-02-15 Michael Koch <konqueror@gmx.de> * java/awt/Window.java (AccessibleWindow.getAccessibleStateSet): Fixed method name. * java/awt/dnd/DnDConstants.java (DnDConstants): New private constructor. 2005-02-15 Michael Koch <konqueror@gmx.de> * javax/swing/DefaultCellRenderer.java: Removed. * Makefile.am: Removed javax/swing/DefaultCellRenderer.java. * Makefile.in: Regenerated. 2005-02-15 Michael Koch <konqueror@gmx.de> * javax/swing/AbstractButton.java (fireItemStateChanged): Made protected. (fireActionPerformed): Likewise. (fireStateChanged): Likewise. * javax/swing/DefaultButtonModel.java (fireItemStateChanged): Likewise. (fireActionPerformed): Likewise. (fireStateChanged): Likewise. * javax/swing/JApplet.java (JApplet): Removed. (frameInit): Likewise. (setRootPane): Made protected. (createRootPane): Likewise. * javax/swing/JComponent.java (getClientProperty): Likewise. (putClientProperty): Likewise. * javax/swing/JEditorPane.java (getContentType): Likewise. (setContentType): Likewise. * javax/swing/JFrame.java (setRootPane): Likewise. (createRootPane): Likewise. * javax/swing/JInternalFrame.java (getFocusCycleRootAncestor): Made final. Added @since tag. (isFocusCycleRoot): Likewise. (getWarningString): Made final. * javax/swing/JScrollBar.java (changeListener): Removed. (changeEvent): Likewise. (createChangeListener): Likewise. (fireStateChanged): Likewise. (addChangeListener): Likewise. (removeChangeListener): Likewise. (getChangeListeners): Likewise. * javax/swing/JScrollPane.java (createViewport): Made protected. * javax/swing/JViewport.java (addImpl): Likewise. (setBorder): New method. * javax/swing/JWindow.java (setRootPane): Made protected. (createRootPane): Likewise. * javax/swing/plaf/basic/BasicButtonUI.java (installListeners): Likewise. (uninstallListeners): Likewise. * javax/swing/plaf/basic/BasicProgressBarUI.java (incrementAnimationIndex): Likewise. * javax/swing/plaf/basic/BasicTabbedPaneUI.java (createLayoutManager): Likewise. * javax/swing/table/DefaultTableCellRenderer.java (firePropertyChange): Likewise. * javax/swing/table/JTableHeader.java (AccessibleJTableHeaderEntry.AccessibleJTableHeaderEntry): New constructor. * javax/swing/text/PlainDocument.java (reindex): Made private. * javax/swing/text/PlainView.java (drawLine): Made protected. (getTabSize): Likewise. * javax/swing/text/View.java (setSize): Removed. (preferenceChanged): New method. (getBreakWeight): Likewise. (breakView): Likewise. (getViewIndex): Likewise. 2005-02-15 Michael Koch <konqueror@gmx.de> * javax/swing/JScrollPane.java (ScrollBar): Made class protected. * javax/swing/JSpinner.java (JSpinner): Added @since tag. (listenerList): Removed. * javax/swing/JTable.java (setValueAt): New method. (getColumn): Likewise. * javax/swing/JWindow.java (rootPaneCheckingEnabled): Renamed from checking. 2005-02-15 Michael Koch <konqueror@gmx.de> * javax/swing/plaf/basic/BasicTextUI.java (RootView.modelToView): Made it public and return a java.awt.Shape. Handle null subview. (uninstall): Set textComponent to null when its not possible used anymore. * javax/swing/text/View.java (setParent): Use better argument name. (getContainer): Get parent via getParent(). (getViewFactory): Likewise. (getAttributes): Get element via getElement(). (getStartOffset): Likewise. (getEndOffset): Likewise. (getResizeWeight): New method. (getMaximumSpan): Likewise. (getMinimumSpan): Likewise. (setSize): Likewise. (getGraphics): Likewise. 2005-02-15 Andrew John Hughes <gnu_andrew@member.fsf.org> * java/awt/Checkbox.java: (AccessibleAWTCheckbox()): Added public constructor to call superclass. * java/awt/Choice.java: (AccessibleAWTChoice): Added class documentation. (AccessibleAWTChoice()): Added public constructor to call superclass. (AccessibleAWTChoice.getAccessibleAction()): Documented. (AccessibleAWTChoice.getAccessibleRole()): Documented, and changed role to COMBO_BOX. (AccessibleAWTChoice.getAccessibleActionCount()): Documented. (AccessibleAWTChoice.getAccessibleActionDescription(int)): Documented. (AccessibleAWTChoice.doAccessibleAction(int)): Documented. 2005-02-15 Graydon Hoare <graydon@redhat.com> Michael Koch <konqueror@gmx.de> * javax/swing/LayoutFocusTraversalPolicy.java, javax/swing/SortingFocusTraversalPolicy.java: New classes. * Makefile.am: Added new classes. * Makefike.in: Regenerated. 2005-02-15 Michael Koch <konqueror@gmx.de> * javax/swing/DebugGraphics.java: Mostly implemented. 2005-02-15 Michael Koch <konqueror@gmx.de> * javax/swing/SwingUtilities.java (findFocusOwner): New method. 2005-02-15 Michael Koch <konqueror@gmx.de> * javax/swing/text/DefaultEditorKit.java (read): Added '\n' after each line. * javax/swing/text/PlainView.java (modelToView): Update metrics. (drawLine): Use offsets from element. (paint): Update metrics. Draw all lines. 2005-02-15 Andrew John Hughes <gnu_andrew@member.fsf.org> * java/awt/Checkbox.java: (AccessibleAWTCheckbox): Added class documentation * java/awt/Scrollbar.java: (AccessibleAWTScrollBar): typo corrected and docs added (AccessibleAWTScrollBar.getAccessibleRole()): documented (AccessibleAWTScrollBar.getAccessibleStateSet()): likewise (AccessibleAWTScrollBar.getAccessibleValue()): likewise (AccessibleAWTScrollBar.getCurrentAccessibleValue()): likewise (AccessibleAWTScrollBar.setCurrentAccessibleValue(int)): likewise (AccessibleAWTScrollBar.getMinimumAccessibleValue()): likewise (AccessibleAWTScrollBar.getMaximumAccessibleValue()): likewise (getAccessibleContext()): name of accessible class corrected 2005-02-15 Mark Wielaard <mark@klomp.org> * java/awt/BasicStroke.java (hashCode): Implement. (equals): Document. 2005-02-15 Michael Koch <konqueror@gmx.de> * java/awt/print/PrinterJob.java (pageDialog): Throws java.awt.HeadlessException. (printDialog): Likewise. 2005-02-15 Mark Wielaard <mark@klomp.org> * jni/gtk-peer/gtkpeer.h (gdk_env): Fix prototype. 2005-02-15 Michael Koch <konqueror@gmx.de> * javax/swing/JTable.java (getValueAt): New method. * javax/swing/table/JTableHeader.java (columnAtPoint): New method. 2005-02-15 Michael Koch <konqueror@gmx.de> * javax/swing/JTextField.java (actions): New field. (static): Initalize actions field. (getActions): New method. 2005-02-15 Andrew John Hughes <gnu_andrew@member.fsf.org> * java/awt/Checkbox.java: (AccessibleAWTCheckbox): name capitalization corrected and serialization UID added. (AccessibleAWTCheckbox.itemStateChanged(java.awt.event.ItemEvent)): documented. (AccessibleAWTCheckbox.getAccessibleAction()): likewise (AccessibleAWTCheckbox.getAccessibleValue()): likewise (AccessibleAWTCheckbox.getAccessibleActionCount()): likewise (AccessibleAWTCheckbox.getAccessibleActionDescription(int)): likewise (AccessibleAWTCheckbox.doAccessibleAction(int)): likewise (AccessibleAWTCheckbox.getCurrentAccessibleValue()): likewise (AccessibleAWTCheckbox.setCurrentAccessibleValue(int)): likewise (AccessibleAWTCheckbox.getMinimumAccessibleValue()): likewise (AccessibleAWTCheckbox.getMaximumAccessibleValue()): likewise (AccessibleAWTCheckbox.getAccessibleRole()): likewise (AccessibleAWTCheckbox.getAccessibleStateSet()): implemented and documented (getAccessibleContext()): name of accessible class corrected 2005-02-15 Sven de Marothy <sven@physto.se> * java/awt/geom/doc-files/Area-1.png, java/awt/geom/doc-files/Ellipse-1.png, java/awt/geom/doc-files/GeneralPath-1.png: New files. 2005-02-15 Graydon Hoare <graydon@redhat.com> * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkToolkit.c (env_union): Use union to avoid type-punning warning. 2005-02-15 Michael Koch <konqueror@gmx.de> * javax/swing/DefaultListSelectionModel.java (clone): New method. 2005-02-15 Mark Wielaard <mark@klomp.org> Reported by Martin Platter <motse@complang.tuwien.ac.at> * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFileDialogPeer.c (Java_gnu_java_awt_peer_gtk_GtkFileDialogPeer_nativeSetFile): Correct method signature of gtkSetFilename. 2005-02-15 Arnaud Vandyck <avdyk@gnu.org> * javax/swing/text/StringContent.java: New file. 2005-02-15 Michael Koch <konqueror@gmx.de> * Makefile.am: Added javax/swing/text/StringContent.java. * Makefile.in: Regenerated. 2005-02-15 Michael Koch <konqueror@gmx.de> * gnu/java/awt/ClasspathToolkit.java: Import statements reworked. (imageCache): Made it of type java.util.HashMap. 2005-02-15 Michael Koch <konqueror@gmx.de> * javax/imageio/stream/MemoryCacheImageInputStream.java: Reworked import statements. 2005-02-15 Graydon Hoare <graydon@redhat.com> * jni/gtk-peer/gnu_java_awt_peer_gtk_GThreadNativeMethodRunner.c: * jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGlyphVector.c: * jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c: * jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c: * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c: * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxPeer.c: * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkChoicePeer.c: * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkClipboard.c: * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c: * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c: * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFileDialogPeer.c: * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkListPeer.c: * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuItemPeer.c: * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollBarPeer.c: * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextComponentPeer.c: * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c: Rewrite uses of extern variable to be function calls. * jni/gtk-peer/gtkpeer.h (gdk_env): Change declaration to function, from extern variable. * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkToolkit.c (gdk_env): Remove variable, add new function. (java_vm): Add new variable. (Java_gnu_java_awt_peer_gtk_GtkToolkit_gtkInit): Initialize java_vm rather than old gdk_env variable. 2005-02-15 David Gilbert <david.gilbert@object-refinery.com> * javax/swing/DefaultListModel.java (add): fire correct event, (addElement): corrected interval indices in event, (clear): corrected upper bound for interval, only fire event if list is not empty, (setSize): fire appropriate event. 2005-02-15 Graydon Hoare <graydon@redhat.com> * gnu/awt/xlib/XEventLoop.java: Add non-blocking event mode. * gnu/awt/xlib/XToolkit.java: Likewise. * gnu/gcj/xlib/XAnyEvent.java: Likewise. * gnu/gcj/xlib/natXAnyEvent.cc: Likewise. * gnu/java/awt/ClasspathToolkit.java: Likewise. * gnu/java/awt/peer/gtk/GtkToolkit.java: Likewise. * java/awt/EventQueue.java (getNextEvent): Adjust event loop to switch to native mode after 100ms. * javax/swing/Timer.java (drainEvents): Reuse Runnable. * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkGenericPeer.c (Java_gnu_java_awt_peer_gtk_GtkGenericPeer_dispose): Wake up event thread. * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkToolkit.c (Java_gnu_java_awt_peer_gtk_GtkToolkit_iterateNativeQueue): Adjust event loop to switch to java mode after 100ms. 2005-02-15 Graydon Hoare <graydon@redhat.com> * jni.cc (_Jv_JNI_RegisterNatives): Re-add sync, which was accidentally removed in last change. 2005-02-15 Michael Koch <konqueror@gmx.de> * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMainThread.c, gnu/java/awt/peer/gtk/GtkMainThread.java: Removed. 2005-02-15 Graydon Hoare <graydon@redhat.com> * include/jni.h (_Jv_JNIEnv::bottom_locals): New field. * include/jvm.h (_Jv_FreeJNIEnv): Declare. * java/lang/natThread.cc (finalize_native): Call _Jv_FreeJNIEnv. * jni.cc: Reuse bottom frame between calls, avoid clearing frame when no local references are made. 2005-02-15 Michael Koch <konqueror@gmx.de> * javax/swing/UIDefaults.java (UIDefaults): Fixed typo in javadoc (Thanks to Thomas Zander for reporting) Fixed HTML entity and removed a redundant comma. 2005-02-15 Michael Koch <konqueror@gmx.de> * javax/swing/text/DefaultEditorKit.java (deinstall): Removed. (install): Likewise. 2005-02-15 Michael Koch <konqueror@gmx.de> * javax/swing/UIDefaults.java (put): Handle value of null. 2005-02-15 Michael Koch <konqueror@gmx.de> * java/awt/Robot.java, java/awt/Scrollbar.java, java/awt/print/PrinterJob.java, javax/swing/JTable.java, javax/swing/text/AbstractDocument.java: Reworked import statements. 2005-02-15 Michael Koch <konqueror@gmx.de> * javax/swing/JEditorPane.java (read): Implemented. (write): Likewise. * javax/swing/text/DefaultEditorKit.java (page): Renamed from page_url. Made private. (editorKit): Renamed from kit. Made private. (ctype): Removed. (JEditorPane): All constructors reimplemented. (getContentType): Use content type from editor kit. (getEditorKit): Return editorKit. (getEditorKitForContentType):Likewise. (getPage): Return page. (setContentType): Reimplemented. (setEditorKit): Likewise. (setEditorKitForContentType): Removed wrong implementation. (setPage): Implemented. 2005-02-15 Thomas Fitzsimmons <fitzsim@redhat.com> * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFramePeer.c (nativeSetIconImageFromData): Re-add native implementation. 2005-02-15 David Gilbert <david.gilbert@object-refinery.com> * javax/swing/table/DefaultTableModel.java (DefaultTableModel()): Added Javadocs. (DefaultTableModel(int, int)): Fixed implementation. (DefaultTableModel(Vector, int)): Throw IllegalArgumentException for negative rowCount. (DefaultTableModel(Object[], int)): Added Javadocs. (DefaultTableModel(Vector, Vector)): Likewise. (DefaultTableModel(Object[][], Object[])): Likewise. (getDataVector): Likewise. (setDataVector(Vector, Vector)): Likewise. (setDataVector(Object[][], Object[])): Likewise. (newDataAvailable): Likewise. (newRowsAdded): Likewise. (rowsRemoved): Likewise. (setColumnIdentifiers(Vector)): Allow for null argument. (setColumnIdentifiers(Object[])): Added Javadocs. (setNumRows): Likewise. (setRowCount): Adds new rows if necessary, and sends more specific TableModelEvent. (setColumnCount): Allow for null columnIdentifiers. (addColumn(Object)): Added Javadocs. (addColumn(Object, Vector)): Handle null columnData. (addColumn(Object, Object[])): Handle columnData with more or less entries than rows in the table. (addRow(Vector)): Fire appropriate event. (addRow(Object[])): Added Javadocs. (insertRow(int, Vector)): Fire appropriate event. (insertRow(int, Object[])): Added Javadocs. (moveRow): Reimplemented. (removeRow(int)): Fire appropriate event. (getColumnCount): Allow for null columnIdentifiers. (getColumnName): Now returns empty string when column index is too large. (isCellEditable): Added Javadocs. (getValueAt): Likewise. (setValueAt): Fire more specific event. (convertToVector): Added Javadocs. * javax/swing/table/TableModel.java Added Javadocs. 2005-02-15 Thomas Fitzsimmons <fitzsim@redhat.com> * libgcj.spec.in (lib): Add -l-javax-imageio. 2005-02-15 Thomas Fitzsimmons <fitzsim@redhat.com> * gnu/java/awt/peer/gtk/GtkComponentPeer.java: Replace direct references to event queue q with method call q(). * gnu/java/awt/peer/gtk/GtkDialogPeer.java: Likewise. * gnu/java/awt/peer/gtk/GtkFramePeer.java: Likewise. * gnu/java/awt/peer/gtk/GtkScrollbarPeer.java: Likewise. * gnu/java/awt/peer/gtk/GtkTextComponentPeer.java: Likewise. * gnu/java/awt/peer/gtk/GtkWindowPeer.java: Likewise. * gnu/java/awt/peer/gtk/GtkGenericPeer.java: Likewise. (q): New method. 2005-02-15 Graydon Hoare <graydon@redhat.com> * gnu/java/awt/ClasspathToolkit.java (registerImageIOSpis): New method. * gnu/java/awt/image/ImageDecoder.java (imageDecoder): New constructor using InputStream (startProduction): Handle existing InputStream. * gnu/java/awt/peer/gtk/GdkGraphics2D.java (findSimpleIntegerArray): Make public and static. (updateBufferedImage): Set each pixel, in a loop. * gnu/java/awt/peer/gtk/GdkPixbufDecoder.java: Implement ImageIO SPI classes. (createBufferedImage): Rewrite in terms of SPI classes. * gnu/java/awt/peer/gtk/GtkToolkit.java (registerImageIOSpis): New method. * java/lang/reflect/natMethod.cc (_Jv_CallAnyMethodA): Borrow a patch from aph, applied to trunk, which lets JNI call interface methods properly. * javax/imageio/ImageIO.java (WriterFormatFilter.filter): Fix copy-and-paste typos. (WriterMIMETypeFilter.filter): Likewise. (ImageReaderIterator): Pass extension argument through to SPI. (getReadersByFilter): Likewise. (getWritersByFilter): Likewise. (getImageReadersByFormatName): Likewise. (getImageReadersByMIMEType): Likewise. (getImageReadersBySuffix): Likewise. (getImageWritersByFormatName): Likewise. (getImageWritersByMIMEType): Likewise. (getImageWritersBySuffix): Likewise. (read): Implement. (write): Implement. * javax/imageio/ImageReader.java (progressListeners): Initialize. (setInput): Implement. * javax/imageio/ImageWriter.java (progressListeners): Initialize. (warningListeners): Likewise. (warningLocales): Likewise. (setOutput): Test "isInstance" rather than class equality. * javax/imageio/spi/IIORegistry.java (static): Add reader and writer SPIs. (IIORegistry): Call ClasspathToolkit.registerImageIOSpis. * jni/gtk-peer/gnu_java_awt_peer_gtk_GdkPixbufDecoder.c (query_formats): New function. (save_to_stream): Likewise. (Java_gnu_java_awt_peer_gtk_GdkPixbufDecoder_streamImage): Likewise. 2005-02-15 Thomas Fitzsimmons <fitzsim@redhat.com> * jni/gtk-peer/gnu_java_awt_peer_gtk_GdkRobotPeer.c (mouseWheel): Call XFlush. (keyPress): Likewise. (keyRelease): Likewise. 2005-02-15 Olga Rodimina <rodimina@redhat.com> * javax/swing/JTable.java (columnAtPoint): New Method. Implemented. (rowAtPoint): Likewise. (countSelections): Fixed few small count errors. (getSelections): Likewise. (setSelectionMode): Set selection mode for column selection model in addition to row selection model. * javax/swing/plaf/basic/BasicTableUI.java: (getRowForPoint): Removed. Replaced by JTable.rowAtPoint(). (getColForPoint): Removed. Replaced by JTable.columnAtPoint(). (updateSelection): Updated to call JTable.columnAtPoint and JTable.rowAtPoint. * javax/swing/table/DefaultTableColumnModel.java: (getSelectedColumns): Implemented. (getSelectedColumnCount): Implemented. 2005-02-15 Graydon Hoare <graydon@redhat.com> * Makefile.am (jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMainThread.c) (gnu/java/awt/peer/gtk/GtkMainThread.java) : Remove. * Makefile.in: Regenerate. * gnu/awt/xlib/XEventLoop.java: Fix to match thread model. * gnu/awt/xlib/XFramePeer.java: Likewise. * gnu/awt/xlib/XToolkit.java: Likewise. * gnu/gcj/xlib/XAnyEvent.java: Likewise. * gnu/gcj/xlib/natXAnyEvent.cc: Likewise. * gnu/java/awt/ClasspathToolkit.java (nativeQueueEmpty) (wakeNativeQueue) (iterateNativeQueue): New methods. * gnu/java/awt/peer/gtk/GtkMainThread.java: Remove. * gnu/java/awt/peer/gtk/GtkToolkit.java (gtkInit): Absorb from defunct GtkMainThread class. (static): Run gtkInit in static startup block. (GtkToolkit): Remove construction of GtkMainThread and queue. (getSystemEventQueueImpl): Construct queue when requested. (nativeQueueEmpty) (wakeNativeQueue) (iterateNativeQueue): New methods. * java/awt/Component.java (removeNotify): Remove race. * java/awt/EventDispatchThread.java (EventDispatchThread): Don't start on construction. (run): Remove isInterrupted check. * java/awt/EventQueue.java (shutdown): New flag. (isShutdown): New method checking J2SE shutdown condition. (setShutdown): New method. (getNextEvent): Restructure to use ClasspathToolkit. (postEvent): Activate new thread on posting, wake thread on post of possible shutdown condition event. * java/awt/Frame.java (Frame): Call noteFrame in all constructors. (fireDummyEvent): New helper method. (addNotify): Fire a dummy event to wake up queue. (removeNotify): Fire a dummy event to wake up queue. (noteFrame): New method. (weakFrames): New static field. (getFrames): Implement. * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMainThread.c: Remove. * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkToolkit.c: Move everything from GtkMainThread into this file (Java_gnu_java_awt_peer_gtk_GtkToolkit_iterateNativeQueue) (Java_gnu_java_awt_peer_gtk_GtkToolkit_wakeNativeQueue) (Java_gnu_java_awt_peer_gtk_GtkToolkit_nativeQueueEmpty): New functions to implement single-threaded queue semantics. 2005-02-15 Michael Koch <konqueror@gmx.de> * javax/swing/plaf/metal/MetalLookAndFeel.java (getControlTextFont): New method. (getMenuTextFont): Likewise. (getSubTextFont): Likewise. (getSystemTextFont): Likewise. (getUserTextFont): Likewise. (getWindowTitleFont): Likewise. 2005-02-15 Michael Koch <konqueror@gmx.de> * javax/swing/text/AbstractDocument.java (documentFilter): New field. (getDocumentFilter): New method. (setDocumentFilter): Likewise. (dump): Likewise. 2005-02-15 Michael Koch <konqueror@gmx.de> * javax/swing/JTree.java (DynamicUtilTreeNode.hasChildren): Clarify javadoc. 2005-02-15 Michael Koch <konqueror@gmx.de> * javax/swing/text/AbstractDocument.java (AbstractElement.getLength): Fixed off-by-one error. (AbstractElement.children): Made abstract. (AbstractElement.getAllowsChildren): Likewise. (AbstractElement.getElement): Likewise. (AbstractElement.dumpElement): New private method. (AbstractElement.dump): New method. (BranchElememt.getName): Fixed implementation. (BranchElememt.toString): Likewise. (BranchElememt.getElement): Fixed arguments. (LeafElement.getName): Fixed implementation. (LeafElement.toString): Likewise. * javax/swing/text/GapContent.java (GapContent): Put default content into buffer. * javax/swing/text/PlainDocument.java (reindex): Use empty attribute sets instead of null. (createDefaultRoot): Reimplemented. (insertUpdate): Call super method. (removeUpdate): Likewise. (getParagraphElement): Implemented. 2005-02-15 Michael Koch <konqueror@gmx.de> * gnu/java/awt/ClasspathToolkit.java (createRobot): Throws java.awt.AWTException. * jni/gtk-peer/gnu_java_awt_peer_gtk_GdkRobotPeer.c: Added '__attribute__((unused))' to all unused method arguments. 2005-02-15 Michael Koch <konqueror@gmx.de> * javax/swing/DefaultBoundedRangeModel.java (fireValueChanged): Fixed off-by-one error. 2005-02-15 Thomas Fitzsimmons <fitzsim@redhat.com> * Makefile.am (gtk_c_source_files): Add GdkRobotPeer.c. (gtk_awt_peer_sources): Add GdkScreenGraphicsDevice.java and GdkRobotPeer.java. (lib_gnu_java_awt_peer_gtk_la_CFLAGS): Add X flags. (lib_gnu_java_awt_peer_gtk_la_LDFLAGS): Add XTest flags. * gnu/awt/xlib/XToolkit.java (createRobot): New method. * gnu/java/awt/ClasspathToolkit.java (createRobot): New method. * gnu/java/awt/peer/gtk/GdkGraphicsEnvironment.java (getDefaultScreenDevice): Implement. * gnu/java/awt/peer/gtk/GdkRobotPeer.java: New file. * gnu/java/awt/peer/gtk/GdkScreenGraphicsDevice.java: Likewise. * gnu/java/awt/peer/gtk/GtkToolkit.java (createRobot): New method. * java/awt/Robot.java: Implement. * java/awt/peer/RobotPeer.java: Rename parameters. * jni/gtk-peer/gnu_java_awt_peer_gtk_GdkRobotPeer.c: New file. * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c (awt_keycode_to_keysym): Make non-static. * jni/gtk-peer/gtkpeer.h (AWT_BUTTON1_MASK, AWT_BUTTON2_MASK, AWT_BUTTON3_MASK): Declare constants. (awt_keycode_to_keysym): Declare. * Makefile.am (AM_MAKEFLAGS): Set KEYS variable. * testsuite/libjava.mauve/mauve.exp (test_mauve): If KEYS exists and is non-empty pass its value to "make check". (test_mauve_sim): Likewise. 2005-02-15 Michael Koch <konqueror@gmx.de> * javax/imageio/IIOParam.java (setSourceBands): New method. (setSourceSubsampling): Likewise. * javax/imageio/ImageReadParam.java (setDestination): Likewise. (setDestinationBands): Likewise. (setSourceProgressivePasses): Likewise. * javax/imageio/metadata/IIOInvalidTreeException.java (serialVersionUID): New static field. * javax/imageio/metadata/IIOMetadataNode.java (IIOMetadataNode): Don't explicitely implement org.w3c.dom.Node. (parent): Dont initailize with default value explicitely. (Object): Likewise. (removeAttribute): Doesn't throws org.w3c.dom.DOMException. (removeAttributeNode): Likewise. (removeAttributeNS): Likewise. (setAttribute): Likewise. (setAttributeNode): Likewise. (setAttributeNodeNS): Likewise. (setAttributeNS): Likewise. (appendChild): Likewise. (getNodeValue): Likewise. (insertBefore): Likewise. (removeChild): Likewise. (replaceChild): Likewise. (setPrefix): Likewise. 2005-02-15 Michael Koch <konqueror@gmx.de> * javax/swing/LookAndFeel.java (getDesktopPropertyValue): New method. 2005-02-15 Michael Koch <konqueror@gmx.de> * javax/swing/JTree.java (hasChildren): New instance field. 2005-02-15 Michael Koch <konqueror@gmx.de> * javax/swing/JComponent.java (getToolTipText): New method. (getTitledBorderText): Likewise. (getAccessibleKeyBinding): Likewise. (getVerifyInputWhenFocusTarget): Likewise. (setVerifyInputWhenFocusTarget): Likewise. (verifyInputWhenFocusTarget): New instance field. 2005-02-15 Michael Koch <konqueror@gmx.de> * javax/swing/DefaultListSelectionModel.java (fireValueChanged): New method. 2005-02-15 Michael Koch <konqueror@gmx.de> * javax/swing/DefaultBoundedRangeModel.java: Fixed javadocs all over. (fireStateChanged): Simplified. * javax/swing/BoundedRangeModel.java: Reformatted. 2005-02-15 Michael Koch <konqueror@gmx.de> * javax/swing/JRootPane.java (setMenuBar): Added @deprecated tag. (getMenuBar): Likewise. * javax/swing/JTable.java (sizeColumnsToFit): Likewise. 2005-02-15 Paul Jenner <psj.home@ntlworld.com> * javax/swing/ImageIcon.java (setImage): Implemented. 2005-02-15 Michael Koch <konqueror@gmx.de> * javax/swing/JTable.java: Removed unused imports. 2005-02-15 Olga Rodimina <rodimina@redhat.com> (prepareRenderer): Get column's index in dataModel instead of column's view index. (getColumnCount): return count of the columns in ColumnModel, not in dataModel. (removeColumn): Implemented. (moveColumm): Likewise. (setRowHeight): throw IllegalArgumentException if height is less then 1. * javax/swing/table/DefaultTableColumnModel.java: Add javadocs. (DefaultTableColumnModel):Add call to createSelectionModel(). (addColumn): Fire columnAdded event to registered listeners. (removeColumn): Fire columnRemoved event to registered listeners. (moveColumn): Fire columnMoved event to registered listeners. (setColumnMargin): Fire ColumnMarginChanged event to registered listeners. (getColumnIndex): Changed parameter name. (setColumnSelectionAllowed): Likewise. (fireColumnAdded): Implemented. (fireColumnRemoved): Likewise. (fireColumnMoved): Likewise. (fireColumnMarginChanged): Likewise. (getListeners): Changed parameter name. (propertyChange): Implemented. (valueChanged): Changed parameter name. (createSelectionModel): Implemented. 2005-02-15 Michael Koch <konqueror@gmx.de> * gnu/java/awt/peer/gtk/GtkToolkit.java: Explicitely import used classes. (getLocalGraphicsEnvironment): Simplify. * java/awt/Window.java (Window): Enable code to get the default GraphicsConfiguration. 2005-02-15 Michael Koch <konqueror@gmx.de> * javax/swing/plaf/metal/DefaultMetalTheme.java (CONTROL_TEXT_FONT): New static field. (MENU_TEXT_FONT): Likewise. (SUB_TEXT_FONT): Likewise. (SYSTEM_TEXT_FONT): Likewise. (USER_TEXT_FONT): Likewise. (WINDOW_TITLE_FONT): Likewise. (getControlTextFont): New method. (getMenuTextFont): Likewise. (getSubTextFont): Likewise. (getSystemTextFont): Likewise. (getUserTextFont): Likewise. (getWindowTitleFont): Likewise. * javax/swing/plaf/metal/MetalTheme.java (BLACK): Initialize with Color.BLACK. (WHITE): Initialize with Color.WHITE. (getInactiveControlTextColor): Return getControlDisabled(). (getMenuDisabledForeground): Return getSecondary3(). (getControlTextFont): New abstract method. (getMenuTextFont): Likewise. (getSubTextFont): Likewise. (getSystemTextFont): Likewise. (getUserTextFont): Likewise. (getWindowTitleFont): Likewise. 2005-02-15 Michael Koch <konqueror@gmx.de> * javax/swing/JFormattedTextField.java (getFocusLostBehavior): Fixed typo in method name. (setFocusLostBehavior): Likewise. 2005-02-15 Michael Koch <konqueror@gmx.de> * javax/swing/TransferHandler.java: Reworked import statements. 2005-02-15 Jerry Quinn <jlquinn@optonline.net> * java/awt/Button.java, java/awt/Canvas.java, java/awt/Checkbox.java, java/awt/CheckboxMenuItem.java, java/awt/Choice.java, java/awt/Dialog.java, java/awt/Frame.java, java/awt/Label.java, java/awt/List.java, java/awt/Menu.java, java/awt/MenuBar.java, java/awt/MenuItem.java, java/awt/PopupMenu.java, java/awt/ScrollPane.java, java/awt/Scrollbar.java, java/awt/TextArea.java, java/awt/Window.java (getAccessibleContext): Clean up comments. Reformat. * java/awt/Button.java, java/awt/Checkbox.java, java/awt/Choice.java, java/awt/Menu.java, java/awt/PopupMenu.java, java/awt/TextArea.java (getAccessibleContext): Only create new accessible once. * java/awt/TextComponent.java (getAccessibleContext): Implement. 2005-02-15 Michael Koch <konqueror@gmx.de> * java/awt/Button.java, javax/swing/JApplet.java, javax/swing/JFormattedTextField.java, javax/swing/JWindow.java, javax/swing/JTree.java, javax/swing/plaf/basic/BasicEditorPaneUI.java, javax/swing/plaf/basic/BasicTextPaneUI.java, javax/swing/plaf/basic/BasicTreeUI.java: Reworked import statements. 2005-02-15 Michael Koch <konqueror@gmx.de> * Makefile.am: Put javax.imageio into its own library and link it against lib-org-w3c-dom.la to fix bootstrapping. * Makefile.in: Regenerated. 2005-02-15 Michael Koch <konqueror@gmx.de> * javax/swing/text/TextAction.java (getTextComponent): Simplified. Added Javadoc. (augmentList): Implemented. Added Javadoc. (getFocusedComponent): Added javadoc. 2005-02-15 Jerry Quinn <jlquinn@optonline.net> * java/awt/Scrollbar.java (AccessibleAWTScrollbar, getAccessibleContext): Implement. * java/awt/ScrollPane.java (AccessibleAWTScrollPane, getAccessibleContext): Implement. 2005-02-15 Jerry Quinn <jlquinn@optonline.net> * java/awt/Dialog.java (AccessibleAWTFrame, getAccessibleContext): Implement. * java/awt/Frame.java (AccessibleAWTFrame, getAccessibleContext): Implement. * java/awt/Window.java (getAccessibleContext): Fix comment. Remove extra import. 2005-02-15 Jerry Quinn <jlquinn@optonline.net> * java/awt/Window.java (AccessibleAWTWindow): Implement. (isActive, isFocused, getAccessibleContext): Implement. 2005-02-15 Jerry Quinn <jlquinn@optonline.net> * java/awt/MenuItem.java (getAccessibleContext): Implement. * java/awt/MenuComponent.java (accessibleContext): Make package visible. * java/awt/CheckboxMenuItem.java (getAccessibleContext, AccessibleAWTCheckboxMenuItem): Implement. 2005-02-15 Jerry Quinn <jlquinn@optonline.net> * java/awt/List.java: Implement AccessibleAWTList, AccessibleAWTListChild. 2005-02-15 Jerry Quinn <jlquinn@optonline.net> * java/awt/Choice.java: Add implements declaration for Accessible. 2005-02-15 Jerry Quinn <jlquinn@optonline.net> * javax/imageio/metadata/IIOInvalidTreeException.java: Use Node instead of Object. 2005-02-15 Jerry Quinn <jlquinn@optonline.net> * javax/imageio/metadata/IIOMetadataNode.java: Add Node to implemented interface list. 2005-02-15 Jerry Quinn <jlquinn@optonline.net> * javax/imageio/metadata/IIOMetadataNode.java: Implement. * javax/imageio/metadata/IIOAttr.java: New class. * javax/imageio/metadata/IIONamedNodeMap.java: New class. * javax/imageio/metadata/IIONodeList.java: New class. * Makefile.am: Added new files. * Makefile.in: Regenerated. 2005-02-15 Michael Koch <konqueror@gmx.de> * javax/swing/AbstractAction.java, javax/swing/AbstractCellEditor.java, javax/swing/AbstractListModel.java, javax/swing/DefaultBoundedRangeModel.java, javax/swing/DefaultButtonModel.java, javax/swing/DefaultCellEditor.java, javax/swing/DefaultComboBoxModel.java, javax/swing/DefaultDesktopManager.java, javax/swing/JMenu.java, javax/swing/JSlider.java, javax/swing/KeyStroke.java, javax/swing/OverlayLayout.java, javax/swing/ScrollPaneLayout.java, javax/swing/SizeRequirements.java, javax/swing/ViewportLayout.java: Made serialVersionUID private. 2005-02-15 Michael Koch <konqueror@gmx.de> * gnu/java/awt/peer/gtk/GtkComponentPeer.java: Reformatted. 2005-02-15 Michael Koch <konqueror@gmx.de> * gnu/java/awt/peer/gtk/GdkGraphics2D.java: More reformatting. 2005-02-15 Michael Koch <konqueror@gmx.de> * gnu/java/awt/peer/gtk/GdkGraphics2D.java: Reformatted. 2005-02-15 Jeroen Frijters <jeroen@frijters.net> * java/awt/EventDispatchThread.java, java/awt/Toolkit.java: Don't catch java.lang.ThreadDeath. 2005-02-15 Michael Koch <konqueror@gmx.de> * javax/swing/text/PasswordView.java (drawEchoCharacter): Added javadoc. (drawSelectedText): Likewise. (drawUnselectedText): Likewise. 2005-02-15 Michael Koch <konqueror@gmx.de> * javax/swing/JRootPane.java (windowDecorationStyle): New field. (setMenuBar): New method. (getMenuBar): Likewise. (getWindowDecorationStyle): Likewise. (setWindowDecorationStyle): Likewise. 2005-02-15 Michael Koch <konqueror@gmx.de> * javax/swing/DefaultListSelectionModel.java (leadAnchorNotificationEnabled): Made protected. 2005-02-15 Michael Koch <konqueror@gmx.de> * javax/swing/InternalFrameFocusTraversalPolicy.java: New file. * Makefile.am: Added InternalFrameFocusTraversalPolicy.java. * Makefile.in: Regenerated. 2005-02-15 Michael Koch <konqueror@gmx.de> * javax/swing/JFormattedTextField.java: Implemented. * javax/swing/JWindow.java (JWindow): New constructors. (initWindow): Renamed from initFrame. * javax/swing/UIDefaults.java (ActiveValue): Made interface static. (LazyValue): Likewise. * javax/swing/plaf/basic/BasicInternalFrameTitlePane.java (TitlePaneLayout.TitlePaneLayout): New constructor. * javax/swing/plaf/basic/BasicSliderUI.java (ChangeHandler): Made public. (FocusHandler): Likewise. (PropertyChangeHandler): Likewise. (ScrollListener): Likewise. * javax/swing/plaf/basic/BasicTabbedPaneUI.java (FocusHandler): Likewise. (MouseHandler): Likewise. * javax/swing/plaf/basic/BasicTextPaneUI.java (BasicTextPaneUI): Extend BasicEditorPaneUI. * javax/swing/plaf/basic/BasicToolBarUI.java (BasicToolBarUI): Simplified. Reworked javadoc. (canDock): Simplified. Make public. (DockingListener): Made public. * javax/swing/text/JTextComponent.java (navigationFilter): New field. (getNavigationFilter): New method. (setNavigationFilter): Likewise. 2005-02-15 Michael Koch <konqueror@gmx.de> * javax/swing/plaf/metal/MetalTheme.java (getControlTextColor): Return getControlInfo(). (getHighlightedTextColor): Return getControlTextColor(). 2005-02-15 Michael Koch <konqueror@gmx.de> * javax/swing/plaf/basic/BasicButtonListener.java (BasicButtonListener): New constructor. * javax/swing/plaf/basic/BasicButtonUI.java (createButtonListener): Usw new BasicButtonListener constructor. 2005-02-15 Michael Koch <konqueror@gmx.de> * javax/imageio/event/package.html, javax/imageio/metadata/package.html: New files. 2005-02-15 Michael Koch <konqueror@gmx.de> * java/awt/image/MemoryImageSource.java: Reformatted. 2005-02-15 Michael Koch <konqueror@gmx.de> * javax/swing/tree/TreeCellEditor.java: Refomatted. 2005-02-15 Jeroen Frijters <jeroen@frijters.net> * java/awt/color/ICC_Profile.java (finalize): Removed pointless field assignments. 2005-02-15 Michael Koch <konqueror@gmx.de> * javax/swing/plaf/basic/BasicEditorPaneUI.java: New file. * Makefile.am: Added javax/swing/plaf/basic/BasicEditorPaneUI.java. * Makefile.in: Regenerated. 2005-02-15 Michael Koch <konqueror@gmx.de> * javax/swing/text/DefaultStyledDocument.java: New file. * Makefile.am: Added javax/swing/text/DefaultStyledDocument.java. * Makefile.in: Regenerated. 2005-02-15 Michael Koch <konqueror@gmx.de> * javax/swing/JFileChooser.java (showDialog): Return CANCEL_OPTION for now. (showOpenDialog): Likewise. (showSaveDialog): Likewise. 2005-02-15 Michael Koch <konqueror@gmx.de> * javax/swing/JApplet.java (HIDE_ON_CLOSE): Removed. (EXIT_ON_CLOSE): Likewise. (DISPOSE_ON_CLOSE): Likewise. (DO_NOTHING_ON_CLOSE): Likewise. (close_action): Likewise. (getDefaultCloseOperation): Likewise. (setDefaultCloseOperation): Likewise. (processWindowEvent): Likewise. (getPreferredSize): Simplified. * javax/swing/JInternalFrame.java (setDefaultCloseOperation): Fixed throwing exception on wrong argument value. * javax/swing/JWindow.java (HIDE_ON_CLOSE): Removed. (EXIT_ON_CLOSE): Likewise. (DISPOSE_ON_CLOSE): Likewise. (DO_NOTHING_ON_CLOSE): Likewise. (close_action): Likewise. (processKeyEvent): Likewise. (setDefaultCloseOperation): Likewise. (getPreferredSize): Simplified. 2005-02-15 Michael Koch <konqueror@gmx.de> * javax/swing/JTextField.java (getPreferredSize): Re-implemented. 2005-02-15 Michael Koch <konqueror@gmx.de> * javax/swing/JLabel.java (setDisplayedMnemonic): Use only upper case characters. (setDisplayedMnemonicIndex): Handle index == -1 and fire PropertyChangeEvent after property got set to the new index. 2005-02-15 Robert Schuster <thebohemian@gmx.net> * javax/swing/JComboBox.java: (JComboBox): Removed selection of the first item in the model. 2005-02-15 Robert Schuster <thebohemian@gmx.net> * javax/swing/JComboBox.java added support for no item being selected (JComboBox): select first or nothing depending on element count (setModel): cleaned up unneeded "this." usage, added more docs, made exception behavior match that of the JDK (setLighWeightPopupEnabled): removed unneeded "this." usage (setEditable): dito (setMaximumRowCount): dito (setRenderer): dito (setPrototypeDisplayValue): dito (getSelectedItem): simplified, added more user doc (setSelectedIndex): corrected exception behavior, added more user doc (getSelectedIndex): fixed hardcoded dependency on DefaultComboBoxModel, added performance warning to user doc (addItem): fixed exception behavior, added user doc (insertItemAt): dito (removeItem): dito (removeItemAt): dito (removeAll): fixed exception behavior, added user doc, added support for model not being instance of DefaultComboBoxModel (getSelectedItemObjects): simplified (getItemCount): fixed dependency on DefaultComboBoxModel (getItemAt): fixed dependency on MutableComboBoxModel * javax/swing/DefaultComboBoxModel.java: (setSelectedItem): updates selected item only if new value is null or known (match JDK behavior) * javax/swing/plaf/basic/BasicComboBoxUI.java: (paintCurrentValue): renders "" if no item is selected 2005-02-15 Michael Koch <konqueror@gmx.de> * javax/swing/plaf/metal/MetalTheme.java, javax/swing/plaf/metal/DefaultMetalTheme.java: New files. * javax/swing/plaf/metal/MetalLookAndFeel.java * Makefile.am: Added the new files. * Makefile.in: Regenerated. 2005-02-15 Olga Rodimina <rodimina@redhat.com> * javax/swing/JTable.java (editorComp): New field. (JTable): Initialize local variables and call updateUI (selectionBackground): Make protected. (selectionForeground): Likewise. (initializeLocalVars): Create default editors and renderers, initialize editingColumn, editingRow variables. (createDefaultEditors): New Method. (createDefaultRenderers): Likewise. (createDefaultListSelectionModel): Removed (createDefaultSelectionModel): New Method. (createDefaultTableHeader): Likewise (removeColumn): Likewise. (getEditingColumn): Likewise. (setEditingColumn): Likewise. (getEditingRow): Likewise. (setEditingRow): Likewise. (getEditorComponent): Likewise. (isEditing): Likewise. (setDefaultEditor): Likewise. (addColumnSelectionInterval): Likewise. (addRowSelectionInterval): Likewise. (setColumnSelectionInterval): Likewise. (setRowSelectionInterval): Likewise. (removeColumnSelectionInterval): Likewise. (removeRowSelectionInterval): Likewise. (isColumnSelected): Likewise. (isRowSelected): Likewise. (isCellSelected): Likewise. (selectAll): Likewise. 2005-02-15 Michael Koch <konqueror@gmx.de> * javax/swing/JTable.java (addColumn): New method. (getColumnClass): Likewise. (getColumnName): Likewise. 2005-02-15 Paul Jenner <psj.home@ntlworld.com> * javax/swing/TransferHandler.java (createTransferable): Made protected. 2005-02-15 Michael Koch <konqueror@gmx.de> * javax/swing/JTable.java, javax/swing/plaf/basic/BasicTableHeaderUI.java, javax/swing/plaf/basic/BasicTableUI.java: Use fixed get/setIntercellSpacing() methods. 2005-02-15 Michael Koch <konqueror@gmx.de> * javax/swing/JTable.java (getIntercellSpacing): Fixed typo in method name. (setIntercellSpacing): Likewise. 2005-02-15 Michael Koch <konqueror@gmx.de> * javax/swing/text/JTextComponent.java (focusAccelerator): New variable. (getFocusAccelerator): New method. (setFocusAccelerator): Likewise. 2005-02-15 Michael Koch <konqueror@gmx.de> * javax/swing/JComponent.java (setTransferHandler): Made public. Fire property change event. * javax/swing/TransferHandler.java: Implemented. * javax/swing/text/JTextComponent.java (DefaultTransferHandler): New inner class. (defaultTransferHandler): New variable. (copy): New method. (cut): Likewise. (paste): Likewise. (doTransferAction): Likewise. 2005-02-15 Michael Koch <konqueror@gmx.de> * javax/swing/JTree.java (collapsePath): New method. (collapseRow): Likewise. (expandPath): Likewise. (expandRow): Likewise. (checkExpandParents): Likewise. (doExpandParents): Likewise. (setExpandedState): Likewise. (makeVisible): Likewise. 2005-02-15 Michael Koch <konqueror@gmx.de> * javax/swing/JPasswordField.java: Updated javadocs. 2005-02-15 Michael Koch <konqueror@gmx.de> * javax/swing/JLayeredPane.java (getLayer): Fixed return type, made public. (getPosition): Use new getLayer(). (SetPosition): Likewise. (getIndexOf): Likewise. (remove): Likewise. * javax/swing/JInternalFrame.java (getLayer): Use new JLayeredPane.getLayer(). 2005-02-15 Michael Koch <konqueror@gmx.de> * javax/swing/table/TableColumn.java: Added/fixed javadocs over all. (setHeaderValue): Simplified. Do nothing when old value == new value. 2005-02-15 Thomas Fitzsimmons <fitzsim@redhat.com> * gnu/java/awt/peer/gtk/GdkGraphics.java (setClip): Protect against null clip region. * gnu/java/awt/peer/gtk/GtkFramePeer.java (create): Call gtkWindowSetResizable. (postConfigureEvent): Only revalidate if frame size has changed. * gnu/java/awt/peer/gtk/GtkWindowPeer.java (postConfigureEvent): Only revalidate if frame size has changed. * java/awt/Component.java (reshape): Only repaint and post component events if component is showing. * java/awt/Container.java (addImpl): Only post container event if container is showing. (remove): Likewise. * java/awt/Window.java (setLocationRelativeTo): Implement. (setBoundsCallback): Only post component events if component is showing. * jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c (clearRect): Protect against null graphics structure. Flush gdk event queue. 2005-02-15 Michael Koch <konqueror@gmx.de> * javax/imageio/ImageReader.java, javax/imageio/ImageTranscoder.java, javax/imageio/ImageWriter.java, javax/imageio/spi/ImageInputStreamSpi.java, javax/imageio/spi/ImageOutputStreamSpi.java, javax/imageio/spi/ServiceRegistry.java, javax/imageio/stream/ImageInputStream.java, javax/imageio/stream/ImageOutputStream.java: Updated. * javax/imageio/IIOException.java, javax/imageio/IIOImage.java, javax/imageio/IIOParam.java, javax/imageio/IIOParamController.java, javax/imageio/ImageIO.java, javax/imageio/ImageReadParam.java, javax/imageio/ImageTypeSpecifier.java, javax/imageio/ImageWriteParam.java, javax/imageio/spi/IIORegistry.java, javax/imageio/spi/ImageReaderSpi.java, javax/imageio/spi/ImageWriterSpi.java, javax/imageio/stream/FileCacheImageInputStream.java, javax/imageio/stream/FileCacheImageOutputStream.java, javax/imageio/stream/FileImageInputStream.java, javax/imageio/stream/FileImageOutputStream.java, javax/imageio/stream/ImageInputStreamImpl.java, javax/imageio/stream/ImageOutputStreamImpl.java, javax/imageio/stream/MemoryCacheImageInputStream.java, javax/imageio/stream/MemoryCacheImageOutputStream.java, javax/imageio/event/IIOReadProgressListener.java, javax/imageio/event/IIOReadUpdateListener.java, javax/imageio/event/IIOReadWarningListener.java, javax/imageio/event/IIOWriteProgressListener.java, javax/imageio/event/IIOWriteWarningListener.java, javax/imageio/metadata/IIOMetadata.java, javax/imageio/metadata/IIOMetadataController.java, javax/imageio/metadata/IIOMetadataFormat.java, javax/imageio/metadata/IIOInvalidTreeException.java, javax/imageio/metadata/IIOMetadataFormatImpl.java, javax/imageio/metadata/IIOMetadataNode.java: New files. * Makefile.am (javax_source_files): Added new files * Makefile.in: Regenerated. 2005-02-15 Graydon Hoare <graydon@redhat.com> * gnu/java/awt/peer/gtk/GdkGraphics2D.java: Rework painting into BufferedImages * gnu/java/awt/peer/gtk/GdkPixbufDecoder.java: Construct BufferedImage with alpha only when alpha is present in colormodel. * jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c: Rework painting into client-side jint arrays. * jni/gtk-peer/gtkcairopeer.h: Likewise. 2005-02-15 Michael Koch <konqueror@gmx.de> * javax/swing/DefaultListCellRenderer.java (serialVersionUID): Made private. (getListCellRendererComponent): Set horizontal alignment. * javax/swing/JLabel.java (setVerticalAlignment): Re-implemented. (setHorizontalAlignment): Do nothing if old value = new value. * javax/swing/JList.java (setCellRenderer): Likewise. (setModel): Re-implemented. (setSelectionModel): Likewise. 2005-02-15 David Gilbert <david.gilbert@object-refinery.com> * java/awt/Component.java, java/awt/geom/Rectangle2D.java: Javadoc fixes. 2005-02-15 Michael Koch <konqueror@gmx.de> * javax/swing/AbstractListModel.java (fireContentsChanged): Simplified. (fireIntervalAdded): Likewise. (fireIntervalRemoved): Likewise. * javax/swing/DefaultSingleSelectionModel.java: Reformatted. (fireStateChanged): Simplified. * javax/swing/JPopupMenu.java (setSelectionModel): Set property. 2005-02-15 Michael Koch <konqueror@gmx.de> * java/awt/print/Book.java: Reformatted. 2005-02-15 Michael Koch <konqueror@gmx.de> * java/awt/geom/Area.java (QuadSegment.curveArea): Remove unused variables. (CubicSegment.curveArea): Likewise. 2005-02-15 Michael Koch <konqueror@gmx.de> * javax/swing/JTree.java (ANCHOR_SELECTION_PATH_PROPERTY): Added @since tag. (LEAD_SELECTION_PATH_PROPERTY): Likewise. (EXPANDS_SELECTED_PATHS_PROPERTY): Likewise. (EXPANDED): New constant. (COLLAPSED): Likewise. (nodeStates): New field. (cellEditor): New method. (cellRenderer): Likewise. (selectionModel): Likewise. (treeModel): Likewise. (scrollPathToVisible): Likewise. (scrollRowToVisible): Likewise. (isCollapsed): Likewise. (isExpanded): Likewise. (clearToggledPaths): Likewise. (getDescendantToggledPaths): Likewise. (hasBeenExpanded): Likewise. (isVisible): Likewise. (isPathEditable): Likewise. 2005-02-15 Michael Koch <konqueror@gmx.de> * javax/swing/JLayeredPane.java: Reformatted. 2005-02-15 Michael Koch <konqueror@gmx.de> * javax/swing/tree/DefaultMutableTreeNode.java: Completely Revised. * javax/swing/tree/MutableTreeNode.java: Reformatted. 2005-02-15 Michael Koch <konqueror@gmx.de> * javax/swing/JFormattedTextField.java (setDocument): Call setDocument of super class. Don't fire property change event. 2005-02-15 Sven de Marothy <sven@physto.se> * java/awt/image/IndexColorModel.java: Add FIXME with respect to alpha handling. (getAlpha): Default to returning opaque pixels. * java/awt/image/MultiPixelPackedSampleModel.java (MultiPixelPackedSampleModel): Corrected parameters, order of bit shifts and masks, stride length off by one. 2005-02-15 Michael Koch <konqueror@gmx.de> * javax/swing/JList.java, javax/swing/JTree.java: Added much new methods and fixed much methods setting bound properties. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@95115 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libjava/java/awt')
-rw-r--r--libjava/java/awt/AWTKeyStroke.java19
-rw-r--r--libjava/java/awt/BasicStroke.java28
-rw-r--r--libjava/java/awt/Button.java12
-rw-r--r--libjava/java/awt/Canvas.java5
-rw-r--r--libjava/java/awt/Checkbox.java160
-rw-r--r--libjava/java/awt/CheckboxMenuItem.java38
-rw-r--r--libjava/java/awt/Choice.java86
-rw-r--r--libjava/java/awt/Component.java69
-rw-r--r--libjava/java/awt/Container.java39
-rw-r--r--libjava/java/awt/DefaultKeyboardFocusManager.java2
-rw-r--r--libjava/java/awt/Dialog.java38
-rw-r--r--libjava/java/awt/EventDispatchThread.java11
-rw-r--r--libjava/java/awt/EventQueue.java97
-rw-r--r--libjava/java/awt/Frame.java117
-rw-r--r--libjava/java/awt/Label.java5
-rw-r--r--libjava/java/awt/List.java184
-rw-r--r--libjava/java/awt/Menu.java12
-rw-r--r--libjava/java/awt/MenuBar.java5
-rw-r--r--libjava/java/awt/MenuComponent.java2
-rw-r--r--libjava/java/awt/MenuItem.java21
-rw-r--r--libjava/java/awt/PopupMenu.java11
-rw-r--r--libjava/java/awt/Robot.java366
-rw-r--r--libjava/java/awt/ScrollPane.java24
-rw-r--r--libjava/java/awt/Scrollbar.java1296
-rw-r--r--libjava/java/awt/TextArea.java11
-rw-r--r--libjava/java/awt/TextComponent.java16
-rw-r--r--libjava/java/awt/Toolkit.java4
-rw-r--r--libjava/java/awt/Window.java90
-rw-r--r--libjava/java/awt/color/ICC_Profile.java2
-rw-r--r--libjava/java/awt/dnd/DnDConstants.java9
-rw-r--r--libjava/java/awt/dnd/DropTarget.java9
-rw-r--r--libjava/java/awt/geom/Area.java4
-rw-r--r--libjava/java/awt/geom/Rectangle2D.java14
-rw-r--r--libjava/java/awt/im/InputContext.java4
-rw-r--r--libjava/java/awt/image/IndexColorModel.java12
-rw-r--r--libjava/java/awt/image/MemoryImageSource.java656
-rw-r--r--libjava/java/awt/image/MultiPixelPackedSampleModel.java9
-rw-r--r--libjava/java/awt/image/RGBImageFilter.java2
-rw-r--r--libjava/java/awt/image/ReplicateScaleFilter.java16
-rw-r--r--libjava/java/awt/peer/RobotPeer.java12
-rw-r--r--libjava/java/awt/print/Book.java255
-rw-r--r--libjava/java/awt/print/PrinterJob.java18
42 files changed, 2459 insertions, 1331 deletions
diff --git a/libjava/java/awt/AWTKeyStroke.java b/libjava/java/awt/AWTKeyStroke.java
index 53e64b7fb1b..1519f1da869 100644
--- a/libjava/java/awt/AWTKeyStroke.java
+++ b/libjava/java/awt/AWTKeyStroke.java
@@ -1,5 +1,5 @@
/* AWTKeyStroke.java -- an immutable key stroke
- Copyright (C) 2002, 2004 Free Software Foundation
+ Copyright (C) 2002, 2004, 2005 Free Software Foundation
This file is part of GNU Classpath.
@@ -393,15 +393,16 @@ public class AWTKeyStroke implements Serializable
* </code>
*
* @param s the string to parse
+ * @throws IllegalArgumentException if s is null or cannot be parsed
* @return the specified keystroke
- * @throws NullPointerException if s is null
- * @throws IllegalArgumentException if s cannot be parsed
*/
public static AWTKeyStroke getAWTKeyStroke(String s)
{
+ if (s == null)
+ throw new IllegalArgumentException("null argument");
StringTokenizer t = new StringTokenizer(s, " ");
if (! t.hasMoreTokens())
- throw new IllegalArgumentException();
+ throw new IllegalArgumentException("no tokens '" + s + "'");
int modifiers = 0;
boolean released = false;
String token = null;
@@ -432,7 +433,8 @@ public class AWTKeyStroke implements Serializable
KeyEvent.VK_UNDEFINED, modifiers,
false);
}
- throw new IllegalArgumentException();
+ throw new IllegalArgumentException("Invalid 'typed' argument '"
+ + s + "'");
}
else if ("pressed".equals(token))
{
@@ -453,8 +455,11 @@ public class AWTKeyStroke implements Serializable
while (t.hasMoreTokens());
// Now token contains the VK name we must parse.
Integer code = (Integer) vktable.get(token);
- if (code == null || t.hasMoreTokens())
- throw new IllegalArgumentException();
+ if (code == null)
+ throw new IllegalArgumentException("Unknown token '" + token
+ + "' in '" + s + "'");
+ if (t.hasMoreTokens())
+ throw new IllegalArgumentException("Too many tokens: " + s);
return getAWTKeyStroke(KeyEvent.CHAR_UNDEFINED, code.intValue(),
modifiers, released);
}
diff --git a/libjava/java/awt/BasicStroke.java b/libjava/java/awt/BasicStroke.java
index e302a0ebc9f..b1772548ac2 100644
--- a/libjava/java/awt/BasicStroke.java
+++ b/libjava/java/awt/BasicStroke.java
@@ -1,5 +1,5 @@
/* BasicStroke.java --
- Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc.
+ Copyright (C) 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -48,6 +48,7 @@ public class BasicStroke implements Stroke
public static final int JOIN_MITER = 0;
public static final int JOIN_ROUND = 1;
public static final int JOIN_BEVEL = 2;
+
public static final int CAP_BUTT = 0;
public static final int CAP_ROUND = 1;
public static final int CAP_SQUARE = 2;
@@ -208,11 +209,34 @@ public class BasicStroke implements Stroke
return phase;
}
+ /**
+ * Returns the hash code for this object. The hash is calculated by
+ * xoring the hash, cap, join, limit, dash array and phase values
+ * (converted to <code>int</code> first with
+ * <code>Float.floatToIntBits()</code> if the value is a
+ * <code>float</code>).
+ */
public int hashCode()
{
- throw new Error("not implemented");
+ int hash = Float.floatToIntBits(width);
+ hash ^= cap;
+ hash ^= join;
+ hash ^= Float.floatToIntBits(limit);
+
+ if (dash != null)
+ for (int i = 0; i < dash.length; i++)
+ hash ^= Float.floatToIntBits(dash[i]);
+
+ hash ^= Float.floatToIntBits(phase);
+
+ return hash;
}
+ /**
+ * Returns true if the given Object is an instance of BasicStroke
+ * and the width, cap, join, limit, dash array and phase are all
+ * equal.
+ */
public boolean equals(Object o)
{
if (! (o instanceof BasicStroke))
diff --git a/libjava/java/awt/Button.java b/libjava/java/awt/Button.java
index 86cb37cac90..0458ebbd71d 100644
--- a/libjava/java/awt/Button.java
+++ b/libjava/java/awt/Button.java
@@ -47,7 +47,6 @@ import java.util.EventListener;
import javax.accessibility.Accessible;
import javax.accessibility.AccessibleAction;
import javax.accessibility.AccessibleContext;
-import javax.accessibility.AccessibleRelation;
import javax.accessibility.AccessibleRole;
import javax.accessibility.AccessibleValue;
@@ -429,9 +428,18 @@ paramString()
+ getWidth () + "x" + getHeight () + ",label=" + getLabel ();
}
+/**
+ * Gets the AccessibleContext associated with this <code>Button</code>.
+ * The context is created, if necessary.
+ *
+ * @return the associated context
+ */
public AccessibleContext getAccessibleContext()
{
- return new AccessibleAWTButton();
+ /* Create the context if this is the first request */
+ if (accessibleContext == null)
+ accessibleContext = new AccessibleAWTButton();
+ return accessibleContext;
}
/**
diff --git a/libjava/java/awt/Canvas.java b/libjava/java/awt/Canvas.java
index d177c9b7d7a..05055f2a28f 100644
--- a/libjava/java/awt/Canvas.java
+++ b/libjava/java/awt/Canvas.java
@@ -174,10 +174,7 @@ public class Canvas
{
/* Create the context if this is the first request */
if (accessibleContext == null)
- {
- /* Create the context */
- accessibleContext = new AccessibleAWTCanvas();
- }
+ accessibleContext = new AccessibleAWTCanvas();
return accessibleContext;
}
diff --git a/libjava/java/awt/Checkbox.java b/libjava/java/awt/Checkbox.java
index 04ace46cabe..b3fc4c24d0a 100644
--- a/libjava/java/awt/Checkbox.java
+++ b/libjava/java/awt/Checkbox.java
@@ -48,6 +48,7 @@ import javax.accessibility.AccessibleAction;
import javax.accessibility.AccessibleContext;
import javax.accessibility.AccessibleRole;
import javax.accessibility.AccessibleState;
+import javax.accessibility.AccessibleStateSet;
import javax.accessibility.AccessibleValue;
/**
@@ -55,7 +56,7 @@ import javax.accessibility.AccessibleValue;
* or more Checkboxes can be grouped by a CheckboxGroup.
*
* @author Aaron M. Renn (arenn@urbanophile.com)
- * @author Tom Tromey <tromey@redhat.com>
+ * @author Tom Tromey (tromey@redhat.com)
*/
public class Checkbox extends Component
implements ItemSelectable, Accessible, Serializable
@@ -94,13 +95,38 @@ private boolean state;
// The list of listeners for this object.
private transient ItemListener item_listeners;
-protected class AccessibleAWTCheckBox
+/**
+ * This class provides accessibility support for the
+ * checkbox.
+ *
+ * @author Jerry Quinn (jlquinn@optonline.net)
+ * @author Andrew John Hughes (gnu_andrew@member.fsf.org)
+ */
+protected class AccessibleAWTCheckbox
extends AccessibleAWTComponent
implements ItemListener, AccessibleAction, AccessibleValue
{
-
- /* (non-Javadoc)
+ /**
+ * Serialization constant to match JDK 1.5
+ */
+ private static final long serialVersionUID = 7881579233144754107L;
+
+ /**
+ * Default constructor which simply calls the
+ * super class for generic component accessibility
+ * handling.
+ */
+ public AccessibleAWTCheckbox()
+ {
+ super();
+ }
+
+ /**
+ * Captures changes to the state of the checkbox and
+ * fires appropriate accessible property change events.
+ *
+ * @param event the event fired.
* @see java.awt.event.ItemListener#itemStateChanged(java.awt.event.ItemEvent)
*/
public void itemStateChanged(ItemEvent event)
@@ -110,58 +136,121 @@ protected class AccessibleAWTCheckBox
state ? AccessibleState.CHECKED : null);
}
+ /**
+ * Returns an implementation of the <code>AccessibleAction</code>
+ * interface for this accessible object. In this case, the
+ * current instance is simply returned (with a more appropriate
+ * type), as it also implements the accessible action as well as
+ * the context.
+ *
+ * @return the accessible action associated with this context.
+ * @see javax.accessibility.AccessibleAction
+ */
public AccessibleAction getAccessibleAction()
{
return this;
}
+ /**
+ * Returns an implementation of the <code>AccessibleValue</code>
+ * interface for this accessible object. In this case, the
+ * current instance is simply returned (with a more appropriate
+ * type), as it also implements the accessible value as well as
+ * the context.
+ *
+ * @return the accessible value associated with this context.
+ * @see javax.accessibility.AccessibleValue
+ */
public AccessibleValue getAccessibleValue()
{
return this;
}
- /* (non-Javadoc)
+ /*
+ * The following methods are implemented in the JDK (up to
+ * 1.5) as stubs. We do likewise here.
+ */
+
+ /**
+ * Returns the number of actions associated with this accessible
+ * object. This default implementation returns 0.
+ *
+ * @return the number of accessible actions available.
* @see javax.accessibility.AccessibleAction#getAccessibleActionCount()
*/
public int getAccessibleActionCount()
{
- // 1.4.1 does this
+ // 1.4.1 and 1.5 do this
return 0;
}
- /* (non-Javadoc)
+ /**
+ * Returns a description of the action with the supplied id.
+ * This default implementation always returns null.
+ *
+ * @param i the id of the action whose description should be
+ * retrieved.
+ * @return a <code>String</code> describing the action.
* @see javax.accessibility.AccessibleAction#getAccessibleActionDescription(int)
*/
public String getAccessibleActionDescription(int i)
{
+ // 1.5 does this
return null;
}
- /* (non-Javadoc)
+ /**
+ * Executes the action with the specified id. This
+ * default implementation simply returns false.
+ *
+ * @param i the id of the action to perform.
+ * @return true if the action was performed.
* @see javax.accessibility.AccessibleAction#doAccessibleAction(int)
*/
public boolean doAccessibleAction(int i)
{
+ // 1.5 does this
return false;
}
- /* (non-Javadoc)
+ /**
+ * Returns the current value of this accessible object.
+ * If no value has been set, null is returned. This
+ * default implementation always returns null, regardless.
+ *
+ * @return the numeric value of this object, or null if
+ * no value has been set.
* @see javax.accessibility.AccessibleValue#getCurrentAccessibleValue()
*/
public Number getCurrentAccessibleValue()
{
+ // 1.5 does this
return null;
}
- /* (non-Javadoc)
+ /**
+ * Sets the current value of this accessible object
+ * to that supplied. In this default implementation,
+ * the value is never set and the method always returns
+ * false.
+ *
+ * @param number the new accessible value.
+ * @return true if the value was set.
* @see javax.accessibility.AccessibleValue#setCurrentAccessibleValue(java.lang.Number)
*/
public boolean setCurrentAccessibleValue(Number number)
{
+ // 1.5 does this
return false;
}
- /* (non-Javadoc)
+ /**
+ * Returns the minimum acceptable accessible value used
+ * by this object, or null if no minimum value exists.
+ * This default implementation always returns null.
+ *
+ * @return the minimum acceptable accessible value, or null
+ * if there is no minimum.
* @see javax.accessibility.AccessibleValue#getMinimumAccessibleValue()
*/
public Number getMinimumAccessibleValue()
@@ -169,7 +258,13 @@ protected class AccessibleAWTCheckBox
return null;
}
- /* (non-Javadoc)
+ /**
+ * Returns the maximum acceptable accessible value used
+ * by this object, or null if no maximum value exists.
+ * This default implementation always returns null.
+ *
+ * @return the maximum acceptable accessible value, or null
+ * if there is no maximum.
* @see javax.accessibility.AccessibleValue#getMaximumAccessibleValue()
*/
public Number getMaximumAccessibleValue()
@@ -177,11 +272,35 @@ protected class AccessibleAWTCheckBox
return null;
}
+ /**
+ * Returns the role of this accessible object.
+ *
+ * @return the instance of <code>AccessibleRole</code>,
+ * which describes this object.
+ * @see javax.accessibility.AccessibleRole
+ */
public AccessibleRole getAccessibleRole()
{
return AccessibleRole.CHECK_BOX;
}
+ /**
+ * Returns the state set of this accessible object.
+ *
+ * @return a set of <code>AccessibleState</code>s
+ * which represent the current state of the
+ * accessible object.
+ * @see javax.accessibility.AccessibleState
+ * @see javax.accessibility.AccessibleStateSet
+ */
+ public AccessibleStateSet getAccessibleStateSet()
+ {
+ AccessibleStateSet set = super.getAccessibleStateSet();
+ if (state)
+ set.add(AccessibleState.CHECKED);
+ return set;
+ }
+
}
/*************************************************************************/
@@ -490,11 +609,22 @@ paramString()
+ "," + super.paramString());
}
+/**
+ * Gets the AccessibleContext associated with this <code>Checkbox</code>.
+ * The context is created, if necessary.
+ *
+ * @return the associated context
+ */
public AccessibleContext getAccessibleContext()
{
- AccessibleAWTCheckBox ac = new AccessibleAWTCheckBox();
- addItemListener(ac);
- return ac;
+ /* Create the context if this is the first request */
+ if (accessibleContext == null)
+ {
+ AccessibleAWTCheckbox ac = new AccessibleAWTCheckbox();
+ accessibleContext = ac;
+ addItemListener(ac);
+ }
+ return accessibleContext;
}
} // class Checkbox
diff --git a/libjava/java/awt/CheckboxMenuItem.java b/libjava/java/awt/CheckboxMenuItem.java
index ab4cb60f03c..6b9002ad7aa 100644
--- a/libjava/java/awt/CheckboxMenuItem.java
+++ b/libjava/java/awt/CheckboxMenuItem.java
@@ -43,6 +43,11 @@ import java.awt.event.ItemListener;
import java.awt.peer.CheckboxMenuItemPeer;
import java.util.EventListener;
+import javax.accessibility.Accessible;
+import javax.accessibility.AccessibleAction;
+import javax.accessibility.AccessibleContext;
+import javax.accessibility.AccessibleValue;
+
/**
* This class implements a menu item that has a checkbox on it indicating
* the selected state of some option.
@@ -50,7 +55,8 @@ import java.util.EventListener;
* @author Aaron M. Renn (arenn@urbanophile.com)
* @author Tom Tromey <tromey@redhat.com>
*/
-public class CheckboxMenuItem extends MenuItem implements ItemSelectable
+public class CheckboxMenuItem extends MenuItem
+ implements ItemSelectable, Accessible
{
/*
@@ -268,6 +274,14 @@ processItemEvent(ItemEvent event)
void
dispatchEventImpl(AWTEvent e)
{
+ if (e instanceof ItemEvent)
+ {
+ synchronized (this)
+ {
+ state = (((ItemEvent) e).getStateChange() == ItemEvent.SELECTED);
+ }
+ }
+
if (e.id <= ItemEvent.ITEM_LAST
&& e.id >= ItemEvent.ITEM_FIRST
&& (item_listeners != null
@@ -315,5 +329,27 @@ paramString()
{
return (ItemListener[]) getListeners (ItemListener.class);
}
+
+
+ protected class AccessibleAWTCheckboxMenuItem extends AccessibleAWTMenuItem
+ implements AccessibleAction, AccessibleValue
+ {
+ // I think the base class provides the necessary implementation
+ }
+
+ /**
+ * Gets the AccessibleContext associated with this <code>CheckboxMenuItem</code>.
+ * The context is created, if necessary.
+ *
+ * @return the associated context
+ */
+ public AccessibleContext getAccessibleContext()
+ {
+ /* Create the context if this is the first request */
+ if (accessibleContext == null)
+ accessibleContext = new AccessibleAWTCheckboxMenuItem();
+ return accessibleContext;
+ }
+
} // class CheckboxMenuItem
diff --git a/libjava/java/awt/Choice.java b/libjava/java/awt/Choice.java
index 89e91ca78b8..c6a532a5b37 100644
--- a/libjava/java/awt/Choice.java
+++ b/libjava/java/awt/Choice.java
@@ -45,6 +45,7 @@ import java.io.Serializable;
import java.util.EventListener;
import java.util.Vector;
+import javax.accessibility.Accessible;
import javax.accessibility.AccessibleAction;
import javax.accessibility.AccessibleContext;
import javax.accessibility.AccessibleRole;
@@ -54,7 +55,8 @@ import javax.accessibility.AccessibleRole;
*
* @author Aaron M. Renn (arenn@urbanophile.com)
*/
-public class Choice extends Component implements ItemSelectable, Serializable
+public class Choice extends Component
+ implements ItemSelectable, Serializable, Accessible
{
/*
@@ -83,23 +85,65 @@ private int selectedIndex = -1;
// Listener chain
private ItemListener item_listeners;
+/**
+ * This class provides accessibility support for the
+ * combo box.
+ *
+ * @author Jerry Quinn (jlquinn@optonline.net)
+ * @author Andrew John Hughes (gnu_andrew@member.fsf.org)
+ */
protected class AccessibleAWTChoice
- extends Component.AccessibleAWTComponent
- implements AccessibleAction
+ extends AccessibleAWTComponent
+ implements AccessibleAction
{
+
+ /**
+ * Serialization constant to match JDK 1.5
+ */
+ private static final long serialVersionUID = 7175603582428509322L;
+
+ /**
+ * Default constructor which simply calls the
+ * super class for generic component accessibility
+ * handling.
+ */
+ public AccessibleAWTChoice()
+ {
+ super();
+ }
+
+ /**
+ * Returns an implementation of the <code>AccessibleAction</code>
+ * interface for this accessible object. In this case, the
+ * current instance is simply returned (with a more appropriate
+ * type), as it also implements the accessible action as well as
+ * the context.
+ *
+ * @return the accessible action associated with this context.
+ * @see javax.accessibility.AccessibleAction
+ */
public AccessibleAction getAccessibleAction()
{
return this;
}
- // FIXME: I think this is right, but should be checked by someone who
- // knows better.
+ /**
+ * Returns the role of this accessible object.
+ *
+ * @return the instance of <code>AccessibleRole</code>,
+ * which describes this object.
+ * @see javax.accessibility.AccessibleRole
+ */
public AccessibleRole getAccessibleRole()
{
- return AccessibleRole.POPUP_MENU;
+ return AccessibleRole.COMBO_BOX;
}
- /* (non-Javadoc)
+ /**
+ * Returns the number of actions associated with this accessible
+ * object. In this case, it is the number of choices available.
+ *
+ * @return the number of choices available.
* @see javax.accessibility.AccessibleAction#getAccessibleActionCount()
*/
public int getAccessibleActionCount()
@@ -107,7 +151,14 @@ private ItemListener item_listeners;
return pItems.size();
}
- /* (non-Javadoc)
+ /**
+ * Returns a description of the action with the supplied id.
+ * In this case, it is the text used in displaying the particular
+ * choice on-screen.
+ *
+ * @param i the id of the choice whose description should be
+ * retrieved.
+ * @return the <code>String</code> used to describe the choice.
* @see javax.accessibility.AccessibleAction#getAccessibleActionDescription(int)
*/
public String getAccessibleActionDescription(int i)
@@ -115,7 +166,13 @@ private ItemListener item_listeners;
return (String) pItems.get(i);
}
- /* (non-Javadoc)
+ /**
+ * Executes the action with the specified id. In this case,
+ * calling this method provides the same behaviour as would
+ * choosing a choice from the list in a visual manner.
+ *
+ * @param i the id of the choice to select.
+ * @return true if a valid choice was specified.
* @see javax.accessibility.AccessibleAction#doAccessibleAction(int)
*/
public boolean doAccessibleAction(int i)
@@ -564,8 +621,17 @@ paramString()
return (ItemListener[]) getListeners (ItemListener.class);
}
+ /**
+ * Gets the AccessibleContext associated with this <code>Choice</code>.
+ * The context is created, if necessary.
+ *
+ * @return the associated context
+ */
public AccessibleContext getAccessibleContext()
{
- return new AccessibleAWTChoice();
+ /* Create the context if this is the first request */
+ if (accessibleContext == null)
+ accessibleContext = new AccessibleAWTChoice();
+ return accessibleContext;
}
} // class Choice
diff --git a/libjava/java/awt/Component.java b/libjava/java/awt/Component.java
index cb47f777acb..3a7960c22c7 100644
--- a/libjava/java/awt/Component.java
+++ b/libjava/java/awt/Component.java
@@ -1080,7 +1080,7 @@ public abstract class Component
*
* @return the locale for this component
* @throws IllegalComponentStateException if it has no locale or parent
- * @see setLocale(Locale)
+ * @see #setLocale(Locale)
* @since 1.1
*/
public Locale getLocale()
@@ -1362,7 +1362,7 @@ public abstract class Component
peer.setBounds (x, y, width, height);
// Erase old bounds and repaint new bounds for lightweights.
- if (isLightweight())
+ if (isLightweight() && isShowing ())
{
boolean shouldRepaintParent = false;
boolean shouldRepaintSelf = false;
@@ -1386,13 +1386,16 @@ public abstract class Component
repaint();
}
- if (oldx != x || oldy != y)
+ // Only post event if this component is visible and has changed size.
+ if (isShowing ()
+ && (oldx != x || oldy != y))
{
ComponentEvent ce = new ComponentEvent(this,
ComponentEvent.COMPONENT_MOVED);
getToolkit().getSystemEventQueue().postEvent(ce);
}
- if (oldwidth != width || oldheight != height)
+ if (isShowing ()
+ && (oldwidth != width || oldheight != height))
{
ComponentEvent ce = new ComponentEvent(this,
ComponentEvent.COMPONENT_RESIZED);
@@ -1955,7 +1958,7 @@ public abstract class Component
* @see Graphics#drawImage(Image, int, int, ImageObserver)
* @see Graphics#drawImage(Image, int, int, int, int, Color, ImageObserver)
* @see Graphics#drawImage(Image, int, int, int, int, ImageObserver)
- * @see ImageObserver#update(Image, int, int, int, int, int)
+ * @see ImageObserver#imageUpdate(Image, int, int, int, int, int)
*/
public boolean imageUpdate(Image img, int flags, int x, int y, int w, int h)
{
@@ -2097,7 +2100,7 @@ public abstract class Component
* @param observer the observer to notify of image loading progress
* @return the image observer flags indicating the status of the load
* @see #prepareImage(Image, int, int, ImageObserver)
- * @see #Toolkit#checkImage(Image, int, int, ImageObserver)
+ * @see Toolkit#checkImage(Image, int, int, ImageObserver)
* @throws NullPointerException if image is null
*/
public int checkImage(Image image, ImageObserver observer)
@@ -2115,7 +2118,7 @@ public abstract class Component
* @param observer the observer to notify of image loading progress
* @return the image observer flags indicating the status of the load
* @see #prepareImage(Image, int, int, ImageObserver)
- * @see #Toolkit#checkImage(Image, int, int, ImageObserver)
+ * @see Toolkit#checkImage(Image, int, int, ImageObserver)
*/
public int checkImage(Image image, int width, int height,
ImageObserver observer)
@@ -2134,7 +2137,7 @@ public abstract class Component
* @param ignoreRepaint the new setting for ignoring repaint events
* @see #getIgnoreRepaint()
* @see BufferStrategy
- * @see GraphicsDevice.setFullScreenWindow(Window)
+ * @see GraphicsDevice#setFullScreenWindow(Window)
* @since 1.4
*/
public void setIgnoreRepaint(boolean ignoreRepaint)
@@ -2250,9 +2253,9 @@ public abstract class Component
* calls {@link #postEvent}.
*
* @param e the event to deliver
- * @deprecated use {@link #dispatchEvent(AWTEvent)} instead
+ * @deprecated use {@link #dispatchEvent (AWTEvent)} instead
*/
- public void deliverEvent(Event e)
+ public void deliverEvent (Event e)
{
postEvent (e);
}
@@ -2284,7 +2287,7 @@ public abstract class Component
* @return true if the event was handled, false otherwise
* @deprecated use {@link #dispatchEvent(AWTEvent)} instead
*/
- public boolean postEvent(Event e)
+ public boolean postEvent (Event e)
{
boolean handled = handleEvent (e);
@@ -3178,8 +3181,8 @@ public abstract class Component
* AWT 1.0 event handler.
*
* This method calls one of the event-specific handler methods. For
- * example for key events, either {@link #keyDown (Event evt, int
- * key)} or {@link keyUp (Event evt, int key)} is called. A derived
+ * example for key events, either {@link #keyDown(Event,int)}
+ * or {@link #keyUp(Event,int)} is called. A derived
* component can override one of these event-specific methods if it
* only needs to handle certain event types. Otherwise it can
* override handleEvent itself and handle any event.
@@ -3188,7 +3191,7 @@ public abstract class Component
* @return true if the event was handled, false otherwise
* @deprecated use {@link #processEvent(AWTEvent)} instead
*/
- public boolean handleEvent(Event evt)
+ public boolean handleEvent (Event evt)
{
switch (evt.id)
{
@@ -3405,9 +3408,15 @@ public abstract class Component
*/
public void removeNotify()
{
- if (peer != null)
- peer.dispose();
+ // We null our peer field before disposing of it, such that if we're
+ // not the event dispatch thread and the dispatch thread is awoken by
+ // the dispose call, there will be no race checking the peer's null
+ // status.
+
+ ComponentPeer tmp = peer;
peer = null;
+ if (tmp != null)
+ tmp.dispose();
}
/**
@@ -3469,8 +3478,8 @@ public abstract class Component
* Specify whether this component can receive focus. This method also
* sets the {@link #isFocusTraversableOverridden} field to 1, which
* appears to be the undocumented way {@link
- * DefaultFocusTraversalPolicy#accept()} determines whether to respect
- * the {@link #isFocusable()} method of the component.
+ * DefaultFocusTraversalPolicy#accept(Component)} determines whether to
+ * respect the {@link #isFocusable()} method of the component.
*
* @param focusable the new focusable status
* @since 1.4
@@ -3484,10 +3493,10 @@ public abstract class Component
/**
* Sets the focus traversal keys for one of the three focus
- * traversal directions supported by Components: {@link
- * #KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS}, {@link
- * #KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS}, or {@link
- * #KeyboardFocusManager.UP_CYCLE_TRAVERSAL_KEYS}. Normally, the
+ * traversal directions supported by Components:
+ * {@link #KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS},
+ * {@link #KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS}, or
+ * {@link #KeyboardFocusManager.UP_CYCLE_TRAVERSAL_KEYS}. Normally, the
* default values should match the operating system's native
* choices. To disable a given traversal, use
* <code>Collections.EMPTY_SET</code>. The event dispatcher will
@@ -3716,7 +3725,7 @@ public abstract class Component
* receives a FOCUS_GAINED event.
*
* The behaviour of this method is platform-dependent.
- * {@link #requestFocusInWindow} should be used instead.
+ * {@link #requestFocusInWindow()} should be used instead.
*
* @see #requestFocusInWindow ()
* @see FocusEvent
@@ -3791,7 +3800,7 @@ public abstract class Component
* receives a FOCUS_GAINED event.
*
* The behaviour of this method is platform-dependent.
- * {@link #requestFocusInWindow} should be used instead.
+ * {@link #requestFocusInWindow()} should be used instead.
*
* If the return value is false, the request is guaranteed to fail.
* If the return value is true, the request will succeed unless it
@@ -3855,10 +3864,10 @@ public abstract class Component
currentFocusOwner));
}
else
- eq.postEvent (new FocusEvent(this, FocusEvent.FOCUS_GAINED, temporary));
+ eq.postEvent (new FocusEvent(this, FocusEvent.FOCUS_GAINED, temporary));
+ }
}
}
- }
else
// FIXME: need to add a focus listener to our top-level
// ancestor, so that we can post this event when it becomes
@@ -3973,10 +3982,10 @@ public abstract class Component
currentFocusOwner));
}
else
- eq.postEvent (new FocusEvent(this, FocusEvent.FOCUS_GAINED, temporary));
+ eq.postEvent (new FocusEvent(this, FocusEvent.FOCUS_GAINED, temporary));
+ }
}
}
- }
else
return false;
}
@@ -4069,8 +4078,8 @@ public abstract class Component
* However, if this is a Window, the default focus owner in the
* window in the current focus cycle is focused instead.
*
- * @see #requestFocus ()
- * @see #isFocusCycleRoot ()
+ * @see #requestFocus()
+ * @see #isFocusCycleRoot(Container)
* @since 1.4
*/
public void transferFocusUpCycle ()
diff --git a/libjava/java/awt/Container.java b/libjava/java/awt/Container.java
index 6c835d23d8e..6c5dec25d0b 100644
--- a/libjava/java/awt/Container.java
+++ b/libjava/java/awt/Container.java
@@ -1,5 +1,5 @@
/* Container.java -- parent container class in AWT
- Copyright (C) 1999, 2000, 2002, 2003, 2004 Free Software Foundation
+ Copyright (C) 1999, 2000, 2002, 2003, 2004, 2005 Free Software Foundation
This file is part of GNU Classpath.
@@ -387,11 +387,14 @@ public class Container extends Component
layoutMgr.addLayoutComponent(null, comp);
}
- // Post event to notify of adding the container.
- ContainerEvent ce = new ContainerEvent(this,
- ContainerEvent.COMPONENT_ADDED,
- comp);
- getToolkit().getSystemEventQueue().postEvent(ce);
+ if (isShowing ())
+ {
+ // Post event to notify of adding the component.
+ ContainerEvent ce = new ContainerEvent(this,
+ ContainerEvent.COMPONENT_ADDED,
+ comp);
+ getToolkit().getSystemEventQueue().postEvent(ce);
+ }
}
}
@@ -419,11 +422,14 @@ public class Container extends Component
r.parent = null;
- // Post event to notify of adding the container.
- ContainerEvent ce = new ContainerEvent(this,
- ContainerEvent.COMPONENT_REMOVED,
- r);
- getToolkit().getSystemEventQueue().postEvent(ce);
+ if (isShowing ())
+ {
+ // Post event to notify of removing the component.
+ ContainerEvent ce = new ContainerEvent(this,
+ ContainerEvent.COMPONENT_REMOVED,
+ r);
+ getToolkit().getSystemEventQueue().postEvent(ce);
+ }
}
}
@@ -1046,11 +1052,14 @@ public class Container extends Component
*/
protected String paramString()
{
- String param = super.paramString();
- if (layoutMgr != null)
- param = param + ",layout=" + layoutMgr.getClass().getName();
+ if (layoutMgr == null)
+ return super.paramString();
- return param;
+ StringBuffer sb = new StringBuffer();
+ sb.append(super.paramString());
+ sb.append(",layout=");
+ sb.append(layoutMgr.getClass().getName());
+ return sb.toString();
}
/**
diff --git a/libjava/java/awt/DefaultKeyboardFocusManager.java b/libjava/java/awt/DefaultKeyboardFocusManager.java
index 800b01d4639..9c94d8a220b 100644
--- a/libjava/java/awt/DefaultKeyboardFocusManager.java
+++ b/libjava/java/awt/DefaultKeyboardFocusManager.java
@@ -226,7 +226,7 @@ public class DefaultKeyboardFocusManager extends KeyboardFocusManager
Component focusOwner = getGlobalPermanentFocusOwner ();
if (focusOwner != null)
- processKeyEvent (focusOwner, (KeyEvent) e);
+ processKeyEvent (focusOwner, (KeyEvent) e);
if (e.isConsumed ())
return true;
diff --git a/libjava/java/awt/Dialog.java b/libjava/java/awt/Dialog.java
index 6bfb80c8563..30631b331ea 100644
--- a/libjava/java/awt/Dialog.java
+++ b/libjava/java/awt/Dialog.java
@@ -40,6 +40,11 @@ package java.awt;
import java.awt.peer.DialogPeer;
+import javax.accessibility.AccessibleContext;
+import javax.accessibility.AccessibleRole;
+import javax.accessibility.AccessibleState;
+import javax.accessibility.AccessibleStateSet;
+
/**
* A dialog box widget class.
*
@@ -511,5 +516,38 @@ paramString()
this.undecorated = undecorated;
}
+
+ protected class AccessibleAWTDialog extends AccessibleAWTWindow
+ {
+ public AccessibleRole getAccessibleRole()
+ {
+ return AccessibleRole.DIALOG;
+ }
+
+ public AccessibleStateSet getAccessibleState()
+ {
+ AccessibleStateSet states = super.getAccessibleStateSet();
+ if (isResizable())
+ states.add(AccessibleState.RESIZABLE);
+ if (isModal())
+ states.add(AccessibleState.MODAL);
+ return states;
+ }
+ }
+
+ /**
+ * Gets the AccessibleContext associated with this <code>Dialog</code>.
+ * The context is created, if necessary.
+ *
+ * @return the associated context
+ */
+ public AccessibleContext getAccessibleContext()
+ {
+ /* Create the context if this is the first request */
+ if (accessibleContext == null)
+ accessibleContext = new AccessibleAWTDialog();
+ return accessibleContext;
+ }
+
} // class Dialog
diff --git a/libjava/java/awt/EventDispatchThread.java b/libjava/java/awt/EventDispatchThread.java
index 0803ff675c8..d55f0f5ea45 100644
--- a/libjava/java/awt/EventDispatchThread.java
+++ b/libjava/java/awt/EventDispatchThread.java
@@ -53,7 +53,6 @@ class EventDispatchThread extends Thread
setName("AWT-EventQueue-" + ++dispatchThreadNum);
this.queue = queue;
setPriority(NORM_PRIORITY + 1);
- start();
}
public void run()
@@ -63,11 +62,6 @@ class EventDispatchThread extends Thread
try
{
AWTEvent evt = queue.getNextEvent();
- if (isInterrupted ())
- {
- // We are interrupted when we should finish executing
- return;
- }
KeyboardFocusManager manager;
manager = KeyboardFocusManager.getCurrentKeyboardFocusManager ();
@@ -80,6 +74,11 @@ class EventDispatchThread extends Thread
if (!manager.dispatchEvent (evt))
queue.dispatchEvent(evt);
}
+ catch (ThreadDeath death)
+ {
+ // If someone wants to kill us, let them.
+ return;
+ }
catch (InterruptedException ie)
{
// We are interrupted when we should finish executing
diff --git a/libjava/java/awt/EventQueue.java b/libjava/java/awt/EventQueue.java
index fd1c8062d71..fc0926cce2e 100644
--- a/libjava/java/awt/EventQueue.java
+++ b/libjava/java/awt/EventQueue.java
@@ -40,9 +40,12 @@ package java.awt;
import java.awt.event.ActionEvent;
import java.awt.event.InputEvent;
import java.awt.event.InvocationEvent;
+import java.awt.event.WindowEvent;
import java.lang.reflect.InvocationTargetException;
import java.util.EmptyStackException;
+import gnu.java.awt.ClasspathToolkit;
+
/* Written using on-line Java 2 Platform Standard Edition v1.3 API
* Specification, as well as "The Java Class Libraries", 2nd edition
* (Addison-Wesley, 1998).
@@ -71,6 +74,35 @@ public class EventQueue
private long lastWhen = System.currentTimeMillis();
private EventDispatchThread dispatchThread = new EventDispatchThread(this);
+ private boolean shutdown = false;
+
+ private long lastNativeQueueAccess = 0;
+ private long humanLatencyThreshold = 100;
+
+ synchronized void setShutdown (boolean b)
+ {
+ shutdown = b;
+ }
+
+ synchronized boolean isShutdown ()
+ {
+ if (shutdown)
+ return true;
+
+ // This is the exact self-shutdown condition specified in J2SE:
+ // http://java.sun.com/j2se/1.4.2/docs/api/java/awt/doc-files/AWTThreadIssues.html
+
+ if (peekEvent() == null
+ && ((ClasspathToolkit) Toolkit.getDefaultToolkit()).nativeQueueEmpty())
+ {
+ Frame[] frames = Frame.getFrames();
+ for (int i = 0; i < frames.length; ++i)
+ if (frames[i].isDisplayable())
+ return false;
+ return true;
+ }
+ return false;
+ }
/**
* Initializes a new instance of <code>EventQueue</code>.
@@ -93,9 +125,51 @@ public class EventQueue
{
if (next != null)
return next.getNextEvent();
+
+ ClasspathToolkit tk = ((ClasspathToolkit) Toolkit.getDefaultToolkit());
+ long curr = System.currentTimeMillis();
+
+ if (! tk.nativeQueueEmpty() &&
+ (curr - lastNativeQueueAccess > humanLatencyThreshold))
+ {
+ tk.iterateNativeQueue(this, false);
+ lastNativeQueueAccess = curr;
+ }
while (next_in == next_out)
- wait();
+ {
+ // Only the EventDispatchThread associated with the top of the stack is
+ // allowed to get events from the native source; everyone else just
+ // waits on the head of the queue.
+
+ if (isDispatchThread())
+ {
+ // We are not allowed to return null from this method, yet it
+ // is possible that we actually have run out of native events
+ // in the enclosing while() loop, and none of the native events
+ // happened to cause AWT events. We therefore ought to check
+ // the isShutdown() condition here, before risking a "native
+ // wait". If we check it before entering this function we may
+ // wait forever for events after the shutdown condition has
+ // arisen.
+
+ if (isShutdown())
+ throw new InterruptedException();
+
+ tk.iterateNativeQueue(this, true);
+ lastNativeQueueAccess = System.currentTimeMillis();
+ }
+ else
+ {
+ try
+ {
+ wait();
+ }
+ catch (InterruptedException ie)
+ {
+ }
+ }
+ }
AWTEvent res = queue[next_out];
@@ -215,6 +289,22 @@ public class EventQueue
next_out = 0;
next_in = oldQueue.length;
}
+
+ if (dispatchThread == null || !dispatchThread.isAlive())
+ {
+ dispatchThread = new EventDispatchThread(this);
+ dispatchThread.start();
+ }
+
+ // Window events might represent the closing of a window, which
+ // might cause the end of the dispatch thread's life, so we'll wake
+ // it up here to give it a chance to check for shutdown.
+
+ if (!isDispatchThread()
+ || (evt.getID() == WindowEvent.WINDOW_CLOSED)
+ || (evt.getID() == WindowEvent.WINDOW_CLOSING))
+ ((ClasspathToolkit) Toolkit.getDefaultToolkit()).wakeNativeQueue();
+
notify();
}
@@ -386,9 +476,10 @@ public class EventQueue
next_in = 0;
next_out = 0;
- // Tell our EventDispatchThread that it can end execution
- dispatchThread.interrupt ();
+ ((ClasspathToolkit) Toolkit.getDefaultToolkit()).wakeNativeQueue();
+ setShutdown(true);
dispatchThread = null;
+ this.notifyAll();
}
}
}
diff --git a/libjava/java/awt/Frame.java b/libjava/java/awt/Frame.java
index 80d2c99ae4d..465a26814e3 100644
--- a/libjava/java/awt/Frame.java
+++ b/libjava/java/awt/Frame.java
@@ -39,8 +39,16 @@ exception statement from your version. */
package java.awt;
import java.awt.peer.FramePeer;
+import java.lang.ref.WeakReference;
+import java.util.ArrayList;
+import java.util.Iterator;
import java.util.Vector;
+import javax.accessibility.AccessibleContext;
+import javax.accessibility.AccessibleRole;
+import javax.accessibility.AccessibleState;
+import javax.accessibility.AccessibleStateSet;
+
/**
* This class is a top-level window with a title bar and window
* decorations.
@@ -196,7 +204,7 @@ private String title = "";
*/
private boolean undecorated = false;
-/*
+ /*
* The number used to generate the name returned by getName.
*/
private static transient long next_frame_number;
@@ -209,6 +217,7 @@ public
Frame()
{
this("");
+ noteFrame(this);
}
/**
@@ -224,6 +233,7 @@ Frame(String title)
this.title = title;
// Top-level frames are initially invisible.
visible = false;
+ noteFrame(this);
}
public
@@ -231,6 +241,7 @@ Frame(GraphicsConfiguration gc)
{
super(gc);
visible = false;
+ noteFrame(this);
}
public
@@ -239,6 +250,7 @@ Frame(String title, GraphicsConfiguration gc)
super(gc);
setTitle(title);
visible = false;
+ noteFrame(this);
}
/**
@@ -391,6 +403,12 @@ remove(MenuComponent menu)
/**
* Notifies this frame that it should create its native peer.
*/
+
+private static void fireDummyEvent()
+{
+ EventQueue.invokeLater(new Runnable() { public void run() { } });
+}
+
public void
addNotify()
{
@@ -398,6 +416,12 @@ addNotify()
menuBar.addNotify();
if (peer == null)
peer = getToolkit ().createFrame (this);
+
+ // We now know there's a Frame (us) with a live peer, so we can start the
+ // fundamental queue and dispatch thread, by inserting a dummy event.
+ if (parent != null && parent.isDisplayable())
+ fireDummyEvent();
+
super.addNotify();
}
@@ -406,15 +430,21 @@ public void removeNotify()
if (menuBar != null)
menuBar.removeNotify();
super.removeNotify();
+
+ // By now we've been disconnected from the peer, and the peer set to
+ // null. This is formally the same as saying "we just became
+ // un-displayable", so we wake up the event queue with a dummy event to
+ // see if it's time to shut down.
+ fireDummyEvent();
}
-/**
- * Returns a debugging string describing this window.
- *
- * @return A debugging string describing this window.
- */
+ /**
+ * Returns a debugging string describing this window.
+ *
+ * @return A debugging string describing this window.
+ */
protected String paramString ()
-{
+ {
String title = getTitle ();
String resizable = "";
@@ -442,15 +472,43 @@ public void removeNotify()
}
return super.paramString () + ",title=" + title + resizable + state;
+ }
+
+private static ArrayList weakFrames = new ArrayList();
+
+private static void noteFrame(Frame f)
+{
+ weakFrames.add(new WeakReference(f));
}
-public static Frame[]
-getFrames()
+public static Frame[] getFrames()
{
- //Frame[] array = new Frames[frames.size()];
- //return frames.toArray(array);
- String msg = "FIXME: can't be implemented without weak references";
- throw new UnsupportedOperationException(msg);
+ int n = 0;
+ synchronized (weakFrames)
+ {
+ Iterator i = weakFrames.iterator();
+ while (i.hasNext())
+ {
+ WeakReference wr = (WeakReference) i.next();
+ if (wr.get() != null)
+ ++n;
+ }
+ if (n == 0)
+ return new Frame[0];
+ else
+ {
+ Frame[] frames = new Frame[n];
+ n = 0;
+ i = weakFrames.iterator();
+ while (i.hasNext())
+ {
+ WeakReference wr = (WeakReference) i.next();
+ if (wr.get() != null)
+ frames[n++] = (Frame) wr.get();
+ }
+ return frames;
+ }
+ }
}
public void setState (int state)
@@ -549,4 +607,37 @@ getFrames()
{
return next_frame_number++;
}
+
+ protected class AccessibleAWTFrame extends AccessibleAWTWindow
+ {
+ public AccessibleRole getAccessibleRole()
+ {
+ return AccessibleRole.FRAME;
+ }
+
+ public AccessibleStateSet getAccessibleState()
+ {
+ AccessibleStateSet states = super.getAccessibleStateSet();
+ if (isResizable())
+ states.add(AccessibleState.RESIZABLE);
+ if ((state & ICONIFIED) != 0)
+ states.add(AccessibleState.ICONIFIED);
+ return states;
+ }
+ }
+
+ /**
+ * Gets the AccessibleContext associated with this <code>Frame</code>.
+ * The context is created, if necessary.
+ *
+ * @return the associated context
+ */
+ public AccessibleContext getAccessibleContext()
+ {
+ /* Create the context if this is the first request */
+ if (accessibleContext == null)
+ accessibleContext = new AccessibleAWTFrame();
+ return accessibleContext;
+ }
+
}
diff --git a/libjava/java/awt/Label.java b/libjava/java/awt/Label.java
index 189bc10a756..0206ceca9af 100644
--- a/libjava/java/awt/Label.java
+++ b/libjava/java/awt/Label.java
@@ -306,10 +306,7 @@ public AccessibleContext getAccessibleContext()
{
/* Create the context if this is the first request */
if (accessibleContext == null)
- {
- /* Create the context */
- accessibleContext = new AccessibleAWTLabel();
- }
+ accessibleContext = new AccessibleAWTLabel();
return accessibleContext;
}
diff --git a/libjava/java/awt/List.java b/libjava/java/awt/List.java
index 8fbbc07720e..e10cbaeeebf 100644
--- a/libjava/java/awt/List.java
+++ b/libjava/java/awt/List.java
@@ -47,6 +47,11 @@ import java.util.EventListener;
import java.util.Vector;
import javax.accessibility.Accessible;
+import javax.accessibility.AccessibleContext;
+import javax.accessibility.AccessibleRole;
+import javax.accessibility.AccessibleSelection;
+import javax.accessibility.AccessibleState;
+import javax.accessibility.AccessibleStateSet;
/**
* Class that implements a listbox widget
@@ -106,6 +111,7 @@ private ItemListener item_listeners;
// The list of ActionListeners for this object.
private ActionListener action_listeners;
+
/*************************************************************************/
/*
@@ -1076,4 +1082,182 @@ paramString()
{
return (ItemListener[]) getListeners (ItemListener.class);
}
+
+ // Accessibility internal class
+ protected class AccessibleAWTList extends AccessibleAWTComponent
+ implements AccessibleSelection, ItemListener, ActionListener
+ {
+ protected class AccessibleAWTListChild extends AccessibleAWTComponent
+ implements Accessible
+ {
+ private int index;
+ private List parent;
+
+ public AccessibleAWTListChild(List parent, int indexInParent)
+ {
+ this.parent = parent;
+ index = indexInParent;
+ if (parent == null)
+ index = -1;
+ }
+
+ /* (non-Javadoc)
+ * @see javax.accessibility.Accessible#getAccessibleContext()
+ */
+ public AccessibleContext getAccessibleContext()
+ {
+ return this;
+ }
+
+ public AccessibleRole getAccessibleRole()
+ {
+ return AccessibleRole.LIST_ITEM;
+ }
+
+ public AccessibleStateSet getAccessibleStateSet()
+ {
+ AccessibleStateSet states = super.getAccessibleStateSet();
+ if (parent.isIndexSelected(index))
+ states.add(AccessibleState.SELECTED);
+ return states;
+ }
+
+ public int getAccessibleIndexInParent()
+ {
+ return index;
+ }
+
+ }
+
+ public AccessibleAWTList()
+ {
+ addItemListener(this);
+ addActionListener(this);
+ }
+
+ public AccessibleRole getAccessibleRole()
+ {
+ return AccessibleRole.LIST;
+ }
+
+ public AccessibleStateSet getAccessibleStateSet()
+ {
+ AccessibleStateSet states = super.getAccessibleStateSet();
+ states.add(AccessibleState.SELECTABLE);
+ if (isMultipleMode())
+ states.add(AccessibleState.MULTISELECTABLE);
+ return states;
+ }
+
+ public int getAccessibleChildrenCount()
+ {
+ return getItemCount();
+ }
+
+ public Accessible getAccessibleChild(int i)
+ {
+ if (i >= getItemCount())
+ return null;
+ return new AccessibleAWTListChild(List.this, i);
+ }
+
+ /* (non-Javadoc)
+ * @see javax.accessibility.AccessibleSelection#getAccessibleSelectionCount()
+ */
+ public int getAccessibleSelectionCount()
+ {
+ return getSelectedIndexes().length;
+ }
+
+ /* (non-Javadoc)
+ * @see javax.accessibility.AccessibleSelection#getAccessibleSelection()
+ */
+ public AccessibleSelection getAccessibleSelection()
+ {
+ return this;
+ }
+
+ /* (non-Javadoc)
+ * @see javax.accessibility.AccessibleSelection#getAccessibleSelection(int)
+ */
+ public Accessible getAccessibleSelection(int i)
+ {
+ int[] items = getSelectedIndexes();
+ if (i >= items.length)
+ return null;
+ return new AccessibleAWTListChild(List.this, items[i]);
+ }
+
+ /* (non-Javadoc)
+ * @see javax.accessibility.AccessibleSelection#isAccessibleChildSelected(int)
+ */
+ public boolean isAccessibleChildSelected(int i)
+ {
+ return isIndexSelected(i);
+ }
+
+ /* (non-Javadoc)
+ * @see javax.accessibility.AccessibleSelection#addAccessibleSelection(int)
+ */
+ public void addAccessibleSelection(int i)
+ {
+ select(i);
+ }
+
+ /* (non-Javadoc)
+ * @see javax.accessibility.AccessibleSelection#removeAccessibleSelection(int)
+ */
+ public void removeAccessibleSelection(int i)
+ {
+ deselect(i);
+ }
+
+ /* (non-Javadoc)
+ * @see javax.accessibility.AccessibleSelection#clearAccessibleSelection()
+ */
+ public void clearAccessibleSelection()
+ {
+ for (int i = 0; i < getItemCount(); i++)
+ deselect(i);
+ }
+
+ /* (non-Javadoc)
+ * @see javax.accessibility.AccessibleSelection#selectAllAccessibleSelection()
+ */
+ public void selectAllAccessibleSelection()
+ {
+ if (isMultipleMode())
+ for (int i = 0; i < getItemCount(); i++)
+ select(i);
+ }
+
+ /* (non-Javadoc)
+ * @see java.awt.event.ItemListener#itemStateChanged(java.awt.event.ItemEvent)
+ */
+ public void itemStateChanged(ItemEvent event)
+ {
+ }
+
+ /* (non-Javadoc)
+ * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
+ */
+ public void actionPerformed(ActionEvent event)
+ {
+ }
+
+ }
+
+ /**
+ * Gets the AccessibleContext associated with this <code>List</code>.
+ * The context is created, if necessary.
+ *
+ * @return the associated context
+ */
+ public AccessibleContext getAccessibleContext()
+ {
+ /* Create the context if this is the first request */
+ if (accessibleContext == null)
+ accessibleContext = new AccessibleAWTList();
+ return accessibleContext;
+ }
} // class List
diff --git a/libjava/java/awt/Menu.java b/libjava/java/awt/Menu.java
index 35798a066df..3cc9cc301ae 100644
--- a/libjava/java/awt/Menu.java
+++ b/libjava/java/awt/Menu.java
@@ -451,12 +451,18 @@ paramString()
}
}
- /* (non-Javadoc)
- * @see java.awt.MenuComponent#getAccessibleContext()
+ /**
+ * Gets the AccessibleContext associated with this <code>Menu</code>.
+ * The context is created, if necessary.
+ *
+ * @return the associated context
*/
public AccessibleContext getAccessibleContext()
{
- return new AccessibleAWTMenu();
+ /* Create the context if this is the first request */
+ if (accessibleContext == null)
+ accessibleContext = new AccessibleAWTMenu();
+ return accessibleContext;
}
} // class Menu
diff --git a/libjava/java/awt/MenuBar.java b/libjava/java/awt/MenuBar.java
index 6a97fa95685..c040235c535 100644
--- a/libjava/java/awt/MenuBar.java
+++ b/libjava/java/awt/MenuBar.java
@@ -381,10 +381,7 @@ public AccessibleContext getAccessibleContext()
{
/* Create the context if this is the first request */
if (accessibleContext == null)
- {
- /* Create the context */
- accessibleContext = new AccessibleAWTMenuBar();
- }
+ accessibleContext = new AccessibleAWTMenuBar();
return accessibleContext;
}
diff --git a/libjava/java/awt/MenuComponent.java b/libjava/java/awt/MenuComponent.java
index 78adfaea6e3..db6d4bd976e 100644
--- a/libjava/java/awt/MenuComponent.java
+++ b/libjava/java/awt/MenuComponent.java
@@ -130,7 +130,7 @@ private static final long serialVersionUID = -4536902356223894379L;
* @see #getAccessibleContext()
* @serial the accessibility information for this component.
*/
- private AccessibleContext accessibleContext;
+ AccessibleContext accessibleContext;
/**
* Was the name of the component set? This value defaults
diff --git a/libjava/java/awt/MenuItem.java b/libjava/java/awt/MenuItem.java
index a58774240ff..56082d36a9a 100644
--- a/libjava/java/awt/MenuItem.java
+++ b/libjava/java/awt/MenuItem.java
@@ -47,6 +47,7 @@ import java.util.EventListener;
import javax.accessibility.Accessible;
import javax.accessibility.AccessibleAction;
+import javax.accessibility.AccessibleContext;
import javax.accessibility.AccessibleRole;
import javax.accessibility.AccessibleValue;
@@ -562,7 +563,10 @@ protected void
processActionEvent(ActionEvent event)
{
if (action_listeners != null)
- action_listeners.actionPerformed(event);
+ {
+ event.setSource(this);
+ action_listeners.actionPerformed(event);
+ }
}
/*************************************************************************/
@@ -579,7 +583,18 @@ paramString()
",actionCommand=" + actionCommand + "," + super.paramString());
}
-// Accessibility API not yet implemented.
-// public AccessibleContext getAccessibleContext()
+/**
+ * Gets the AccessibleContext associated with this <code>MenuItem</code>.
+ * The context is created, if necessary.
+ *
+ * @return the associated context
+ */
+public AccessibleContext getAccessibleContext()
+{
+ /* Create the context if this is the first request */
+ if (accessibleContext == null)
+ accessibleContext = new AccessibleAWTMenuItem();
+ return accessibleContext;
+}
} // class MenuItem
diff --git a/libjava/java/awt/PopupMenu.java b/libjava/java/awt/PopupMenu.java
index 75082029186..92840dfa075 100644
--- a/libjava/java/awt/PopupMenu.java
+++ b/libjava/java/awt/PopupMenu.java
@@ -151,9 +151,18 @@ show(Component component, int x, int y)
}
+ /**
+ * Gets the AccessibleContext associated with this <code>PopupMenu</code>.
+ * The context is created, if necessary.
+ *
+ * @return the associated context
+ */
public AccessibleContext getAccessibleContext()
{
- return new AccessibleAWTPopupMenu();
+ /* Create the context if this is the first request */
+ if (accessibleContext == null)
+ accessibleContext = new AccessibleAWTPopupMenu();
+ return accessibleContext;
}
} // class PopupMenu
diff --git a/libjava/java/awt/Robot.java b/libjava/java/awt/Robot.java
index f633fc0b354..49726c8a192 100644
--- a/libjava/java/awt/Robot.java
+++ b/libjava/java/awt/Robot.java
@@ -1,5 +1,5 @@
-/* Robot.java --
- Copyright (C) 2002 Free Software Foundation, Inc.
+/* Robot.java -- a native input event generator
+ Copyright (C) 2004, 2005 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -38,112 +38,384 @@ exception statement from your version. */
package java.awt;
+import gnu.java.awt.ClasspathToolkit;
+
+import java.awt.event.InputEvent;
import java.awt.image.BufferedImage;
+import java.awt.peer.RobotPeer;
/**
+ * The Robot class is used to simulate user interaction with graphical
+ * programs. It can generate native windowing system input events and
+ * retrieve image data from the current screen. Robot is used to test
+ * the AWT and Swing library implementations; it can also be used to
+ * create self-running demo programs.
+ *
+ * Since Robot generates native windowing system events, rather than
+ * simply inserting {@link AWTEvents} on the AWT event queue, its use
+ * is not restricted to Java programs. It can be to programatically
+ * drive any graphical application.
+ *
+ * This implementation requires an X server that supports the XTest
+ * extension.
+ *
+ * @author Thomas Fitzsimmons (fitzsim@redhat.com)
+ *
* @since 1.3
*/
-/** STUB CLASS ONLY */
public class Robot
{
- private GraphicsDevice screen;
private boolean waitForIdle;
private int autoDelay;
-
+ private RobotPeer peer;
+
/**
- * Creates a <code>Robot</code> object.
- *
- * @exception AWTException If GraphicsEnvironment.isHeadless() returns true.
- * @exception SecurityException If createRobot permission is not granted.
+ * Construct a Robot object that operates on the default screen.
+ *
+ * @exception AWTException if GraphicsEnvironment.isHeadless()
+ * returns true or if the X server does not support the XTest
+ * extension
+ * @exception SecurityException if createRobot permission is not
+ * granted
*/
- public Robot() throws AWTException
+ public Robot () throws AWTException
{
- throw new Error("not implemented");
+ if (GraphicsEnvironment.isHeadless ())
+ throw new AWTException ("Robot: headless graphics environment");
+
+ SecurityManager sm = System.getSecurityManager ();
+ if (sm != null)
+ sm.checkPermission (new AWTPermission ("createRobot"));
+
+ ClasspathToolkit tk = (ClasspathToolkit) Toolkit.getDefaultToolkit ();
+
+ // createRobot will throw AWTException if XTest is not supported.
+ peer = tk.createRobot (GraphicsEnvironment.getLocalGraphicsEnvironment ()
+ .getDefaultScreenDevice ());
}
/**
- * Creates a <code>Robot</code> object.
- *
- * @exception AWTException If GraphicsEnvironment.isHeadless() returns true.
- * @exception IllegalArgumentException If <code>screen</code> is not a screen
- * GraphicsDevice.
- * @exception SecurityException If createRobot permission is not granted.
+ * Construct a Robot object that operates on the specified screen.
+ *
+ * @exception AWTException if GraphicsEnvironment.isHeadless()
+ * returns true or if the X server does not support the XTest
+ * extension
+ * @exception IllegalArgumentException if screen is not a screen
+ * GraphicsDevice
+ * @exception SecurityException if createRobot permission is not
+ * granted
*/
- public Robot(GraphicsDevice screen) throws AWTException
+ public Robot (GraphicsDevice screen) throws AWTException
{
- this();
- this.screen = screen;
+ if (GraphicsEnvironment.isHeadless ())
+ throw new AWTException ("Robot: headless graphics environment");
+
+ if (screen.getType () != GraphicsDevice.TYPE_RASTER_SCREEN)
+ throw new IllegalArgumentException ("Robot: graphics"
+ + " device is not a screen");
+
+ SecurityManager sm = System.getSecurityManager ();
+ if (sm != null)
+ sm.checkPermission (new AWTPermission ("createRobot"));
+
+ ClasspathToolkit tk = (ClasspathToolkit) Toolkit.getDefaultToolkit ();
+
+ // createRobot will throw AWTException if XTest is not supported.
+ peer = tk.createRobot (screen);
}
+ /**
+ * Move the mouse pointer to absolute coordinates (x, y).
+ *
+ * @param x the destination x coordinate
+ * @param y the destination y coordinate
+ */
public void mouseMove(int x, int y)
{
+ peer.mouseMove (x, y);
+
+ if (waitForIdle)
+ waitForIdle ();
+
+ if (autoDelay > 0)
+ delay (autoDelay);
}
- public void mousePress(int buttons)
+ /**
+ * Press one or more mouse buttons.
+ *
+ * @param buttons the buttons to press; a bitmask of one or more of
+ * these {@link InputEvent} fields:
+ *
+ * <ul>
+ * <li>BUTTON1_MASK</li>
+ * <li>BUTTON2_MASK</li>
+ * <li>BUTTON3_MASK</li>
+ * </ul>
+ *
+ * @exception IllegalArgumentException if the button mask is invalid
+ */
+ public void mousePress (int buttons)
{
+ if ((buttons & InputEvent.BUTTON1_MASK) == 0
+ && (buttons & InputEvent.BUTTON2_MASK) == 0
+ && (buttons & InputEvent.BUTTON3_MASK) == 0)
+ throw new IllegalArgumentException ("Robot: mousePress:"
+ + " invalid button mask");
+
+ peer.mousePress (buttons);
+
+ if (waitForIdle)
+ waitForIdle ();
+
+ if (autoDelay > 0)
+ delay (autoDelay);
}
+ /**
+ * Release one or more mouse buttons.
+ *
+ * @param buttons the buttons to release; a bitmask of one or more
+ * of these {@link InputEvent} fields:
+ *
+ * <ul>
+ * <li>BUTTON1_MASK</li>
+ * <li>BUTTON2_MASK</li>
+ * <li>BUTTON3_MASK</li>
+ * </ul>
+ *
+ * @exception IllegalArgumentException if the button mask is invalid
+ */
public void mouseRelease(int buttons)
{
+ if ((buttons & InputEvent.BUTTON1_MASK) == 0
+ && (buttons & InputEvent.BUTTON2_MASK) == 0
+ && (buttons & InputEvent.BUTTON3_MASK) == 0)
+ throw new IllegalArgumentException ("Robot: mouseRelease:"
+ + " invalid button mask");
+
+ peer.mouseRelease (buttons);
+
+ if (waitForIdle)
+ waitForIdle ();
+
+ if (autoDelay > 0)
+ delay (autoDelay);
}
- public void mouseWheel(int wheelAmt)
+ /**
+ * Rotate the mouse scroll wheel.
+ *
+ * @param wheelAmt number of steps to rotate mouse wheel. negative
+ * to rotate wheel up (away from the user), positive to rotate wheel
+ * down (toward the user).
+ *
+ * @since 1.4
+ */
+ public void mouseWheel (int wheelAmt)
{
+ peer.mouseWheel (wheelAmt);
+
+ if (waitForIdle)
+ waitForIdle ();
+
+ if (autoDelay > 0)
+ delay (autoDelay);
}
- public void keyPress(int keycode)
+ /**
+ * Press a key.
+ *
+ * @param keycode key to press, a {@link KeyEvent} VK_ constant
+ *
+ * @exception IllegalArgumentException if keycode is not a valid key
+ */
+ public void keyPress (int keycode)
{
+ peer.keyPress (keycode);
+
+ if (waitForIdle)
+ waitForIdle ();
+
+ if (autoDelay > 0)
+ delay (autoDelay);
}
- public void keyRelease(int keycode)
+ /**
+ * Release a key.
+ *
+ * @param keycode key to release, a {@link KeyEvent} VK_ constant
+ *
+ * @exception IllegalArgumentException if keycode is not a valid key
+ */
+ public void keyRelease (int keycode)
{
+ peer.keyRelease (keycode);
+
+ if (waitForIdle)
+ waitForIdle ();
+
+ if (autoDelay > 0)
+ delay (autoDelay);
}
-
- public Color getPixelColor(int x, int y)
+
+ /**
+ * Return the color of the pixel at the given screen coordinates.
+ *
+ * @param x the x coordinate of the pixel
+ * @param y the y coordinate of the pixel
+ *
+ * @return the Color of the pixel at screen coodinates <code>(x, y)</code>
+ */
+ public Color getPixelColor (int x, int y)
{
- return null;
+ return new Color (peer.getRGBPixel (x, y));
}
- public BufferedImage createScreenCapture(Rectangle screen)
+ /**
+ * Create an image containing pixels read from the screen. The
+ * image does not include the mouse pointer.
+ *
+ * @param screenRect the rectangle of pixels to capture, in screen
+ * coordinates
+ *
+ * @return a BufferedImage containing the requested pixels
+ *
+ * @exception IllegalArgumentException if requested width and height
+ * are not both greater than zero
+ * @exception SecurityException if readDisplayPixels permission is
+ * not granted
+ */
+ public BufferedImage createScreenCapture (Rectangle screenRect)
{
- return null;
+ if (screenRect.width <= 0)
+ throw new IllegalArgumentException ("Robot: capture width is <= 0");
+
+ if (screenRect.height <= 0)
+ throw new IllegalArgumentException ("Robot: capture height is <= 0");
+
+ SecurityManager sm = System.getSecurityManager ();
+ if (sm != null)
+ sm.checkPermission (new AWTPermission ("readDisplayPixels"));
+
+ int[] pixels = peer.getRGBPixels (screenRect);
+
+ BufferedImage bufferedImage =
+ new BufferedImage (screenRect.width, screenRect.height,
+ BufferedImage.TYPE_INT_ARGB);
+
+ bufferedImage.setRGB (0, 0, screenRect.width, screenRect.height,
+ pixels, 0, screenRect.width);
+
+ return bufferedImage;
}
-
- public boolean isAutoWaitForIdle()
+
+ /**
+ * Check if this Robot automatically calls {@link waitForIdle} after
+ * generating an event.
+ *
+ * @return true if waitForIdle is automatically called
+ */
+ public boolean isAutoWaitForIdle ()
{
return waitForIdle;
}
-
- public void setAutoWaitForIdle(boolean value)
+
+ /**
+ * Set whether or not this Robot automatically calls {@link
+ * waitForIdle} after generating an event.
+ *
+ * @param isOn true if waitForIdle should be called automatically
+ */
+ public void setAutoWaitForIdle (boolean isOn)
{
- waitForIdle = value;
+ waitForIdle = isOn;
}
-
- public int getAutoDelay()
+
+ /**
+ * Retrieve the length of time this Robot sleeps after generating an
+ * event.
+ *
+ * @return the length of time in milliseconds
+ */
+ public int getAutoDelay ()
{
return autoDelay;
}
-
- public void setAutoDelay(int ms)
+
+ /**
+ * Set the length of time this Robot sleeps after generating an
+ * event.
+ *
+ * @param ms the length of time in milliseconds
+ *
+ * @exception IllegalArgumentException if ms is not between 0 and
+ * 60,000 milliseconds inclusive
+ */
+ public void setAutoDelay (int ms)
{
- if (ms < 0 || ms > 60000)
- throw new IllegalArgumentException();
-
+ if (ms <= 0 || ms >= 60000)
+ throw new IllegalArgumentException ("Robot: delay length out-of-bounds");
+
autoDelay = ms;
}
- public void delay(int ms)
+ /**
+ * Sleep for a specified length of time.
+ *
+ * @param ms the length of time in milliseconds
+ *
+ * @exception IllegalArgumentException if ms is not between 0 and
+ * 60,000 milliseconds inclusive
+ */
+ public void delay (int ms)
{
if (ms < 0 || ms > 60000)
- throw new IllegalArgumentException();
+ throw new IllegalArgumentException ("Robot: delay length out-of-bounds");
+
+ try
+ {
+ Thread.sleep (ms);
+ }
+ catch (InterruptedException e)
+ {
+ System.err.println ("Robot: delay interrupted");
+ }
}
- public void waitForIdle()
+ /**
+ * Wait until the event dispatch thread is idle.
+ */
+ public void waitForIdle ()
{
+ if (EventQueue.isDispatchThread ())
+ throw new IllegalThreadStateException ("Robot: waitForIdle called from "
+ + "the event dispatch thread");
+
+ EventQueue q = Toolkit.getDefaultToolkit ().getSystemEventQueue ();
+
+ while (q.peekEvent () != null)
+ {
+ try
+ {
+ wait ();
+ }
+ catch (InterruptedException e)
+ {
+ System.err.println ("Robot: waitForIdle interrupted");
+ }
+ }
}
- public String toString()
+ /**
+ * Return a string representation of this Robot.
+ *
+ * @return a string representation
+ */
+ public String toString ()
{
- return "unimplemented";
+ return getClass ().getName ()
+ + "[ autoDelay = " + autoDelay + ", autoWaitForIdle = "
+ + waitForIdle + " ]";
}
-} // class Robot
+}
diff --git a/libjava/java/awt/ScrollPane.java b/libjava/java/awt/ScrollPane.java
index abd5514d8e3..c38feb339c5 100644
--- a/libjava/java/awt/ScrollPane.java
+++ b/libjava/java/awt/ScrollPane.java
@@ -43,6 +43,8 @@ import java.awt.peer.ComponentPeer;
import java.awt.peer.ScrollPanePeer;
import javax.accessibility.Accessible;
+import javax.accessibility.AccessibleContext;
+import javax.accessibility.AccessibleRole;
/**
* This widget provides a scrollable region that allows a single
@@ -587,5 +589,27 @@ paramString()
{
wheelScrollingEnabled = enable;
}
+
+ protected class AccessibleAWTScrollPane extends AccessibleAWTContainer
+ {
+ public AccessibleRole getAccessibleRole()
+ {
+ return AccessibleRole.SCROLL_PANE;
+ }
+ }
+
+ /**
+ * Gets the AccessibleContext associated with this <code>ScrollPane</code>.
+ * The context is created, if necessary.
+ *
+ * @return the associated context
+ */
+ public AccessibleContext getAccessibleContext()
+ {
+ /* Create the context if this is the first request */
+ if (accessibleContext == null)
+ accessibleContext = new AccessibleAWTScrollPane();
+ return accessibleContext;
+ }
} // class ScrollPane
diff --git a/libjava/java/awt/Scrollbar.java b/libjava/java/awt/Scrollbar.java
index 7cc97153796..9141ea53e6d 100644
--- a/libjava/java/awt/Scrollbar.java
+++ b/libjava/java/awt/Scrollbar.java
@@ -1,5 +1,5 @@
/* Scrollbar.java -- AWT Scrollbar widget
- Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004
+ Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005
Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -45,694 +45,603 @@ import java.awt.peer.ScrollbarPeer;
import java.util.EventListener;
import javax.accessibility.Accessible;
-
-/**
- * This class implements a scrollbar widget.
- *
- * @author Aaron M. Renn (arenn@urbanophile.com)
- * @author Tom Tromey <tromey@cygnus.com>
- */
-public class Scrollbar extends Component implements Accessible,
- Adjustable
-{
-
-// FIXME: Serialization readObject/writeObject
-
-/*
- * Static Variables
+import javax.accessibility.AccessibleContext;
+import javax.accessibility.AccessibleRole;
+import javax.accessibility.AccessibleState;
+import javax.accessibility.AccessibleStateSet;
+import javax.accessibility.AccessibleValue;
+
+/**
+ * This class implements a scrollbar widget.
+ *
+ * @author Aaron M. Renn (arenn@urbanophile.com)
+ * @author Tom Tromey (tromey@cygnus.com)
+ * @author Andrew John Hughes (gnu_andrew@member.fsf.org)
*/
+public class Scrollbar extends Component implements Accessible, Adjustable
+{
+ // FIXME: Serialization readObject/writeObject
-/**
- * Constant indicating that a scrollbar is horizontal.
- */
-public static final int HORIZONTAL = 0;
-
-/**
- * Constant indicating that a scrollbar is vertical.
- */
-public static final int VERTICAL = 1;
+ /**
+ * Constant indicating that a scrollbar is horizontal.
+ */
+ public static final int HORIZONTAL = 0;
-// Serialization Constant
-private static final long serialVersionUID = 8451667562882310543L;
+ /**
+ * Constant indicating that a scrollbar is vertical.
+ */
+ public static final int VERTICAL = 1;
-/*************************************************************************/
+ /**
+ * Serialization Constant.
+ */
+ private static final long serialVersionUID = 8451667562882310543L;
-/**
- * @serial The amount by which the value of the scrollbar is changed
- * when incrementing in line mode.
- */
-private int lineIncrement;
+ /**
+ * @serial The amount by which the value of the scrollbar is changed
+ * when incrementing in line mode.
+ */
+ private int lineIncrement;
-/**
- * @serial The amount by which the value of the scrollbar is changed
- * when incrementing in page mode.
- */
-private int pageIncrement;
+ /**
+ * @serial The amount by which the value of the scrollbar is changed
+ * when incrementing in page mode.
+ */
+ private int pageIncrement;
-/**
- * @serial The maximum value for this scrollbar
- */
-private int maximum;
+ /**
+ * @serial The maximum value for this scrollbar
+ */
+ private int maximum;
-/**
- * @serial The minimum value for this scrollbar
- */
-private int minimum;
+ /**
+ * @serial The minimum value for this scrollbar
+ */
+ private int minimum;
-/**
- * @serial The orientation of this scrollbar, which will be either
- * the <code>HORIZONTAL</code> or <code>VERTICAL</code> constant
- * from this class.
- */
-private int orientation;
+ /**
+ * @serial The orientation of this scrollbar, which will be either
+ * the <code>HORIZONTAL</code> or <code>VERTICAL</code> constant
+ * from this class.
+ */
+ private int orientation;
-/**
- * @serial The current value of this scrollbar.
- */
-private int value;
+ /**
+ * @serial The current value of this scrollbar.
+ */
+ private int value;
-/**
- * @serial The width of the scrollbar's thumb, which is relative
- * to the minimum and maximum value of the scrollbar.
- */
-private int visibleAmount;
+ /**
+ * @serial The width of the scrollbar's thumb, which is relative
+ * to the minimum and maximum value of the scrollbar.
+ */
+ private int visibleAmount;
-// List of AdjustmentListener's.
-private AdjustmentListener adjustment_listeners;
+ /**
+ * List of AdjustmentListener's.
+ */
+ private AdjustmentListener adjustment_listeners;
-private transient boolean valueIsAdjusting = false;
+ /**
+ * true if the scrollbar is adjusting, false otherwise.
+ */
+ private transient boolean valueIsAdjusting = false;
- /*
+ /**
* The number used to generate the name returned by getName.
*/
private static transient long next_scrollbar_number;
-/*************************************************************************/
-
-/*
- * Constructors
- */
-
-/**
- * Initializes a new instance of <code>Scrollbar</code> with a
- * vertical orientation and default values for all other parameters.
- *
- * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true,
- */
-public
-Scrollbar()
-{
- this(VERTICAL);
-}
-
-/*************************************************************************/
-
-/**
- * Initializes a new instance of <code>Scrollbar</code> with the
- * specified orientation and default values for all other parameters.
- * The orientation must be either the constant <code>HORIZONTAL</code> or
- * <code>VERTICAL</code> from this class. An incorrect value will throw
- * an exception.
- *
- * @param orientation The orientation of this scrollbar.
- *
- * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true,
- * @exception IllegalArgumentException If the orientation value is not valid.
- */
-public
-Scrollbar(int orientation) throws IllegalArgumentException
-{
- this(orientation, 0, 10, 0, 100);
-}
-
-/*************************************************************************/
-
-/**
- * Initializes a new instance of <code>Scrollbar</code> with the
- * specified parameters. The orientation must be either the constant
- * <code>HORIZONTAL</code> or <code>VERTICAL</code>. An incorrect value
- * will throw an exception. Inconsistent values for other parameters
- * are silently corrected to valid values.
- *
- * @param orientation The orientation of this scrollbar.
- * @param value The initial value of the scrollbar.
- * @param visibleAmount The width of the scrollbar thumb.
- * @param minimum The minimum value of the scrollbar.
- * @param maximum The maximum value of the scrollbar.
- *
- * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true,
- * @exception IllegalArgumentException If the orientation value is not valid.
- */
-public
-Scrollbar(int orientation, int value, int visibleAmount, int minimum,
- int maximum) throws IllegalArgumentException
-{
- if (GraphicsEnvironment.isHeadless())
- throw new HeadlessException ();
-
- if ((orientation != HORIZONTAL) && (orientation != VERTICAL))
- throw new IllegalArgumentException("Bad orientation value: "
- + orientation);
-
- this.orientation = orientation;
-
- setValues(value, visibleAmount, minimum, maximum);
-
- // Default is 1 according to online docs.
- lineIncrement = 1;
-
- // Default is 10 according to javadocs.
- pageIncrement = 10;
-}
-
-/*************************************************************************/
-
-/*
- * Instance Methods
- */
-
-/**
- * Returns the orientation constant for this object.
- *
- * @return The orientation constant for this object.
- */
-public int
-getOrientation()
-{
- return(orientation);
-}
-
-/*************************************************************************/
-
-/**
- * Sets the orientation of this scrollbar to the specified value. This
- * value must be either the constant <code>HORIZONTAL</code> or
- * <code>VERTICAL</code> from this class or an exception will be thrown.
- *
- * @param orientation The new orientation value.
- *
- * @exception IllegalArgumentException If the orientation value is not valid.
- */
-public void
-setOrientation(int orientation)
-{
- if ((orientation != HORIZONTAL) && (orientation != VERTICAL))
- throw new IllegalArgumentException("Bad orientation value: "
- + orientation);
-
- // FIXME: Communicate to peer? Or must this be called before peer creation?
- this.orientation = orientation;
-}
-
-/*************************************************************************/
-
-/**
- * Returns the current value for this scrollbar.
- *
- * @return The current value for this scrollbar.
- */
-public int
-getValue()
-{
- return(value);
-}
-
-/*************************************************************************/
-
-/**
- * Sets the current value for this scrollbar to the specified value.
- * If this is inconsistent with the minimum and maximum values for this
- * scrollbar, the value is silently adjusted.
- *
- * @param value The new value for this scrollbar.
- */
-public void
-setValue(int value)
-{
- setValues(value, visibleAmount, minimum, maximum);
-}
-
-/*************************************************************************/
-
-/**
- * Returns the maximum value for this scrollbar.
- *
- * @return The maximum value for this scrollbar.
- */
-public int
-getMaximum()
-{
- return(maximum);
-}
-
-/*************************************************************************/
-
-/**
- * Sets the maximum value for this scrollbar to the specified value.
- * If the value is less than the current minimum value, it is silent
- * set to equal the minimum value.
- *
- * @param maximum The new maximum value for this scrollbar.
- */
-public void
-setMaximum(int maximum)
-{
- setValues(value, visibleAmount, minimum, maximum);
-}
-
-/*************************************************************************/
-
-/**
- * Returns the minimum value for this scrollbar.
- *
- * @return The minimum value for this scrollbar.
- */
-public int
-getMinimum()
-{
- return(minimum);
-}
-
-/*************************************************************************/
-
-/**
- * Sets the minimum value for this scrollbar to the specified value. If
- * this is not consistent with the current value and maximum, it is
- * silently adjusted to be consistent.
- *
- * @param minimum The new minimum value for this scrollbar.
- */
-public void
-setMinimum(int minimum)
-{
- setValues(value, visibleAmount, minimum, maximum);
-}
-
-/*************************************************************************/
-
-/**
- * Returns the width of the scrollbar's thumb, in units relative to the
- * maximum and minimum value of the scrollbar.
- *
- * @return The width of the scrollbar's thumb.
- */
-public int
-getVisibleAmount()
-{
- return getVisible ();
-}
-
-/*************************************************************************/
-
-/**
- * Returns the width of the scrollbar's thumb, in units relative to the
- * maximum and minimum value of the scrollbar.
- *
- * @return The width of the scrollbar's thumb.
- *
- * @deprecated This method is deprecated in favor of
- * <code>getVisibleAmount()</code>.
- */
-public int
-getVisible()
-{
- return visibleAmount;
-}
-
-/*************************************************************************/
-
-/**
- * Sets the width of the scrollbar's thumb, in units relative to the
- * maximum and minimum value of the scrollbar.
- *
- * @param visibleAmount The new visible amount value of the scrollbar.
- */
-public void
-setVisibleAmount(int visibleAmount)
-{
- setValues(value, visibleAmount, minimum, maximum);
-}
-
-/*************************************************************************/
-
-/**
- * Sets the current value, visible amount, minimum, and maximum for this
- * scrollbar. These values are adjusted to be internally consistent
- * if necessary.
- *
- * @param value The new value for this scrollbar.
- * @param visibleAmount The new visible amount for this scrollbar.
- * @param minimum The new minimum value for this scrollbar.
- * @param maximum The new maximum value for this scrollbar.
- */
-public synchronized void
-setValues(int value, int visibleAmount, int minimum, int maximum)
-{
- if (maximum < minimum)
- maximum = minimum;
-
- if (value < minimum)
- value = minimum;
-
- if (value > maximum)
- value = maximum;
-
- if (visibleAmount > maximum - minimum)
- visibleAmount = maximum - minimum;
-
- ScrollbarPeer peer = (ScrollbarPeer) getPeer ();
- if (peer != null
- && (this.value != value || this.visibleAmount != visibleAmount
- || this.minimum != minimum || this.maximum != maximum))
- peer.setValues(value, visibleAmount, minimum, maximum);
-
- this.value = value;
- this.visibleAmount = visibleAmount;
- this.minimum = minimum;
- this.maximum = maximum;
-
- int range = maximum - minimum;
- if (lineIncrement > range)
- {
- if (range == 0)
- lineIncrement = 1;
- else
- lineIncrement = range;
-
- if (peer != null)
- peer.setLineIncrement(lineIncrement);
- }
-
- if (pageIncrement > range)
- {
- if (range == 0)
- pageIncrement = 1;
- else
- pageIncrement = range;
-
- if (peer != null)
- peer.setPageIncrement(pageIncrement);
- }
-}
-
-/*************************************************************************/
+ /**
+ * Initializes a new instance of <code>Scrollbar</code> with a
+ * vertical orientation and default values for all other parameters.
+ *
+ * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true,
+ */
+ public Scrollbar()
+ {
+ this(VERTICAL);
+ }
-/**
- * Returns the value added or subtracted when the user activates the scrollbar
- * scroll by a "unit" amount.
- *
- * @return The unit increment value.
- */
-public int
-getUnitIncrement()
-{
- return getLineIncrement ();
-}
+ /**
+ * Initializes a new instance of <code>Scrollbar</code> with the
+ * specified orientation and default values for all other parameters.
+ * The orientation must be either the constant <code>HORIZONTAL</code> or
+ * <code>VERTICAL</code> from this class. An incorrect value will throw
+ * an exception.
+ *
+ * @param orientation The orientation of this scrollbar.
+ *
+ * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true,
+ * @exception IllegalArgumentException If the orientation value is not valid.
+ */
+ public Scrollbar(int orientation) throws IllegalArgumentException
+ {
+ this(orientation, 0, 10, 0, 100);
+ }
-/*************************************************************************/
+ /**
+ * Initializes a new instance of <code>Scrollbar</code> with the
+ * specified parameters. The orientation must be either the constant
+ * <code>HORIZONTAL</code> or <code>VERTICAL</code>. An incorrect value
+ * will throw an exception. Inconsistent values for other parameters
+ * are silently corrected to valid values.
+ *
+ * @param orientation The orientation of this scrollbar.
+ * @param value The initial value of the scrollbar.
+ * @param visibleAmount The width of the scrollbar thumb.
+ * @param minimum The minimum value of the scrollbar.
+ * @param maximum The maximum value of the scrollbar.
+ *
+ * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true,
+ * @exception IllegalArgumentException If the orientation value is not valid.
+ */
+ public Scrollbar(int orientation, int value, int visibleAmount, int minimum,
+ int maximum) throws IllegalArgumentException
+ {
+ if (GraphicsEnvironment.isHeadless())
+ throw new HeadlessException();
-/**
- * Returns the value added or subtracted when the user selects the scrollbar
- * scroll by a "unit" amount control.
- *
- * @return The unit increment value.
- *
- * @deprecated This method is deprecated in favor of
- * <code>getUnitIncrement()</code>.
- */
-public int
-getLineIncrement()
-{
- return lineIncrement;
-}
+ if ((orientation != HORIZONTAL) && (orientation != VERTICAL))
+ throw new IllegalArgumentException("Bad orientation value: "
+ + orientation);
-/*************************************************************************/
+ this.orientation = orientation;
-/**
- * Sets the value added or subtracted to the scrollbar value when the
- * user selects the scroll by a "unit" amount control.
- *
- * @param unitIncrement The new unit increment amount.
- */
-public synchronized void
-setUnitIncrement(int unitIncrement)
-{
- setLineIncrement (unitIncrement);
-}
+ setValues(value, visibleAmount, minimum, maximum);
-/*************************************************************************/
+ // Default is 1 according to online docs.
+ lineIncrement = 1;
-/**
- * Sets the value added or subtracted to the scrollbar value when the
- * user selects the scroll by a "unit" amount control.
- *
- * @param lineIncrement The new unit increment amount.
- *
- * @deprecated This method is deprecated in favor of
- * <code>setUnitIncrement()</code>.
- */
-public void
-setLineIncrement(int lineIncrement)
-{
- if (lineIncrement < 0)
- throw new IllegalArgumentException ("Unit increment less than zero.");
+ // Default is 10 according to javadocs.
+ pageIncrement = 10;
+ }
- int range = maximum - minimum;
- if (lineIncrement > range)
- {
- if (range == 0)
- lineIncrement = 1;
- else
- lineIncrement = range;
- }
+ /**
+ * Returns the orientation constant for this object.
+ *
+ * @return The orientation constant for this object.
+ */
+ public int getOrientation()
+ {
+ return orientation;
+ }
- if (lineIncrement == this.lineIncrement)
- return;
+ /**
+ * Sets the orientation of this scrollbar to the specified value. This
+ * value must be either the constant <code>HORIZONTAL</code> or
+ * <code>VERTICAL</code> from this class or an exception will be thrown.
+ *
+ * @param orientation The new orientation value.
+ *
+ * @exception IllegalArgumentException If the orientation value is not valid.
+ */
+ public void setOrientation(int orientation)
+ {
+ if ((orientation != HORIZONTAL) && (orientation != VERTICAL))
+ throw new IllegalArgumentException("Bad orientation value: "
+ + orientation);
- this.lineIncrement = lineIncrement;
+ // FIXME: Communicate to peer? Or must this be called before peer creation?
+ this.orientation = orientation;
+ }
- ScrollbarPeer peer = (ScrollbarPeer) getPeer ();
- if (peer != null)
- peer.setLineIncrement (this.lineIncrement);
-}
+ /**
+ * Returns the current value for this scrollbar.
+ *
+ * @return The current value for this scrollbar.
+ */
+ public int getValue()
+ {
+ return value;
+ }
-/*************************************************************************/
+ /**
+ * Sets the current value for this scrollbar to the specified value.
+ * If this is inconsistent with the minimum and maximum values for this
+ * scrollbar, the value is silently adjusted.
+ *
+ * @param value The new value for this scrollbar.
+ */
+ public void setValue(int value)
+ {
+ setValues(value, visibleAmount, minimum, maximum);
+ }
-/**
- * Returns the value added or subtracted when the user activates the scrollbar
- * scroll by a "block" amount.
- *
- * @return The block increment value.
- */
-public int
-getBlockIncrement()
-{
- return getPageIncrement ();
-}
+ /**
+ * Returns the maximum value for this scrollbar.
+ *
+ * @return The maximum value for this scrollbar.
+ */
+ public int getMaximum()
+ {
+ return maximum;
+ }
-/*************************************************************************/
+ /**
+ * Sets the maximum value for this scrollbar to the specified value.
+ * If the value is less than the current minimum value, it is silent
+ * set to equal the minimum value.
+ *
+ * @param maximum The new maximum value for this scrollbar.
+ */
+ public void setMaximum(int maximum)
+ {
+ setValues(value, visibleAmount, minimum, maximum);
+ }
-/**
- * Returns the value added or subtracted when the user selects the scrollbar
- * scroll by a "block" amount control.
- *
- * @return The block increment value.
- *
- * @deprecated This method is deprecated in favor of
- * <code>getBlockIncrement()</code>.
- */
-public int
-getPageIncrement()
-{
- return pageIncrement;
-}
+ /**
+ * Returns the minimum value for this scrollbar.
+ *
+ * @return The minimum value for this scrollbar.
+ */
+ public int getMinimum()
+ {
+ return minimum;
+ }
-/*************************************************************************/
+ /**
+ * Sets the minimum value for this scrollbar to the specified value. If
+ * this is not consistent with the current value and maximum, it is
+ * silently adjusted to be consistent.
+ *
+ * @param minimum The new minimum value for this scrollbar.
+ */
+ public void setMinimum(int minimum)
+ {
+ setValues(value, visibleAmount, minimum, maximum);
+ }
-/**
- * Sets the value added or subtracted to the scrollbar value when the
- * user selects the scroll by a "block" amount control.
- *
- * @param blockIncrement The new block increment amount.
- */
-public synchronized void
-setBlockIncrement(int blockIncrement)
-{
- setPageIncrement (blockIncrement);
-}
+ /**
+ * Returns the width of the scrollbar's thumb, in units relative to the
+ * maximum and minimum value of the scrollbar.
+ *
+ * @return The width of the scrollbar's thumb.
+ */
+ public int getVisibleAmount()
+ {
+ return getVisible();
+ }
-/*************************************************************************/
+ /**
+ * Returns the width of the scrollbar's thumb, in units relative to the
+ * maximum and minimum value of the scrollbar.
+ *
+ * @return The width of the scrollbar's thumb.
+ *
+ * @deprecated This method is deprecated in favor of
+ * <code>getVisibleAmount()</code>.
+ */
+ public int getVisible()
+ {
+ return visibleAmount;
+ }
-/**
- * Sets the value added or subtracted to the scrollbar value when the
- * user selects the scroll by a "block" amount control.
- *
- * @param pageIncrement The new block increment amount.
- *
- * @deprecated This method is deprecated in favor of
- * <code>setBlockIncrement()</code>.
- */
-public void
-setPageIncrement(int pageIncrement)
-{
- if (pageIncrement < 0)
- throw new IllegalArgumentException ("Block increment less than zero.");
+ /**
+ * Sets the width of the scrollbar's thumb, in units relative to the
+ * maximum and minimum value of the scrollbar.
+ *
+ * @param visibleAmount The new visible amount value of the scrollbar.
+ */
+ public void setVisibleAmount(int visibleAmount)
+ {
+ setValues(value, visibleAmount, minimum, maximum);
+ }
- int range = maximum - minimum;
- if (pageIncrement > range)
- {
- if (range == 0)
- pageIncrement = 1;
- else
- pageIncrement = range;
- }
+ /**
+ * Sets the current value, visible amount, minimum, and maximum for this
+ * scrollbar. These values are adjusted to be internally consistent
+ * if necessary.
+ *
+ * @param value The new value for this scrollbar.
+ * @param visibleAmount The new visible amount for this scrollbar.
+ * @param minimum The new minimum value for this scrollbar.
+ * @param maximum The new maximum value for this scrollbar.
+ */
+ public synchronized void setValues(int value, int visibleAmount,
+ int minimum, int maximum)
+ {
+ if (maximum < minimum)
+ maximum = minimum;
+
+ if (value < minimum)
+ value = minimum;
+
+ if (value > maximum)
+ value = maximum;
+
+ if (visibleAmount > maximum - minimum)
+ visibleAmount = maximum - minimum;
+
+ ScrollbarPeer peer = (ScrollbarPeer) getPeer();
+ if (peer != null
+ && (this.value != value || this.visibleAmount != visibleAmount
+ || this.minimum != minimum || this.maximum != maximum))
+ peer.setValues(value, visibleAmount, minimum, maximum);
+
+ this.value = value;
+ this.visibleAmount = visibleAmount;
+ this.minimum = minimum;
+ this.maximum = maximum;
+
+ int range = maximum - minimum;
+ if (lineIncrement > range)
+ {
+ if (range == 0)
+ lineIncrement = 1;
+ else
+ lineIncrement = range;
+
+ if (peer != null)
+ peer.setLineIncrement(lineIncrement);
+ }
+
+ if (pageIncrement > range)
+ {
+ if (range == 0)
+ pageIncrement = 1;
+ else
+ pageIncrement = range;
+
+ if (peer != null)
+ peer.setPageIncrement(pageIncrement);
+ }
+ }
- if (pageIncrement == this.pageIncrement)
- return;
+ /**
+ * Returns the value added or subtracted when the user activates the scrollbar
+ * scroll by a "unit" amount.
+ *
+ * @return The unit increment value.
+ */
+ public int getUnitIncrement()
+ {
+ return getLineIncrement();
+ }
- this.pageIncrement = pageIncrement;
+ /**
+ * Returns the value added or subtracted when the user selects the scrollbar
+ * scroll by a "unit" amount control.
+ *
+ * @return The unit increment value.
+ *
+ * @deprecated This method is deprecated in favor of
+ * <code>getUnitIncrement()</code>.
+ */
+ public int getLineIncrement()
+ {
+ return lineIncrement;
+ }
- ScrollbarPeer peer = (ScrollbarPeer) getPeer ();
- if (peer != null)
- peer.setPageIncrement (this.pageIncrement);
-}
+ /**
+ * Sets the value added or subtracted to the scrollbar value when the
+ * user selects the scroll by a "unit" amount control.
+ *
+ * @param unitIncrement The new unit increment amount.
+ */
+ public synchronized void setUnitIncrement(int unitIncrement)
+ {
+ setLineIncrement(unitIncrement);
+ }
-/*************************************************************************/
+ /**
+ * Sets the value added or subtracted to the scrollbar value when the
+ * user selects the scroll by a "unit" amount control.
+ *
+ * @param lineIncrement The new unit increment amount.
+ *
+ * @deprecated This method is deprecated in favor of
+ * <code>setUnitIncrement()</code>.
+ */
+ public void setLineIncrement(int lineIncrement)
+ {
+ if (lineIncrement < 0)
+ throw new IllegalArgumentException("Unit increment less than zero.");
+
+ int range = maximum - minimum;
+ if (lineIncrement > range)
+ {
+ if (range == 0)
+ lineIncrement = 1;
+ else
+ lineIncrement = range;
+ }
+
+ if (lineIncrement == this.lineIncrement)
+ return;
+
+ this.lineIncrement = lineIncrement;
+
+ ScrollbarPeer peer = (ScrollbarPeer) getPeer();
+ if (peer != null)
+ peer.setLineIncrement(this.lineIncrement);
+ }
-/**
- * Notifies this object to create its native peer.
- */
-public synchronized void
-addNotify()
-{
- if (peer == null)
- peer = getToolkit ().createScrollbar (this);
- super.addNotify ();
-}
+ /**
+ * Returns the value added or subtracted when the user activates the scrollbar
+ * scroll by a "block" amount.
+ *
+ * @return The block increment value.
+ */
+ public int getBlockIncrement()
+ {
+ return getPageIncrement();
+ }
-/*************************************************************************/
+ /**
+ * Returns the value added or subtracted when the user selects the scrollbar
+ * scroll by a "block" amount control.
+ *
+ * @return The block increment value.
+ *
+ * @deprecated This method is deprecated in favor of
+ * <code>getBlockIncrement()</code>.
+ */
+ public int getPageIncrement()
+ {
+ return pageIncrement;
+ }
-/**
- * Adds a new adjustment listener to the list of registered listeners
- * for this object.
- *
- * @param listener The listener to add.
- */
-public synchronized void
-addAdjustmentListener(AdjustmentListener listener)
-{
- adjustment_listeners = AWTEventMulticaster.add(adjustment_listeners, listener);
- enableEvents(AWTEvent.ADJUSTMENT_EVENT_MASK);
-}
+ /**
+ * Sets the value added or subtracted to the scrollbar value when the
+ * user selects the scroll by a "block" amount control.
+ *
+ * @param blockIncrement The new block increment amount.
+ */
+ public synchronized void setBlockIncrement(int blockIncrement)
+ {
+ setPageIncrement(blockIncrement);
+ }
-/*************************************************************************/
+ /**
+ * Sets the value added or subtracted to the scrollbar value when the
+ * user selects the scroll by a "block" amount control.
+ *
+ * @param pageIncrement The new block increment amount.
+ *
+ * @deprecated This method is deprecated in favor of
+ * <code>setBlockIncrement()</code>.
+ */
+ public void setPageIncrement(int pageIncrement)
+ {
+ if (pageIncrement < 0)
+ throw new IllegalArgumentException("Block increment less than zero.");
+
+ int range = maximum - minimum;
+ if (pageIncrement > range)
+ {
+ if (range == 0)
+ pageIncrement = 1;
+ else
+ pageIncrement = range;
+ }
+
+ if (pageIncrement == this.pageIncrement)
+ return;
+
+ this.pageIncrement = pageIncrement;
+
+ ScrollbarPeer peer = (ScrollbarPeer) getPeer();
+ if (peer != null)
+ peer.setPageIncrement(this.pageIncrement);
+ }
-/**
- * Removes the specified listener from the list of registered listeners
- * for this object.
- *
- * @param listener The listener to remove.
- */
-public synchronized void
-removeAdjustmentListener(AdjustmentListener listener)
-{
- adjustment_listeners = AWTEventMulticaster.remove(adjustment_listeners,
- listener);
-}
+ /**
+ * Notifies this object to create its native peer.
+ */
+ public synchronized void addNotify()
+ {
+ if (peer == null)
+ peer = getToolkit().createScrollbar(this);
+ super.addNotify();
+ }
-/*************************************************************************/
+ /**
+ * Adds a new adjustment listener to the list of registered listeners
+ * for this object.
+ *
+ * @param listener The listener to add.
+ */
+ public synchronized void addAdjustmentListener(AdjustmentListener listener)
+ {
+ adjustment_listeners = AWTEventMulticaster.add(adjustment_listeners,
+ listener);
+ enableEvents(AWTEvent.ADJUSTMENT_EVENT_MASK);
+ }
-/**
- * Processes events for this scrollbar. It does this by calling
- * <code>processAdjustmentEvent()</code> if the event is an instance of
- * <code>AdjustmentEvent</code>, otherwise it calls the superclass to
- * process the event.
- *
- * @param event The event to process.
- */
-protected void
-processEvent(AWTEvent event)
-{
- if (event instanceof AdjustmentEvent)
- processAdjustmentEvent((AdjustmentEvent)event);
- else
- super.processEvent(event);
-}
+ /**
+ * Removes the specified listener from the list of registered listeners
+ * for this object.
+ *
+ * @param listener The listener to remove.
+ */
+ public synchronized void removeAdjustmentListener(AdjustmentListener listener)
+ {
+ adjustment_listeners = AWTEventMulticaster.remove(adjustment_listeners,
+ listener);
+ }
-/*************************************************************************/
+ /**
+ * Processes events for this scrollbar. It does this by calling
+ * <code>processAdjustmentEvent()</code> if the event is an instance of
+ * <code>AdjustmentEvent</code>, otherwise it calls the superclass to
+ * process the event.
+ *
+ * @param event The event to process.
+ */
+ protected void processEvent(AWTEvent event)
+ {
+ if (event instanceof AdjustmentEvent)
+ processAdjustmentEvent((AdjustmentEvent) event);
+ else
+ super.processEvent(event);
+ }
-/**
- * Processes adjustment events for this object by dispatching them to
- * any registered listeners. Note that this method will only be called
- * if adjustment events are enabled. This will happen automatically if
- * any listeners are registered. Otherwise, it can be enabled by a
- * call to <code>enableEvents()</code>.
- *
- * @param event The event to process.
- */
-protected void
-processAdjustmentEvent(AdjustmentEvent event)
-{
- value = event.getValue();
- if (adjustment_listeners != null)
- adjustment_listeners.adjustmentValueChanged(event);
-}
+ /**
+ * Processes adjustment events for this object by dispatching them to
+ * any registered listeners. Note that this method will only be called
+ * if adjustment events are enabled. This will happen automatically if
+ * any listeners are registered. Otherwise, it can be enabled by a
+ * call to <code>enableEvents()</code>.
+ *
+ * @param event The event to process.
+ */
+ protected void processAdjustmentEvent(AdjustmentEvent event)
+ {
+ value = event.getValue();
+ if (adjustment_listeners != null)
+ adjustment_listeners.adjustmentValueChanged(event);
+ }
-void
-dispatchEventImpl(AWTEvent e)
-{
- if (e.id <= AdjustmentEvent.ADJUSTMENT_LAST
+ void dispatchEventImpl(AWTEvent e)
+ {
+ if (e.id <= AdjustmentEvent.ADJUSTMENT_LAST
&& e.id >= AdjustmentEvent.ADJUSTMENT_FIRST
&& (adjustment_listeners != null
|| (eventMask & AWTEvent.ADJUSTMENT_EVENT_MASK) != 0))
- processEvent(e);
- else
- super.dispatchEventImpl(e);
-}
-
-/*************************************************************************/
+ processEvent(e);
+ else
+ super.dispatchEventImpl(e);
+ }
-/**
- * Returns a debugging string for this object.
- *
- * @return A debugging string for this object.
- */
-protected String
-paramString()
-{
- return("value=" + getValue() + ",visibleAmount=" +
- getVisibleAmount() + ",minimum=" + getMinimum()
- + ",maximum=" + getMaximum()
- + ",pageIncrement=" + pageIncrement
- + ",lineIncrement=" + lineIncrement
- + ",orientation=" + (orientation == HORIZONTAL
- ? "HORIZONTAL" : "VERTICAL")
- + super.paramString());
-}
+ /**
+ * Returns a debugging string for this object.
+ *
+ * @return A debugging string for this object.
+ */
+ protected String paramString()
+ {
+ return ("value=" + getValue() + ",visibleAmount=" + getVisibleAmount()
+ + ",minimum=" + getMinimum() + ",maximum=" + getMaximum()
+ + ",pageIncrement=" + pageIncrement + ",lineIncrement="
+ + lineIncrement + ",orientation="
+ + (orientation == HORIZONTAL ? "HORIZONTAL" : "VERTICAL")
+ + super.paramString());
+ }
/**
* Returns an array of all the objects currently registered as FooListeners
- * upon this <code>Scrollbar</code>. FooListeners are registered using the
+ * upon this <code>Scrollbar</code>. FooListeners are registered using the
* addFooListener method.
*
* @exception ClassCastException If listenerType doesn't specify a class or
* interface that implements java.util.EventListener.
*/
- public EventListener[] getListeners (Class listenerType)
+ public EventListener[] getListeners(Class listenerType)
{
if (listenerType == AdjustmentListener.class)
- return AWTEventMulticaster.getListeners (adjustment_listeners,
- listenerType);
+ return AWTEventMulticaster.getListeners(adjustment_listeners,
+ listenerType);
- return super.getListeners (listenerType);
+ return super.getListeners(listenerType);
}
/**
* Returns an array of all registered adjustment listeners.
*/
- public AdjustmentListener[] getAdjustmentListeners ()
+ public AdjustmentListener[] getAdjustmentListeners()
{
- return (AdjustmentListener[]) getListeners (AdjustmentListener.class);
+ return (AdjustmentListener[]) getListeners(AdjustmentListener.class);
}
/**
@@ -740,7 +649,7 @@ paramString()
*
* @since 1.4
*/
- public boolean getValueIsAdjusting ()
+ public boolean getValueIsAdjusting()
{
return valueIsAdjusting;
}
@@ -750,7 +659,7 @@ paramString()
*
* @since 1.4
*/
- public void setValueIsAdjusting (boolean valueIsAdjusting)
+ public void setValueIsAdjusting(boolean valueIsAdjusting)
{
this.valueIsAdjusting = valueIsAdjusting;
}
@@ -760,14 +669,157 @@ paramString()
*
* @return A unique name for this scroll bar.
*/
- String generateName ()
+ String generateName()
{
- return "scrollbar" + getUniqueLong ();
+ return "scrollbar" + getUniqueLong();
}
- private static synchronized long getUniqueLong ()
+ private static synchronized long getUniqueLong()
{
return next_scrollbar_number++;
}
-} // class Scrollbar
+ /**
+ * This class provides accessibility support for the
+ * scrollbar.
+ *
+ * @author Jerry Quinn (jlquinn@optonline.net)
+ * @author Andrew John Hughes (gnu_andrew@member.fsf.org)
+ */
+ protected class AccessibleAWTScrollBar extends AccessibleAWTComponent
+ implements AccessibleValue
+ {
+ /**
+ * Serialization constant to match JDK 1.5
+ */
+ private static final long serialVersionUID = -344337268523697807L;
+
+ /**
+ * Returns the role of this accessible object.
+ *
+ * @return the instance of <code>AccessibleRole</code>,
+ * which describes this object.
+ *
+ * @see javax.accessibility.AccessibleRole
+ */
+ public AccessibleRole getAccessibleRole()
+ {
+ return AccessibleRole.SCROLL_BAR;
+ }
+
+ /**
+ * Returns the state set of this accessible object.
+ *
+ * @return a set of <code>AccessibleState</code>s which
+ * represent the current state of the accessible object.
+ *
+ * @see javax.accessibility.AccessibleState
+ * @see javax.accessibility.AccessibleStateSet
+ */
+ public AccessibleStateSet getAccessibleStateSet()
+ {
+ AccessibleStateSet states = super.getAccessibleStateSet();
+ if (getOrientation() == HORIZONTAL)
+ states.add(AccessibleState.HORIZONTAL);
+ else
+ states.add(AccessibleState.VERTICAL);
+ if (getValueIsAdjusting())
+ states.add(AccessibleState.BUSY);
+ return states;
+ }
+
+ /**
+ * Returns an implementation of the <code>AccessibleValue</code>
+ * interface for this accessible object. In this case, the
+ * current instance is simply returned (with a more appropriate
+ * type), as it also implements the accessible value as well as
+ * the context.
+ *
+ * @return the accessible value associated with this context.
+ *
+ * @see javax.accessibility.AccessibleValue
+ */
+ public AccessibleValue getAccessibleValue()
+ {
+ return this;
+ }
+
+ /**
+ * Returns the current value of this accessible object.
+ * In this case, this is the same as the value for
+ * the scrollbar, wrapped in an <code>Integer</code>
+ * object.
+ *
+ * @return the numeric value of this scrollbar.
+ *
+ * @see javax.accessibility.AccessibleValue#getCurrentAccessibleValue()
+ */
+ public Number getCurrentAccessibleValue()
+ {
+ return new Integer(getValue());
+ }
+
+ /**
+ * Sets the current value of this accessible object
+ * to that supplied. In this case, the value of the
+ * scrollbar is set, and this method always returns
+ * true.
+ *
+ * @param number the new accessible value.
+ *
+ * @return true if the value was set.
+ *
+ * @see javax.accessibility.AccessibleValue#setCurrentAccessibleValue(java.lang.Number)
+ */
+ public boolean setCurrentAccessibleValue(Number number)
+ {
+ setValue(number.intValue());
+ return true;
+ }
+
+ /**
+ * Returns the minimum acceptable accessible value used
+ * by this object. In this case, this is the same as
+ * the minimum value of the scrollbar, wrapped in an
+ * object.
+ *
+ * @return the minimum value of this scrollbar.
+ *
+ * @see javax.accessibility.AccessibleValue#getMinimumAccessibleValue()
+ */
+ public Number getMinimumAccessibleValue()
+ {
+ return new Integer(getMinimum());
+ }
+
+ /**
+ * Returns the maximum acceptable accessible value used
+ * by this object. In this case, this is the same as
+ * the maximum value of the scrollbar, wrapped in an
+ * object.
+ *
+ * @return the maximum value of this scrollbar.
+ *
+ * @see javax.accessibility.AccessibleValue#getMaximumAccessibleValue()
+ */
+ public Number getMaximumAccessibleValue()
+ {
+ return new Integer(getMaximum());
+ }
+ }
+
+ /**
+ * Gets the AccessibleContext associated with this <code>Scrollbar</code>.
+ * The context is created, if necessary.
+ *
+ * @return the associated context
+ */
+ public AccessibleContext getAccessibleContext()
+ {
+ /* Create the context if this is the first request */
+ if (accessibleContext == null)
+ accessibleContext = new AccessibleAWTScrollBar();
+
+ return accessibleContext;
+ }
+}
diff --git a/libjava/java/awt/TextArea.java b/libjava/java/awt/TextArea.java
index 9efc7754a20..dda45f34478 100644
--- a/libjava/java/awt/TextArea.java
+++ b/libjava/java/awt/TextArea.java
@@ -613,8 +613,17 @@ public class TextArea extends TextComponent implements java.io.Serializable
}
}
+ /**
+ * Gets the AccessibleContext associated with this <code>TextArea</code>.
+ * The context is created, if necessary.
+ *
+ * @return the associated context
+ */
public AccessibleContext getAccessibleContext()
{
- return new AccessibleAWTTextArea();
+ /* Create the context if this is the first request */
+ if (accessibleContext == null)
+ accessibleContext = new AccessibleAWTTextArea();
+ return accessibleContext;
}
}
diff --git a/libjava/java/awt/TextComponent.java b/libjava/java/awt/TextComponent.java
index 8f9f875acf3..4c384391adf 100644
--- a/libjava/java/awt/TextComponent.java
+++ b/libjava/java/awt/TextComponent.java
@@ -46,6 +46,7 @@ import java.text.BreakIterator;
import java.util.EventListener;
import javax.accessibility.Accessible;
+import javax.accessibility.AccessibleContext;
import javax.accessibility.AccessibleRole;
import javax.accessibility.AccessibleState;
import javax.accessibility.AccessibleStateSet;
@@ -690,6 +691,21 @@ paramString()
return (TextListener[]) getListeners (TextListener.class);
}
+ /**
+ * Gets the AccessibleContext associated with this <code>TextComponent</code>.
+ * The context is created, if necessary.
+ *
+ * @return the associated context
+ */
+ public AccessibleContext getAccessibleContext()
+ {
+ /* Create the context if this is the first request */
+ if (accessibleContext == null)
+ accessibleContext = new AccessibleAWTTextComponent();
+ return accessibleContext;
+ }
+
+
/*******************************/
// Provide AccessibleAWTTextComponent access to several peer functions that
// aren't publicly exposed.
diff --git a/libjava/java/awt/Toolkit.java b/libjava/java/awt/Toolkit.java
index 504572a2d5b..f1925a28cd8 100644
--- a/libjava/java/awt/Toolkit.java
+++ b/libjava/java/awt/Toolkit.java
@@ -526,6 +526,10 @@ public abstract class Toolkit
toolkit = (Toolkit) obj;
return toolkit;
}
+ catch (ThreadDeath death)
+ {
+ throw death;
+ }
catch (Throwable t)
{
AWTError e = new AWTError("Cannot load AWT toolkit: " + toolkit_name);
diff --git a/libjava/java/awt/Window.java b/libjava/java/awt/Window.java
index d084bb4350b..786e51a272e 100644
--- a/libjava/java/awt/Window.java
+++ b/libjava/java/awt/Window.java
@@ -56,6 +56,9 @@ import java.util.Vector;
import javax.accessibility.Accessible;
import javax.accessibility.AccessibleContext;
+import javax.accessibility.AccessibleRole;
+import javax.accessibility.AccessibleState;
+import javax.accessibility.AccessibleStateSet;
/**
* This class represents a top-level window with no decorations.
@@ -84,11 +87,26 @@ public class Window extends Container implements Accessible
private transient WindowFocusListener windowFocusListener;
private transient WindowStateListener windowStateListener;
private transient GraphicsConfiguration graphicsConfiguration;
- private transient AccessibleContext accessibleContext;
private transient boolean shown;
private transient Component windowFocusOwner;
+
+ protected class AccessibleAWTWindow extends AccessibleAWTContainer
+ {
+ public AccessibleRole getAccessibleRole()
+ {
+ return AccessibleRole.WINDOW;
+ }
+
+ public AccessibleStateSet getAccessibleStateSet()
+ {
+ AccessibleStateSet states = super.getAccessibleStateSet();
+ if (isActive())
+ states.add(AccessibleState.ACTIVE);
+ return states;
+ }
+ }
/**
* This (package access) constructor is used by subclasses that want
@@ -200,12 +218,11 @@ public class Window extends Container implements Accessible
&& gc.getDevice().getType() != GraphicsDevice.TYPE_RASTER_SCREEN)
throw new IllegalArgumentException ("gc must be from a screen device");
- // FIXME: until we implement this, it just causes AWT to crash.
-// if (gc == null)
-// graphicsConfiguration = GraphicsEnvironment.getLocalGraphicsEnvironment()
-// .getDefaultScreenDevice()
-// .getDefaultConfiguration();
-// else
+ if (gc == null)
+ graphicsConfiguration = GraphicsEnvironment.getLocalGraphicsEnvironment()
+ .getDefaultScreenDevice()
+ .getDefaultConfiguration();
+ else
graphicsConfiguration = gc;
}
@@ -672,8 +689,34 @@ public class Window extends Container implements Accessible
}
}
}
+
+ /**
+ * Identifies if this window is active. The active window is a Frame or
+ * Dialog that has focus or owns the active window.
+ *
+ * @return true if active, else false.
+ * @since 1.4
+ */
+ public boolean isActive()
+ {
+ KeyboardFocusManager manager = KeyboardFocusManager.getCurrentKeyboardFocusManager ();
+ return manager.getActiveWindow() == this;
+ }
/**
+ * Identifies if this window is focused. A window is focused if it is the
+ * focus owner or it contains the focus owner.
+ *
+ * @return true if focused, else false.
+ * @since 1.4
+ */
+ public boolean isFocused()
+ {
+ KeyboardFocusManager manager = KeyboardFocusManager.getCurrentKeyboardFocusManager ();
+ return manager.getFocusedWindow() == this;
+ }
+
+ /**
* Returns the child window that has focus if this window is active.
* This method returns <code>null</code> if this window is not active
* or no children have focus.
@@ -731,6 +774,22 @@ public class Window extends Container implements Accessible
return super.isShowing();
}
+ public void setLocationRelativeTo (Component c)
+ {
+ if (c == null || !c.isShowing ())
+ {
+ int x = 0;
+ int y = 0;
+
+ GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment ();
+ Point center = ge.getCenterPoint ();
+ x = center.x - (width / 2);
+ y = center.y - (height / 2);
+ setLocation (x, y);
+ }
+ // FIXME: handle case where component is non-null.
+ }
+
/**
* @since 1.2
*
@@ -754,11 +813,18 @@ public class Window extends Container implements Accessible
applyResourceBundle(rb);
}
+ /**
+ * Gets the AccessibleContext associated with this <code>Window</code>.
+ * The context is created, if necessary.
+ *
+ * @return the associated context
+ */
public AccessibleContext getAccessibleContext()
{
- // FIXME
- //return null;
- throw new Error ("Not implemented");
+ /* Create the context if this is the first request */
+ if (accessibleContext == null)
+ accessibleContext = new AccessibleAWTWindow();
+ return accessibleContext;
}
/**
@@ -866,13 +932,13 @@ public class Window extends Container implements Accessible
this.y = y;
width = w;
height = h;
- if (resized)
+ if (resized && isShowing ())
{
ComponentEvent ce =
new ComponentEvent(this, ComponentEvent.COMPONENT_RESIZED);
getToolkit().getSystemEventQueue().postEvent(ce);
}
- if (moved)
+ if (moved && isShowing ())
{
ComponentEvent ce =
new ComponentEvent(this, ComponentEvent.COMPONENT_MOVED);
diff --git a/libjava/java/awt/color/ICC_Profile.java b/libjava/java/awt/color/ICC_Profile.java
index 79aa886ec49..b84eb96c2fb 100644
--- a/libjava/java/awt/color/ICC_Profile.java
+++ b/libjava/java/awt/color/ICC_Profile.java
@@ -316,8 +316,6 @@ public class ICC_Profile implements Serializable
*/
protected void finalize()
{
- header = null;
- tagTable = null;
}
/**
diff --git a/libjava/java/awt/dnd/DnDConstants.java b/libjava/java/awt/dnd/DnDConstants.java
index 3e78121a57a..a64fa5a7680 100644
--- a/libjava/java/awt/dnd/DnDConstants.java
+++ b/libjava/java/awt/dnd/DnDConstants.java
@@ -1,5 +1,5 @@
/* DnDConstants.java -- constants for drag-and-drop operations
- Copyright (C) 2002 Free Software Foundation, Inc.
+ Copyright (C) 2002, 2005 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -69,4 +69,9 @@ public final class DnDConstants
/** A synonym for {@link #ACTION_LINK}. */
public static final int ACTION_REFERENCE = ACTION_LINK;
-} // class DnDConstants
+
+ private DnDConstants()
+ {
+ // Do nothing here.
+ }
+}
diff --git a/libjava/java/awt/dnd/DropTarget.java b/libjava/java/awt/dnd/DropTarget.java
index 7379ca71c0d..2a8b79d8415 100644
--- a/libjava/java/awt/dnd/DropTarget.java
+++ b/libjava/java/awt/dnd/DropTarget.java
@@ -205,15 +205,14 @@ public class DropTarget
/**
* Adds a new <code>DropTargetListener</code>.
*
- * @exception TooManyListenersException If there is already a
- * <code>DropTargetListener</code>.
+ * @exception TooManyListenersException Sun's JDK does not, despite
+ * documentation, throw this exception here when you install an additional
+ * <code>DropTargetListener</code>. So to be compatible, we do the same
+ * thing.
*/
public void addDropTargetListener (DropTargetListener dtl)
throws TooManyListenersException
{
- if (dtl != null)
- throw new TooManyListenersException ();
-
dropTargetListener = dtl;
}
diff --git a/libjava/java/awt/geom/Area.java b/libjava/java/awt/geom/Area.java
index 9b1b9d3b109..68f905f08f4 100644
--- a/libjava/java/awt/geom/Area.java
+++ b/libjava/java/awt/geom/Area.java
@@ -2631,11 +2631,9 @@ public class Area implements Shape, Cloneable
double P = (y2 - 2 * y1 + y0);
double Q = 2 * (y1 - y0);
- double R = y0;
double A = (x2 - 2 * x1 + x0);
double B = 2 * (x1 - x0);
- double C = x0;
double area = (B * P - A * Q) / 3.0;
return (area);
@@ -2937,12 +2935,10 @@ public class Area implements Shape, Cloneable
double P = y3 - 3 * y2 + 3 * y1 - y0;
double Q = 3 * (y2 + y0 - 2 * y1);
double R = 3 * (y1 - y0);
- double S = y0;
double A = x3 - 3 * x2 + 3 * x1 - x0;
double B = 3 * (x2 + x0 - 2 * x1);
double C = 3 * (x1 - x0);
- double D = x0;
double area = (B * P - A * Q) / 5.0 + (C * P - A * R) / 2.0
+ (C * Q - B * R) / 3.0;
diff --git a/libjava/java/awt/geom/Rectangle2D.java b/libjava/java/awt/geom/Rectangle2D.java
index bd1a37c6e09..d8217fecdb5 100644
--- a/libjava/java/awt/geom/Rectangle2D.java
+++ b/libjava/java/awt/geom/Rectangle2D.java
@@ -1,5 +1,5 @@
/* Rectangle2D.java -- generic rectangles in 2-D space
- Copyright (C) 2000, 2001, 2002 Free Software Foundation
+ Copyright (C) 2000, 2001, 2002, 2004 Free Software Foundation
This file is part of GNU Classpath.
@@ -57,30 +57,30 @@ import java.util.NoSuchElementException;
public abstract class Rectangle2D extends RectangularShape
{
/**
- * The point lies left of the rectangle (p.x < r.x).
+ * The point lies left of the rectangle (p.x &lt; r.x).
*
- * @see #outcode()
+ * @see #outcode(double, double)
*/
public static final int OUT_LEFT = 1;
/**
- * The point lies above the rectangle (p.y < r.y).
+ * The point lies above the rectangle (p.y &lt; r.y).
*
- * @see #outcode()
+ * @see #outcode(double, double)
*/
public static final int OUT_TOP = 2;
/**
* The point lies right of the rectangle (p.x &gt; r.maxX).
*
- * @see #outcode()
+ * @see #outcode(double, double)
*/
public static final int OUT_RIGHT = 4;
/**
* The point lies below of the rectangle (p.y &gt; r.maxY).
*
- * @see #outcode()
+ * @see #outcode(double, double)
*/
public static final int OUT_BOTTOM = 8;
diff --git a/libjava/java/awt/im/InputContext.java b/libjava/java/awt/im/InputContext.java
index 04e70e313f5..fc068c24165 100644
--- a/libjava/java/awt/im/InputContext.java
+++ b/libjava/java/awt/im/InputContext.java
@@ -102,8 +102,8 @@ public class InputContext
while (e.hasMoreElements())
{
URL url = (URL) e.nextElement();
- BufferedReader in = null;
- String line = null;
+ BufferedReader in;
+ String line;
try
{
in = new BufferedReader
diff --git a/libjava/java/awt/image/IndexColorModel.java b/libjava/java/awt/image/IndexColorModel.java
index 6791589032e..e4ccc542903 100644
--- a/libjava/java/awt/image/IndexColorModel.java
+++ b/libjava/java/awt/image/IndexColorModel.java
@@ -125,7 +125,9 @@ public class IndexColorModel extends ColorModel
public IndexColorModel(int bits, int size, byte[] reds, byte[] greens,
byte[] blues, byte[] alphas)
{
- super (bits);
+ // FIXME: This super() constructor should not be used since it can give
+ // the wrong value for hasAlpha() which is final and cannot be overloaded
+ super(bits);
map_size = size;
opaque = (alphas == null);
@@ -416,10 +418,10 @@ public class IndexColorModel extends ColorModel
*/
public final int getAlpha (int pixel)
{
- if (pixel < map_size)
- return (int) ((generateMask (3) & rgb[pixel]) >> (3 * pixel_bits));
-
- return 0;
+ if (opaque || pixel >= map_size)
+ return 255;
+
+ return (int) ((generateMask (3) & rgb[pixel]) >> (3 * pixel_bits));
}
/**
diff --git a/libjava/java/awt/image/MemoryImageSource.java b/libjava/java/awt/image/MemoryImageSource.java
index 07e42cf077d..6b43d00c37b 100644
--- a/libjava/java/awt/image/MemoryImageSource.java
+++ b/libjava/java/awt/image/MemoryImageSource.java
@@ -1,4 +1,4 @@
-/* MemoryImageSource.java -- Java class for providing image data
+/* MemoryImageSource.java -- Java class for providing image data
Copyright (C) 1999, 2004 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -41,335 +41,333 @@ package java.awt.image;
import java.util.Hashtable;
import java.util.Vector;
-public class MemoryImageSource implements ImageProducer
+public class MemoryImageSource implements ImageProducer
{
- private boolean animated = false;
- private boolean fullbuffers = false;
- private int pixeli[], width, height, offset, scansize;
- private byte pixelb[];
- private ColorModel cm;
- private Hashtable props = new Hashtable();
- private Vector consumers = new Vector();
-
- /**
- * Construct an image producer that reads image data from a byte
- * array.
- *
- * @param w width of image
- * @param h height of image
- * @param cm the color model used to represent pixel values
- * @param pix a byte array of pixel values
- * @param off the offset into the array at which the first pixel is stored
- * @param scan the number of array elements that represents a single pixel row
- */
- public MemoryImageSource(int w, int h, ColorModel cm,
- byte pix[], int off, int scan)
- {
- this ( w, h, cm, pix, off, scan, null );
- }
- /**
- Constructs an ImageProducer from memory
- */
- public MemoryImageSource( int w, int h, ColorModel cm,
- byte pix[], int off, int scan,
- Hashtable props)
- {
- width = w;
- height = h;
- this.cm = cm;
- offset = off;
- scansize = scan;
- this.props = props;
- int max = (( scansize > width ) ? scansize : width );
- pixelb = pix;
- }
- /**
- * Construct an image producer that reads image data from an
- * integer array.
- *
- * @param w width of image
- * @param h height of image
- * @param cm the color model used to represent pixel values
- * @param pix an integer array of pixel values
- * @param off the offset into the array at which the first pixel is stored
- * @param scan the number of array elements that represents a single pixel row
- */
- public MemoryImageSource(int w, int h, ColorModel cm,
- int pix[], int off, int scan)
- {
- this ( w, h, cm, pix, off, scan, null );
- }
-
- /**
- Constructs an ImageProducer from memory
- */
- public MemoryImageSource(int w, int h, ColorModel cm,
- int pix[], int off, int scan,
- Hashtable props)
- {
- width = w;
- height = h;
- this.cm = cm;
- offset = off;
- scansize = scan;
- this.props = props;
- int max = (( scansize > width ) ? scansize : width );
- pixeli = pix;
- }
- /**
- Constructs an ImageProducer from memory using the default RGB ColorModel
- */
- public MemoryImageSource(int w, int h,
- int pix[], int off, int scan,
- Hashtable props)
- {
- this ( w, h, ColorModel.getRGBdefault(), pix, off, scan, props);
- }
-
- /**
- Constructs an ImageProducer from memory using the default RGB ColorModel
- */
- public MemoryImageSource(int w, int h,
- int pix[], int off, int scan)
- {
- this ( w, h, ColorModel.getRGBdefault(), pix, off, scan, null);
- }
-
- /**
- * Used to register an <code>ImageConsumer</code> with this
- * <code>ImageProducer</code>.
- */
- public synchronized void addConsumer(ImageConsumer ic) {
- if (consumers.contains(ic))
- return;
-
- consumers.addElement(ic);
- }
-
- /**
- * Used to determine if the given <code>ImageConsumer</code> is
- * already registered with this <code>ImageProducer</code>.
- */
- public synchronized boolean isConsumer(ImageConsumer ic) {
- if (consumers.contains(ic))
- return true;
- return false;
- }
-
- /**
- * Used to remove an <code>ImageConsumer</code> from the list of
- * registered consumers for this <code>ImageProducer</code>.
- */
- public synchronized void removeConsumer(ImageConsumer ic) {
- consumers.removeElement(ic);
- }
-
- /**
- * Used to register an <code>ImageConsumer</code> with this
- * <code>ImageProducer</code> and then immediately start
- * reconstruction of the image data to be delivered to all
- * registered consumers.
- */
- public void startProduction(ImageConsumer ic) {
- if (!(consumers.contains(ic))) {
- consumers.addElement(ic);
- }
-
+ private boolean animated = false;
+ private boolean fullbuffers = false;
+ private int[] pixeli;
+ private int width;
+ private int height;
+ private int offset;
+ private int scansize;
+ private byte[] pixelb;
+ private ColorModel cm;
+ private Hashtable props = new Hashtable();
+ private Vector consumers = new Vector();
+
+ /**
+ * Construct an image producer that reads image data from a byte
+ * array.
+ *
+ * @param w width of image
+ * @param h height of image
+ * @param cm the color model used to represent pixel values
+ * @param pix a byte array of pixel values
+ * @param off the offset into the array at which the first pixel is stored
+ * @param scan the number of array elements that represents a single pixel row
+ */
+ public MemoryImageSource(int w, int h, ColorModel cm, byte[] pix, int off,
+ int scan)
+ {
+ this(w, h, cm, pix, off, scan, null);
+ }
+
+ /**
+ * Constructs an ImageProducer from memory
+ */
+ public MemoryImageSource(int w, int h, ColorModel cm, byte[] pix, int off,
+ int scan, Hashtable props)
+ {
+ width = w;
+ height = h;
+ this.cm = cm;
+ offset = off;
+ scansize = scan;
+ this.props = props;
+ int max = ((scansize > width) ? scansize : width);
+ pixelb = pix;
+ }
+
+ /**
+ * Construct an image producer that reads image data from an
+ * integer array.
+ *
+ * @param w width of image
+ * @param h height of image
+ * @param cm the color model used to represent pixel values
+ * @param pix an integer array of pixel values
+ * @param off the offset into the array at which the first pixel is stored
+ * @param scan the number of array elements that represents a single pixel row
+ */
+ public MemoryImageSource(int w, int h, ColorModel cm, int[] pix, int off,
+ int scan)
+ {
+ this(w, h, cm, pix, off, scan, null);
+ }
+
+ /**
+ Constructs an ImageProducer from memory
+ */
+ public MemoryImageSource(int w, int h, ColorModel cm, int[] pix, int off,
+ int scan, Hashtable props)
+ {
+ width = w;
+ height = h;
+ this.cm = cm;
+ offset = off;
+ scansize = scan;
+ this.props = props;
+ int max = ((scansize > width) ? scansize : width);
+ pixeli = pix;
+ }
+
+ /**
+ * Constructs an ImageProducer from memory using the default RGB ColorModel
+ */
+ public MemoryImageSource(int w, int h, int[] pix, int off, int scan,
+ Hashtable props)
+ {
+ this(w, h, ColorModel.getRGBdefault(), pix, off, scan, props);
+ }
+
+ /**
+ * Constructs an ImageProducer from memory using the default RGB ColorModel
+ */
+ public MemoryImageSource(int w, int h, int[] pix, int off, int scan)
+ {
+ this(w, h, ColorModel.getRGBdefault(), pix, off, scan, null);
+ }
+
+ /**
+ * Used to register an <code>ImageConsumer</code> with this
+ * <code>ImageProducer</code>.
+ */
+ public synchronized void addConsumer(ImageConsumer ic)
+ {
+ if (consumers.contains(ic))
+ return;
+
+ consumers.addElement(ic);
+ }
+
+ /**
+ * Used to determine if the given <code>ImageConsumer</code> is
+ * already registered with this <code>ImageProducer</code>.
+ */
+ public synchronized boolean isConsumer(ImageConsumer ic)
+ {
+ if (consumers.contains(ic))
+ return true;
+ return false;
+ }
+
+ /**
+ * Used to remove an <code>ImageConsumer</code> from the list of
+ * registered consumers for this <code>ImageProducer</code>.
+ */
+ public synchronized void removeConsumer(ImageConsumer ic)
+ {
+ consumers.removeElement(ic);
+ }
+
+ /**
+ * Used to register an <code>ImageConsumer</code> with this
+ * <code>ImageProducer</code> and then immediately start
+ * reconstruction of the image data to be delivered to all
+ * registered consumers.
+ */
+ public void startProduction(ImageConsumer ic)
+ {
+ if (! (consumers.contains(ic)))
+ consumers.addElement(ic);
+
+ Vector list = (Vector) consumers.clone();
+ for (int i = 0; i < list.size(); i++)
+ {
+ ic = (ImageConsumer) list.elementAt(i);
+ sendPicture(ic);
+ if (animated)
+ ic.imageComplete(ImageConsumer.SINGLEFRAME);
+ else
+ ic.imageComplete(ImageConsumer.STATICIMAGEDONE);
+ }
+ }
+
+ /**
+ * Used to register an <code>ImageConsumer</code> with this
+ * <code>ImageProducer</code> and then request that this producer
+ * resend the image data in the order top-down, left-right.
+ */
+ public void requestTopDownLeftRightResend(ImageConsumer ic)
+ {
+ startProduction(ic);
+ }
+
+ /**
+ * Changes a flag to indicate whether this MemoryImageSource supports
+ * animations.
+ *
+ * @param animated A flag indicating whether this class supports animations
+ */
+ public synchronized void setAnimated(boolean animated)
+ {
+ this.animated = animated;
+ }
+
+ /**
+ * A flag to indicate whether or not to send full buffer updates when
+ * sending animation. If this flag is set then full buffers are sent
+ * in the newPixels methods instead of just regions.
+ *
+ * @param fullbuffers - a flag indicating whether to send the full buffers
+ */
+ public synchronized void setFullBufferUpdates(boolean fullbuffers)
+ {
+ this.fullbuffers = fullbuffers;
+ }
+
+ /**
+ * Send an animation frame to the image consumers.
+ */
+ public void newPixels()
+ {
+ if (animated == true)
+ {
+ ImageConsumer ic;
Vector list = (Vector) consumers.clone();
- for(int i = 0; i < list.size(); i++) {
+ for (int i = 0; i < list.size(); i++)
+ {
ic = (ImageConsumer) list.elementAt(i);
- sendPicture( ic );
- if (animated)
- ic.imageComplete( ImageConsumer.SINGLEFRAME );
- else
- ic.imageComplete( ImageConsumer.STATICIMAGEDONE );
- }
- }
-
- /**
- * Used to register an <code>ImageConsumer</code> with this
- * <code>ImageProducer</code> and then request that this producer
- * resend the image data in the order top-down, left-right.
- */
- public void requestTopDownLeftRightResend(ImageConsumer ic) {
- startProduction ( ic );
- }
-
-
- /**
- Changes a flag to indicate whether this MemoryImageSource supports
- animations.
-
- @param animated A flag indicating whether this class supports animations
- */
- public synchronized void setAnimated(boolean animated)
- {
- this.animated = animated;
- }
-
-
- /**
- A flag to indicate whether or not to send full buffer updates when
- sending animation. If this flag is set then full buffers are sent
- in the newPixels methods instead of just regions.
-
- @param fullbuffers - a flag indicating whether to send the full buffers
- */
- public synchronized void setFullBufferUpdates(boolean fullbuffers)
- {
- this.fullbuffers = fullbuffers;
- }
-
- /**
- Send an animation frame to the image consumers.
- */
- public void newPixels()
- {
- if( animated == true ) {
- ImageConsumer ic;
- Vector list = (Vector) consumers.clone();
- for(int i = 0; i < list.size(); i++) {
- ic = (ImageConsumer) list.elementAt(i);
- sendPicture( ic );
- ic.imageComplete( ImageConsumer.SINGLEFRAME );
- }
- }
- }
-
-
- private void sendPicture ( ImageConsumer ic )
- {
- ic.setHints( ImageConsumer.TOPDOWNLEFTRIGHT );
- if( props != null ) {
- ic.setProperties( props );
- }
- ic.setDimensions(width, height);
- ic.setColorModel(cm);
- if( pixeli != null ) {
- ic.setPixels( 0, 0, width, height, cm, pixeli, offset, scansize );
- } else {
- ic.setPixels( 0, 0, width, height, cm, pixelb, offset, scansize );
- }
- }
-
- /**
- Send an animation frame to the image consumers containing the specified
- pixels unless setFullBufferUpdates is set.
- */
- public synchronized void newPixels(int x,
- int y,
- int w,
- int h)
- {
- if( animated == true )
- {
- if( fullbuffers ) {
- newPixels();
- } else {
- ImageConsumer ic;
- Vector list = (Vector) consumers.clone();
- for(int i = 0; i < list.size(); i++) {
- ic = (ImageConsumer) list.elementAt(i);
- ic.setHints( ImageConsumer.TOPDOWNLEFTRIGHT );
- if( props != null ) {
- ic.setProperties( props );
- }
- if( pixeli != null ) {
- int[] pixelbuf = new int[w * h];
- for (int row = y; row < y + h; row++)
- System.arraycopy(pixeli, row * scansize + x + offset, pixelbuf, 0, w * h);
- ic.setPixels( x, y, w, h, cm, pixelbuf, 0, w );
- } else {
- byte[] pixelbuf = new byte[w * h];
- for (int row = y; row < y + h; row++)
- System.arraycopy(pixelb, row * scansize + x + offset, pixelbuf, 0, w * h);
-
- ic.setPixels( x, y, w, h, cm, pixelbuf, 0, w );
- }
- ic.imageComplete( ImageConsumer.SINGLEFRAME );
- }
- }
- }
- }
-
-
-
- /**
- Send an animation frame to the image consumers containing the specified
- pixels unless setFullBufferUpdates is set.
-
- If framenotify is set then a notification is sent when the frame
- is sent otherwise no status is sent.
- */
- public synchronized void newPixels(int x,
- int y,
- int w,
- int h,
- boolean framenotify)
- {
- if( animated == true )
- {
- if( fullbuffers ) {
- newPixels();
- } else {
- ImageConsumer ic;
- Vector list = (Vector) consumers.clone();
- for(int i = 0; i < list.size(); i++) {
- ic = (ImageConsumer) list.elementAt(i);
- ic.setHints( ImageConsumer.TOPDOWNLEFTRIGHT );
- if( props != null ) {
- ic.setProperties( props );
- }
- if( pixeli != null ) {
- int[] pixelbuf = new int[w * h];
- for (int row = y; row < y + h; row++)
- System.arraycopy(pixeli, row * scansize + x + offset, pixelbuf, 0, w * h);
- ic.setPixels( x, y, w, h, cm, pixelbuf, 0, w );
- } else {
- byte[] pixelbuf = new byte[w * h];
- for (int row = y; row < y + h; row++)
- System.arraycopy(pixelb, row * scansize + x + offset, pixelbuf, 0, w * h);
- ic.setPixels( x, y, w, h, cm, pixelbuf, 0, w );
- }
- if( framenotify == true )
- ic.imageComplete( ImageConsumer.SINGLEFRAME );
- }
- }
- }
- }
-
- public synchronized void newPixels(byte newpix[],
- ColorModel newmodel,
- int offset,
- int scansize)
-
- {
- pixeli = null;
- pixelb = newpix;
- cm = newmodel;
- this.offset = offset;
- this.scansize = scansize;
- if( animated == true )
- {
- newPixels();
- }
- }
-
- public synchronized void newPixels(int newpix[],
- ColorModel newmodel,
- int offset,
- int scansize)
-
- {
- pixelb = null;
- pixeli = newpix;
- cm = newmodel;
- this.offset = offset;
- this.scansize = scansize;
- if( animated == true )
- {
- newPixels();
- }
- }
-
+ sendPicture(ic);
+ ic.imageComplete(ImageConsumer.SINGLEFRAME);
+ }
+ }
+ }
+
+ private void sendPicture(ImageConsumer ic)
+ {
+ ic.setHints(ImageConsumer.TOPDOWNLEFTRIGHT);
+ if (props != null)
+ ic.setProperties(props);
+ ic.setDimensions(width, height);
+ ic.setColorModel(cm);
+ if (pixeli != null)
+ ic.setPixels(0, 0, width, height, cm, pixeli, offset, scansize);
+ else
+ ic.setPixels(0, 0, width, height, cm, pixelb, offset, scansize);
+ }
+
+ /**
+ * Send an animation frame to the image consumers containing the specified
+ * pixels unless setFullBufferUpdates is set.
+ */
+ public synchronized void newPixels(int x, int y, int w, int h)
+ {
+ if (animated == true)
+ {
+ if (fullbuffers)
+ newPixels();
+ else
+ {
+ ImageConsumer ic;
+ Vector list = (Vector) consumers.clone();
+ for (int i = 0; i < list.size(); i++)
+ {
+ ic = (ImageConsumer) list.elementAt(i);
+ ic.setHints(ImageConsumer.TOPDOWNLEFTRIGHT);
+ if (props != null)
+ ic.setProperties(props);
+ if (pixeli != null)
+ {
+ int[] pixelbuf = new int[w * h];
+ for (int row = y; row < y + h; row++)
+ System.arraycopy(pixeli, row * scansize + x + offset,
+ pixelbuf, 0, w * h);
+ ic.setPixels(x, y, w, h, cm, pixelbuf, 0, w);
+ }
+ else
+ {
+ byte[] pixelbuf = new byte[w * h];
+ for (int row = y; row < y + h; row++)
+ System.arraycopy(pixelb, row * scansize + x + offset,
+ pixelbuf, 0, w * h);
+
+ ic.setPixels(x, y, w, h, cm, pixelbuf, 0, w);
+ }
+ ic.imageComplete(ImageConsumer.SINGLEFRAME);
+ }
+ }
+ }
+ }
+
+ /**
+ * Send an animation frame to the image consumers containing the specified
+ * pixels unless setFullBufferUpdates is set.
+ *
+ * If framenotify is set then a notification is sent when the frame
+ * is sent otherwise no status is sent.
+ */
+ public synchronized void newPixels(int x, int y, int w, int h,
+ boolean framenotify)
+ {
+ if (animated == true)
+ {
+ if (fullbuffers)
+ newPixels();
+ else
+ {
+ ImageConsumer ic;
+ Vector list = (Vector) consumers.clone();
+ for (int i = 0; i < list.size(); i++)
+ {
+ ic = (ImageConsumer) list.elementAt(i);
+ ic.setHints(ImageConsumer.TOPDOWNLEFTRIGHT);
+ if (props != null)
+ ic.setProperties(props);
+ if (pixeli != null)
+ {
+ int[] pixelbuf = new int[w * h];
+ for (int row = y; row < y + h; row++)
+ System.arraycopy(pixeli, row * scansize + x + offset,
+ pixelbuf, 0, w * h);
+ ic.setPixels(x, y, w, h, cm, pixelbuf, 0, w);
+ }
+ else
+ {
+ byte[] pixelbuf = new byte[w * h];
+ for (int row = y; row < y + h; row++)
+ System.arraycopy(pixelb, row * scansize + x + offset,
+ pixelbuf, 0, w * h);
+ ic.setPixels(x, y, w, h, cm, pixelbuf, 0, w);
+ }
+ if (framenotify == true)
+ ic.imageComplete(ImageConsumer.SINGLEFRAME);
+ }
+ }
+ }
+ }
+
+ public synchronized void newPixels(byte[] newpix, ColorModel newmodel,
+ int offset, int scansize)
+ {
+ pixeli = null;
+ pixelb = newpix;
+ cm = newmodel;
+ this.offset = offset;
+ this.scansize = scansize;
+ if (animated == true)
+ newPixels();
+ }
+
+ public synchronized void newPixels(int[] newpix, ColorModel newmodel,
+ int offset, int scansize)
+ {
+ pixelb = null;
+ pixeli = newpix;
+ cm = newmodel;
+ this.offset = offset;
+ this.scansize = scansize;
+ if (animated == true)
+ newPixels();
+ }
}
diff --git a/libjava/java/awt/image/MultiPixelPackedSampleModel.java b/libjava/java/awt/image/MultiPixelPackedSampleModel.java
index 0525d37bd42..6d5f2841b5a 100644
--- a/libjava/java/awt/image/MultiPixelPackedSampleModel.java
+++ b/libjava/java/awt/image/MultiPixelPackedSampleModel.java
@@ -59,7 +59,7 @@ public class MultiPixelPackedSampleModel extends SampleModel
public MultiPixelPackedSampleModel(int dataType, int w, int h,
int numberOfBits)
{
- this(dataType, w, h, 0, numberOfBits, 0);
+ this(dataType, w, h, numberOfBits, 0, 0);
}
public MultiPixelPackedSampleModel(int dataType, int w, int h,
@@ -101,7 +101,7 @@ public class MultiPixelPackedSampleModel extends SampleModel
// Compute scan line large enough for w pixels.
if (scanlineStride == 0)
- scanlineStride = ((dataBitOffset + w * numberOfBits) / elemBits) + 1;
+ scanlineStride = ((dataBitOffset + w * numberOfBits) / elemBits);
this.scanlineStride = scanlineStride;
@@ -112,8 +112,9 @@ public class MultiPixelPackedSampleModel extends SampleModel
bitOffsets = new int[numElems];
for (int i=0; i < numElems; i++)
{
- bitOffsets[i] = numberOfBits * i;
- bitMasks[i] = ((1 << numberOfBits) - 1) << bitOffsets[i];
+ bitOffsets[numElems - i- 1] = numberOfBits * i;
+ bitMasks[numElems - i - 1] = ((1 << numberOfBits) - 1) <<
+ bitOffsets[numElems - i - 1];
}
}
diff --git a/libjava/java/awt/image/RGBImageFilter.java b/libjava/java/awt/image/RGBImageFilter.java
index 0fd977eab67..b613c1b447c 100644
--- a/libjava/java/awt/image/RGBImageFilter.java
+++ b/libjava/java/awt/image/RGBImageFilter.java
@@ -83,7 +83,7 @@ public abstract class RGBImageFilter extends ImageFilter
}
else {
consumer.setColorModel(ColorModel.getRGBdefault());
- }
+ }
}
/**
diff --git a/libjava/java/awt/image/ReplicateScaleFilter.java b/libjava/java/awt/image/ReplicateScaleFilter.java
index a572da7c3bd..091909d5bea 100644
--- a/libjava/java/awt/image/ReplicateScaleFilter.java
+++ b/libjava/java/awt/image/ReplicateScaleFilter.java
@@ -201,10 +201,10 @@ public class ReplicateScaleFilter extends ImageFilter
model, destPixels, 0, destScansize);
}
- protected byte[] replicatePixels(int srcx, int srcy, int srcw, int srch,
- ColorModel model, byte[] srcPixels,
- int srcOffset, int srcScansize,
- double rx, double ry, int destScansize)
+ private byte[] replicatePixels(int srcx, int srcy, int srcw, int srch,
+ ColorModel model, byte[] srcPixels,
+ int srcOffset, int srcScansize,
+ double rx, double ry, int destScansize)
{
byte[] destPixels =
new byte[(int) Math.ceil(srcw/rx) * (int) Math.ceil(srch/ry)];
@@ -221,10 +221,10 @@ public class ReplicateScaleFilter extends ImageFilter
return destPixels;
}
- protected int[] replicatePixels(int srcx, int srcy, int srcw, int srch,
- ColorModel model, int[] srcPixels,
- int srcOffset, int srcScansize,
- double rx, double ry, int destScansize)
+ private int[] replicatePixels(int srcx, int srcy, int srcw, int srch,
+ ColorModel model, int[] srcPixels,
+ int srcOffset, int srcScansize,
+ double rx, double ry, int destScansize)
{
int[] destPixels =
new int[(int) Math.ceil(srcw/rx) * (int) Math.ceil(srch/ry)];
diff --git a/libjava/java/awt/peer/RobotPeer.java b/libjava/java/awt/peer/RobotPeer.java
index 2daa14d5e11..a187fc0217d 100644
--- a/libjava/java/awt/peer/RobotPeer.java
+++ b/libjava/java/awt/peer/RobotPeer.java
@@ -43,12 +43,12 @@ import java.awt.Rectangle;
public interface RobotPeer
{
void mouseMove (int x, int y);
- void mousePress (int x);
- void mouseRelease (int x);
- void mouseWheel (int x);
- void keyPress (int x);
- void keyRelease (int x);
+ void mousePress (int buttons);
+ void mouseRelease (int buttons);
+ void mouseWheel (int wheelAmt);
+ void keyPress (int keycode);
+ void keyRelease (int keycode);
int getRGBPixel (int x, int y);
- int[] getRGBPixels (Rectangle r);
+ int[] getRGBPixels (Rectangle screen);
} // interface RobotPeer
diff --git a/libjava/java/awt/print/Book.java b/libjava/java/awt/print/Book.java
index 9bdd7d6fd34..41f360beca0 100644
--- a/libjava/java/awt/print/Book.java
+++ b/libjava/java/awt/print/Book.java
@@ -1,5 +1,5 @@
/* Book.java -- A mixed group of pages to print.
- Copyright (C) 1999 Free Software Foundation, Inc.
+ Copyright (C) 1999, 2004 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -41,146 +41,119 @@ package java.awt.print;
import java.util.Vector;
/**
- * This class allows documents to be created with different paper types,
- * page formatters, and painters.
- *
- * @author Aaron M. Renn (arenn@urbanophile.com)
- */
-public class Book implements Pageable
-{
-
-/*
- * Instance Variables
- */
-
-// Painter objects for the book
-Vector printables = new Vector();
-
-// Page formats for the book
-Vector page_formats = new Vector();
-
-/*************************************************************************/
-
-/*
- * Constructors
+ * This class allows documents to be created with different paper types,
+ * page formatters, and painters.
+ *
+ * @author Aaron M. Renn (arenn@urbanophile.com)
*/
-
-/**
- * Initializes a new instance of <code>Book</code> that is empty.
- */
-public
-Book()
-{
- ;
-}
-
-/*************************************************************************/
-
-/**
- * Returns the number of pages in this book.
- *
- * @return The number of pages in this book.
- */
-public int
-getNumberOfPages()
-{
- return(printables.size());
-}
-
-/*************************************************************************/
-
-/**
- * This method returns the <code>PageFormat</code> object for the
- * specified page.
- *
- * @param page_number The number of the page to get information for, where
- * page numbers start at 0.
- *
- * @return The <code>PageFormat</code> object for the specified page.
- *
- * @exception IndexOutOfBoundsException If the page number is not valid.
- */
-public PageFormat
-getPageFormat(int page_number)
-{
- return((PageFormat)page_formats.elementAt(page_number));
-}
-
-/*************************************************************************/
-
-/**
- * This method returns the <code>Printable</code> object for the
- * specified page.
- *
- * @param page_number The number of the page to get information for, where
- * page numbers start at 0.
- *
- * @return The <code>Printable</code> object for the specified page.
- *
- * @exception IndexOutOfBoundsException If the page number is not valid.
- */
-public Printable
-getPrintable(int page_number)
-{
- return((Printable)printables.elementAt(page_number));
-}
-
-/*************************************************************************/
-
-/**
- * This method appends a page to the end of the book.
- *
- * @param printable The <code>Printable</code> for this page.
- * @param page_format The <code>PageFormat</code> for this page.
- *
- * @exception NullPointerException If either argument is <code>null</code>.
- */
-public void
-append(Printable printable, PageFormat page_format)
-{
- append(printable, page_format, 1);
-}
-
-/*************************************************************************/
-
-/**
- * This method appends the specified number of pages to the end of the book.
- * Each one will be associated with the specified <code>Printable</code>
- * and <code>PageFormat</code>.
- *
- * @param printable The <code>Printable</code> for this page.
- * @param page_format The <code>PageFormat</code> for this page.
- * @param num_pages The number of pages to append.
- *
- * @exception NullPointerException If any argument is <code>null</code>.
- */
-public void
-append(Printable printable, PageFormat page_format, int num_pages)
-{
- for (int i = 0; i < num_pages; i++)
- {
- printables.addElement(printable);
- page_formats.addElement(page_format);
- }
-}
-
-/*************************************************************************/
-
-/**
- * This method changes the <code>Printable</code> and <code>PageFormat</code>
- * for the specified page. The page must already exist or an exception
- * will be thrown.
- *
- * @param page_num The page number to alter.
- * @param printable The new <code>Printable</code> for the page.
- * @param page_format The new <code>PageFormat</code> for the page.
- *
- * @throws IndexOutOfBoundsException If the specified page does not exist.
- */
-public void
-setPage(int page_num, Printable printable, PageFormat page_format)
+public class Book implements Pageable
{
- printables.setElementAt(printable, page_num);
- page_formats.setElementAt(page_format, page_num);
-}
+ /**
+ * Painter objects for the book.
+ */
+ Vector printables = new Vector();
+
+ /**
+ * Page formats for the book.
+ */
+ Vector page_formats = new Vector();
+
+ /**
+ * Initializes a new instance of <code>Book</code> that is empty.
+ */
+ public Book()
+ {
+ }
+
+ /**
+ * Returns the number of pages in this book.
+ *
+ * @return The number of pages in this book.
+ */
+ public int getNumberOfPages()
+ {
+ return printables.size();
+ }
+
+ /**
+ * This method returns the <code>PageFormat</code> object for the
+ * specified page.
+ *
+ * @param page_number The number of the page to get information for, where
+ * page numbers start at 0.
+ *
+ * @return The <code>PageFormat</code> object for the specified page.
+ *
+ * @exception IndexOutOfBoundsException If the page number is not valid.
+ */
+ public PageFormat getPageFormat(int page_number)
+ {
+ return (PageFormat) page_formats.elementAt(page_number);
+ }
+
+ /**
+ * This method returns the <code>Printable</code> object for the
+ * specified page.
+ *
+ * @param page_number The number of the page to get information for, where
+ * page numbers start at 0.
+ *
+ * @return The <code>Printable</code> object for the specified page.
+ *
+ * @exception IndexOutOfBoundsException If the page number is not valid.
+ */
+ public Printable getPrintable(int page_number)
+ {
+ return (Printable) printables.elementAt(page_number);
+ }
+
+ /**
+ * This method appends a page to the end of the book.
+ *
+ * @param printable The <code>Printable</code> for this page.
+ * @param page_format The <code>PageFormat</code> for this page.
+ *
+ * @exception NullPointerException If either argument is <code>null</code>.
+ */
+ public void append(Printable printable, PageFormat page_format)
+ {
+ append(printable, page_format, 1);
+ }
+
+ /**
+ * This method appends the specified number of pages to the end of the book.
+ * Each one will be associated with the specified <code>Printable</code>
+ * and <code>PageFormat</code>.
+ *
+ * @param printable The <code>Printable</code> for this page.
+ * @param page_format The <code>PageFormat</code> for this page.
+ * @param num_pages The number of pages to append.
+ *
+ * @exception NullPointerException If any argument is <code>null</code>.
+ */
+ public void append(Printable printable, PageFormat page_format, int num_pages)
+ {
+ for (int i = 0; i < num_pages; i++)
+ {
+ printables.addElement(printable);
+ page_formats.addElement(page_format);
+ }
+ }
+
+ /**
+ * This method changes the <code>Printable</code> and <code>PageFormat</code>
+ * for the specified page. The page must already exist or an exception
+ * will be thrown.
+ *
+ * @param page_num The page number to alter.
+ * @param printable The new <code>Printable</code> for the page.
+ * @param page_format The new <code>PageFormat</code> for the page.
+ *
+ * @throws IndexOutOfBoundsException If the specified page does not exist.
+ */
+ public void setPage(int page_num, Printable printable, PageFormat page_format)
+ {
+ printables.setElementAt(printable, page_num);
+ page_formats.setElementAt(page_format, page_num);
+ }
}
diff --git a/libjava/java/awt/print/PrinterJob.java b/libjava/java/awt/print/PrinterJob.java
index 8998aa0ff89..bc5cfcd5a1b 100644
--- a/libjava/java/awt/print/PrinterJob.java
+++ b/libjava/java/awt/print/PrinterJob.java
@@ -1,5 +1,5 @@
/* PrinterJob.java -- This job is the printer control class
- Copyright (C) 1999, 2004 Free Software Foundation, Inc.
+ Copyright (C) 1999, 2004, 2005 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -38,10 +38,9 @@ exception statement from your version. */
package java.awt.print;
-import javax.print.DocFlavor;
+import java.awt.HeadlessException;
+
import javax.print.PrintService;
-import javax.print.PrintServiceLookup;
-//import javax.print.StreamPrintServiceFactory;
import javax.print.attribute.PrintRequestAttributeSet;
/**
@@ -61,7 +60,7 @@ public abstract class PrinterJob
*/
public static PrinterJob getPrinterJob()
{
- // FIXME: Need to fix this to load a default implementation instance.
+ // FIXME: Need to fix this to load a default implementation instance.
return null;
}
@@ -149,7 +148,8 @@ public abstract class PrinterJob
*
* @return The modified <code>PageFormat</code>.
*/
- public abstract PageFormat pageDialog(PageFormat page_format);
+ public abstract PageFormat pageDialog(PageFormat page_format)
+ throws HeadlessException;
/**
* Prints the pages.
@@ -169,7 +169,8 @@ public abstract class PrinterJob
* @return <code>false</code> if the user cancels the dialog box,
* <code>true</code> otherwise.
*/
- public abstract boolean printDialog();
+ public abstract boolean printDialog()
+ throws HeadlessException;
/**
* Displays a dialog box to the user which allows the print job
@@ -178,7 +179,8 @@ public abstract class PrinterJob
* @return <code>false</code> if the user cancels the dialog box,
* <code>true</code> otherwise.
*/
- public abstract boolean printDialog(PrintRequestAttributeSet attributes);
+ public abstract boolean printDialog(PrintRequestAttributeSet attributes)
+ throws HeadlessException;
/**
* This sets the pages that are to be printed.
OpenPOWER on IntegriCloud