PatchSet 7285 Date: 2006/05/10 15:43:03 Author: riccardo Branch: HEAD Tag: (none) Log: improved focus event and refactored some fields to match classpath
Members: ChangeLog:1.4789->1.4790 libraries/javalib/awt-implementations/kaffe/java/awt/Component.java:1.9->1.10 libraries/javalib/awt-implementations/kaffe/java/awt/FocusEvt.java:1.1->1.2 libraries/javalib/awt-implementations/kaffe/java/awt/List.java:1.1->1.2 libraries/javalib/awt-implementations/kaffe/java/awt/RowCanvas.java:1.2->1.3 libraries/javalib/awt-implementations/kaffe/java/awt/TextArea.java:1.1->1.2 libraries/javalib/awt-implementations/kaffe/java/awt/event/FocusEvent.java:1.1->1.2 Index: kaffe/ChangeLog diff -u kaffe/ChangeLog:1.4789 kaffe/ChangeLog:1.4790 --- kaffe/ChangeLog:1.4789 Fri May 5 23:35:03 2006 +++ kaffe/ChangeLog Wed May 10 15:43:03 2006 @@ -1,3 +1,13 @@ +2006-05-10 Riccardo Mottola <[EMAIL PROTECTED]> + + * libraries/javalib/awt-implementations/kaffe/java/awt/Component.java, + libraries/javalib/awt-implementations/kaffe/java/awt/FocusEvt.java, + libraries/javalib/awt-implementations/kaffe/java/awt/List.java, + libraries/javalib/awt-implementations/kaffe/java/awt/RowCanvas.java, + libraries/javalib/awt-implementations/kaffe/java/awt/TextArea.java, + libraries/javalib/awt-implementations/kaffe/java/awt/event/FocusEvent.java: + improved focus event and refactored some fields to match classpath + 2006-05-06 Riccardo Mottola <[EMAIL PROTECTED]> * libraries/javalib/awt-implementations/kaffe/java/awt/FileDialog.java: Index: kaffe/libraries/javalib/awt-implementations/kaffe/java/awt/Component.java diff -u kaffe/libraries/javalib/awt-implementations/kaffe/java/awt/Component.java:1.9 kaffe/libraries/javalib/awt-implementations/kaffe/java/awt/Component.java:1.10 --- kaffe/libraries/javalib/awt-implementations/kaffe/java/awt/Component.java:1.9 Tue May 2 14:32:32 2006 +++ kaffe/libraries/javalib/awt-implementations/kaffe/java/awt/Component.java Wed May 10 15:43:09 2006 @@ -24,6 +24,11 @@ import java.awt.event.ContainerEvent; import java.awt.event.FocusEvent; import java.awt.event.FocusListener; +import java.awt.event.HierarchyBoundsListener; +import java.awt.event.HierarchyEvent; +import java.awt.event.HierarchyListener; +import java.awt.event.InputMethodEvent; +import java.awt.event.InputMethodListener; import java.awt.event.ItemEvent; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; @@ -68,11 +73,6 @@ Color bgClr; Font font; Cursor cursor; - ComponentListener cmpListener; - KeyListener keyListener; - FocusListener focusListener; - MouseListener mouseListener; - MouseMotionListener motionListener; String name; int eventMask; Locale locale; @@ -113,6 +113,52 @@ final static int IS_MOUSE_AWARE = 0x10000; final static int IS_TEMP_HIDDEN = 0x20000; final static int IS_SHOWING = IS_ADD_NOTIFIED | IS_PARENT_SHOWING | IS_VISIBLE; + + // Guess what - listeners are special cased in serialization. See + // readObject and writeObject. + + /** Component listener chain. */ + transient ComponentListener componentListener; + + /** Focus listener chain. */ + transient FocusListener focusListener; + + /** Key listener chain. */ + transient KeyListener keyListener; + + /** Mouse listener chain. */ + transient MouseListener mouseListener; + + /** Mouse motion listener chain. */ + transient MouseMotionListener mouseMotionListener; + + /** + * Mouse wheel listener chain. + * + * @since 1.4 + */ + transient MouseWheelListener mouseWheelListener; + + /** + * Input method listener chain. + * + * @since 1.2 + */ + transient InputMethodListener inputMethodListener; + + /** + * Hierarcy listener chain. + * + * @since 1.3 + */ + transient HierarchyListener hierarchyListener; + + /** + * Hierarcy bounds listener chain. + * + * @since 1.3 + */ + transient HierarchyBoundsListener hierarchyBoundsListener; /** The associated native peer. */ transient ComponentPeer peer; @@ -244,7 +290,7 @@ } public void addComponentListener ( ComponentListener newListener ) { - cmpListener = AWTEventMulticaster.add( cmpListener, newListener); + componentListener = AWTEventMulticaster.add( componentListener, newListener); } public void addFocusListener ( FocusListener newListener ) { @@ -262,7 +308,7 @@ } public void addMouseMotionListener ( MouseMotionListener newListener ) { - motionListener = AWTEventMulticaster.add( motionListener, newListener); + mouseMotionListener = AWTEventMulticaster.add( mouseMotionListener, newListener); flags |= IS_MOUSE_AWARE; } @@ -315,7 +361,7 @@ void checkMouseAware () { if ( ((eventMask & AWTEvent.DISABLED_MASK) == 0) && ((mouseListener != null) || - (motionListener != null) || + (mouseMotionListener != null) || (eventMask & (AWTEvent.MOUSE_EVENT_MASK|AWTEvent.MOUSE_MOTION_EVENT_MASK)) != 0 || (flags & IS_OLD_EVENT) != 0 )) { flags |= IS_MOUSE_AWARE; @@ -382,15 +428,130 @@ dispatchEventImpl( evt); } -void dispatchEventImpl ( AWTEvent event ) { - // A hidden method that seems to be called automatically by the JDKs - // 'final' dispatchEvent() method. We just provide it to get some more - // compatibility (in case dispatchEvent is called explicitly), but - // we don't route all events through it (since this is a private, - // undocumented method) - event.dispatch(); +/** +* Implementation of dispatchEvent. Allows trusted package classes + * to dispatch additional events first. This implementation first + * translates <code>e</code> to an AWT 1.0 event and sends the + * result to [EMAIL PROTECTED] #postEvent}. If the AWT 1.0 event is not + * handled, and events of type <code>e</code> are enabled for this + * component, e is passed on to [EMAIL PROTECTED] #processEvent}. + * + * @param e the event to dispatch + */ + +void dispatchEventImpl(AWTEvent e) +{ + // This boolean tells us not to process focus events when the focus + // opposite component is the same as the focus component. + boolean ignoreFocus = + (e instanceof FocusEvent && + ((FocusEvent)e).getComponent() == ((FocusEvent)e).getOppositeComponent()); + + if (eventTypeEnabled (e.id)) + { + if (e.id != PaintEvent.PAINT && e.id != PaintEvent.UPDATE + && !ignoreFocus) + processEvent(e); + + // the trick we use to communicate between dispatch and redispatch + // is to have KeyboardFocusManager.redispatch synchronize on the + // object itself. we then do not redispatch to KeyboardFocusManager + // if we are already holding the lock. + if (! Thread.holdsLock(e)) + { + switch (e.id) + { + case WindowEvent.WINDOW_GAINED_FOCUS: + case WindowEvent.WINDOW_LOST_FOCUS: + case KeyEvent.KEY_PRESSED: + case KeyEvent.KEY_RELEASED: + case KeyEvent.KEY_TYPED: + case FocusEvent.FOCUS_GAINED: + case FocusEvent.FOCUS_LOST: + if (KeyboardFocusManager + .getCurrentKeyboardFocusManager() + .dispatchEvent(e)) + return; + case MouseEvent.MOUSE_PRESSED: + if (isLightweight() && !e.isConsumed()) + requestFocus(); + break; + } + } + } + + // here we differ from classpath since we have no peers + e.dispatch(); +} + + +/** +* Tells whether or not an event type is enabled. + */ +boolean eventTypeEnabled (int type) +{ + if (type > AWTEvent.RESERVED_ID_MAX) + return true; + + switch (type) + { + case HierarchyEvent.HIERARCHY_CHANGED: + return (hierarchyListener != null + || (eventMask & AWTEvent.HIERARCHY_EVENT_MASK) != 0); + + case HierarchyEvent.ANCESTOR_MOVED: + case HierarchyEvent.ANCESTOR_RESIZED: + return (hierarchyBoundsListener != null + || (eventMask & AWTEvent.HIERARCHY_BOUNDS_EVENT_MASK) != 0); + + case ComponentEvent.COMPONENT_HIDDEN: + case ComponentEvent.COMPONENT_MOVED: + case ComponentEvent.COMPONENT_RESIZED: + case ComponentEvent.COMPONENT_SHOWN: + return (componentListener != null + || (eventMask & AWTEvent.COMPONENT_EVENT_MASK) != 0); + + case KeyEvent.KEY_PRESSED: + case KeyEvent.KEY_RELEASED: + case KeyEvent.KEY_TYPED: + return (keyListener != null + || (eventMask & AWTEvent.KEY_EVENT_MASK) != 0); + + case MouseEvent.MOUSE_CLICKED: + case MouseEvent.MOUSE_ENTERED: + case MouseEvent.MOUSE_EXITED: + case MouseEvent.MOUSE_PRESSED: + case MouseEvent.MOUSE_RELEASED: + return (mouseListener != null + || (eventMask & AWTEvent.MOUSE_EVENT_MASK) != 0); + case MouseEvent.MOUSE_MOVED: + case MouseEvent.MOUSE_DRAGGED: + return (mouseMotionListener != null + || (eventMask & AWTEvent.MOUSE_MOTION_EVENT_MASK) != 0); + case MouseEvent.MOUSE_WHEEL: + return (mouseWheelListener != null + || (eventMask & AWTEvent.MOUSE_WHEEL_EVENT_MASK) != 0); + + case FocusEvent.FOCUS_GAINED: + case FocusEvent.FOCUS_LOST: + return (focusListener != null + || (eventMask & AWTEvent.FOCUS_EVENT_MASK) != 0); + + case InputMethodEvent.INPUT_METHOD_TEXT_CHANGED: + case InputMethodEvent.CARET_POSITION_CHANGED: + return (inputMethodListener != null + || (eventMask & AWTEvent.INPUT_METHOD_EVENT_MASK) != 0); + + case PaintEvent.PAINT: + case PaintEvent.UPDATE: + return (eventMask & AWTEvent.PAINT_EVENT_MASK) != 0; + + default: + return false; + } } + public void doLayout () { layout(); } @@ -717,7 +878,7 @@ parent.invalidate(); } - if ( (cmpListener != null) || (eventMask & AWTEvent.COMPONENT_EVENT_MASK) != 0 ){ + if ( (componentListener != null) || (eventMask & AWTEvent.COMPONENT_EVENT_MASK) != 0 ){ Toolkit.eventQueue.postEvent( ComponentEvt.getEvent( this, ComponentEvent.COMPONENT_HIDDEN)); } @@ -1136,7 +1297,7 @@ } void process ( ComponentEvent e ) { - if ( (cmpListener != null) || (eventMask & AWTEvent.COMPONENT_EVENT_MASK) != 0) + if ( (componentListener != null) || (eventMask & AWTEvent.COMPONENT_EVENT_MASK) != 0) processEvent( e); } @@ -1190,19 +1351,19 @@ protected void processComponentEvent ( ComponentEvent event ) { - if ( cmpListener != null ){ + if ( componentListener != null ){ switch ( event.getID() ) { case ComponentEvent.COMPONENT_RESIZED: - cmpListener.componentResized( event); + componentListener.componentResized( event); break; case ComponentEvent.COMPONENT_MOVED: - cmpListener.componentMoved( event); + componentListener.componentMoved( event); break; case ComponentEvent.COMPONENT_SHOWN: - cmpListener.componentShown( event); + componentListener.componentShown( event); break; case ComponentEvent.COMPONENT_HIDDEN: - cmpListener.componentHidden( event); + componentListener.componentHidden( event); break; } } @@ -1334,7 +1495,7 @@ return; } - if ( (motionListener != null) || (eventMask & AWTEvent.MOUSE_MOTION_EVENT_MASK) != 0) + if ( (mouseMotionListener != null) || (eventMask & AWTEvent.MOUSE_MOTION_EVENT_MASK) != 0) processEvent( e); if ( (flags & IS_OLD_EVENT) != 0 ){ @@ -1379,13 +1540,13 @@ } protected void processMouseMotionEvent ( MouseEvent event ) { - if ( motionListener != null ) { + if ( mouseMotionListener != null ) { switch ( event.id ) { case MouseEvent.MOUSE_MOVED: - motionListener.mouseMoved( event); + mouseMotionListener.mouseMoved( event); return; case MouseEvent.MOUSE_DRAGGED: - motionListener.mouseDragged( event); + mouseMotionListener.mouseDragged( event); return; } } @@ -1466,7 +1627,7 @@ } public void removeComponentListener ( ComponentListener client ) { - cmpListener = AWTEventMulticaster.remove( cmpListener, client); + componentListener = AWTEventMulticaster.remove( componentListener, client); } public void removeFocusListener ( FocusListener listener ) { @@ -1484,7 +1645,7 @@ } public void removeMouseMotionListener ( MouseMotionListener listener ) { - motionListener = AWTEventMulticaster.remove( motionListener, listener); + mouseMotionListener = AWTEventMulticaster.remove( mouseMotionListener, listener); checkMouseAware(); } @@ -1612,7 +1773,7 @@ x = xNew; y = yNew; width = wNew; height = hNew; invalidate(); - if ( (cmpListener != null) || (eventMask & AWTEvent.COMPONENT_EVENT_MASK) != 0 ){ + if ( (componentListener != null) || (eventMask & AWTEvent.COMPONENT_EVENT_MASK) != 0 ){ Toolkit.eventQueue.postEvent( ComponentEvt.getEvent( this, id)); } propagateReshape(); @@ -1627,7 +1788,7 @@ x = xNew; y = yNew; width = wNew; height = hNew; invalidate(); - if ( (cmpListener != null) || (eventMask & AWTEvent.COMPONENT_EVENT_MASK) != 0 ){ + if ( (componentListener != null) || (eventMask & AWTEvent.COMPONENT_EVENT_MASK) != 0 ){ Toolkit.eventQueue.postEvent( ComponentEvt.getEvent( this, id)); } propagateReshape(); @@ -1811,7 +1972,7 @@ parent.invalidate(); } - if ( (cmpListener != null) || (eventMask & AWTEvent.COMPONENT_EVENT_MASK) != 0 ){ + if ( (componentListener != null) || (eventMask & AWTEvent.COMPONENT_EVENT_MASK) != 0 ){ Toolkit.eventQueue.postEvent( ComponentEvt.getEvent( this, ComponentEvent.COMPONENT_SHOWN)); } Index: kaffe/libraries/javalib/awt-implementations/kaffe/java/awt/FocusEvt.java diff -u kaffe/libraries/javalib/awt-implementations/kaffe/java/awt/FocusEvt.java:1.1 kaffe/libraries/javalib/awt-implementations/kaffe/java/awt/FocusEvt.java:1.2 --- kaffe/libraries/javalib/awt-implementations/kaffe/java/awt/FocusEvt.java:1.1 Thu Jul 22 19:19:31 2004 +++ kaffe/libraries/javalib/awt-implementations/kaffe/java/awt/FocusEvt.java Wed May 10 15:43:09 2006 @@ -99,7 +99,7 @@ e.id = id; e.source = source; - e.isTemporary = isTemporary; + e.temporary = isTemporary; return e; } @@ -121,7 +121,7 @@ e.id = id; e.source = source; - e.isTemporary = isTemporary; + e.temporary = isTemporary; } if ( (Toolkit.flags & Toolkit.NATIVE_DISPATCHER_LOOP) != 0 ) { Index: kaffe/libraries/javalib/awt-implementations/kaffe/java/awt/List.java diff -u kaffe/libraries/javalib/awt-implementations/kaffe/java/awt/List.java:1.1 kaffe/libraries/javalib/awt-implementations/kaffe/java/awt/List.java:1.2 --- kaffe/libraries/javalib/awt-implementations/kaffe/java/awt/List.java:1.1 Thu Jul 22 19:19:32 2004 +++ kaffe/libraries/javalib/awt-implementations/kaffe/java/awt/List.java Wed May 10 15:43:09 2006 @@ -169,7 +169,7 @@ } public void mouseDragged( MouseEvent e) { - if ( this.parent.motionListener != null ){ + if ( this.parent.mouseMotionListener != null ){ // unlikely, check listener first redirectMotionEvent( e); } @@ -192,7 +192,7 @@ updateFlyOver( row ); } - if ( this.parent.motionListener != null ){ + if ( this.parent.mouseMotionListener != null ){ // unlikely, check listener first redirectMotionEvent( e); } Index: kaffe/libraries/javalib/awt-implementations/kaffe/java/awt/RowCanvas.java diff -u kaffe/libraries/javalib/awt-implementations/kaffe/java/awt/RowCanvas.java:1.2 kaffe/libraries/javalib/awt-implementations/kaffe/java/awt/RowCanvas.java:1.3 --- kaffe/libraries/javalib/awt-implementations/kaffe/java/awt/RowCanvas.java:1.2 Tue Apr 25 22:14:05 2006 +++ kaffe/libraries/javalib/awt-implementations/kaffe/java/awt/RowCanvas.java Wed May 10 15:43:09 2006 @@ -237,7 +237,7 @@ } void redirectMotionEvent( MouseEvent e) { - if ( parent.motionListener != null ){ + if ( parent.mouseMotionListener != null ){ e.retarget( parent, x, y); parent.process( e); Index: kaffe/libraries/javalib/awt-implementations/kaffe/java/awt/TextArea.java diff -u kaffe/libraries/javalib/awt-implementations/kaffe/java/awt/TextArea.java:1.1 kaffe/libraries/javalib/awt-implementations/kaffe/java/awt/TextArea.java:1.2 --- kaffe/libraries/javalib/awt-implementations/kaffe/java/awt/TextArea.java:1.1 Thu Jul 22 19:19:33 2004 +++ kaffe/libraries/javalib/awt-implementations/kaffe/java/awt/TextArea.java Wed May 10 15:43:10 2006 @@ -588,7 +588,7 @@ int x = getCol( y, e.getX() ); updateSel( x, y, true); - if ( this.parent.motionListener != null ){ + if ( this.parent.mouseMotionListener != null ){ // unlikely, check motionListener first redirectMotionEvent( e); } @@ -603,7 +603,7 @@ } public void mouseMoved( MouseEvent e) { - if ( this.parent.motionListener != null ){ + if ( this.parent.mouseMotionListener != null ){ // unlikely, check listener first redirectMotionEvent( e); } Index: kaffe/libraries/javalib/awt-implementations/kaffe/java/awt/event/FocusEvent.java diff -u kaffe/libraries/javalib/awt-implementations/kaffe/java/awt/event/FocusEvent.java:1.1 kaffe/libraries/javalib/awt-implementations/kaffe/java/awt/event/FocusEvent.java:1.2 --- kaffe/libraries/javalib/awt-implementations/kaffe/java/awt/event/FocusEvent.java:1.1 Thu Jul 22 19:19:42 2004 +++ kaffe/libraries/javalib/awt-implementations/kaffe/java/awt/event/FocusEvent.java Wed May 10 15:43:10 2006 @@ -1,59 +1,181 @@ +/* FocusEvent.java -- generated for a focus change + Copyright (C) 1999, 2002, 2005 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +General Public License for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + + package java.awt.event; import java.awt.Component; -import java.awt.Event; /** + * This class represents an event generated when a focus change occurs for a + * component. There are both temporary changes, such as when focus is stolen + * during a sroll then returned, and permanent changes, such as when the user + * TABs through focusable components. * - * Copyright (c) 1998 - * Transvirtual Technologies Inc. All rights reserved. - * - * See the file "license.terms" for information on usage and redistribution - * of this file. - * @author P.C.Mehlitz + * @author Aaron M. Renn ([EMAIL PROTECTED]) + * @see FocusAdapter + * @see FocusListener + * @since 1.1 + * @status updated to 1.4 */ -public class FocusEvent - extends ComponentEvent +public class FocusEvent extends ComponentEvent { - protected boolean isTemporary; - final public static int FOCUS_FIRST = 1004; - final public static int FOCUS_LAST = 1005; - final public static int FOCUS_GAINED = FOCUS_FIRST; - final public static int FOCUS_LOST = FOCUS_FIRST + 1; - private static final long serialVersionUID = 523753786457416396L; - -public FocusEvent ( Component src, int evtId ) { - super( src, evtId); -} - -public FocusEvent ( Component src, int evtId, boolean isTemporary ) { - super( src, evtId); - this.isTemporary = isTemporary; -} - -protected Event initOldEvent ( Event e ) { - e.target = source; - e.id = id; - - return e; -} - -public boolean isTemporary() { - return isTemporary; -} - -public String paramString() { - String s; - - switch ( id ) { - case FOCUS_GAINED: s = "FOCUS_GAINED"; break; - case FOCUS_LOST: s = "FOCUS_LOST"; break; - default: s = "unknown type"; break; - } - - if ( isTemporary ) - s += ", temporary"; - - return s; -} -} + /** + * Compatible with JDK 1.1+. + */ + private static final long serialVersionUID = 523753786457416396L; + + /** This is the first id in the range of ids used by this class. */ + public static final int FOCUS_FIRST = 1004; + + /** This is the last id in the range of ids used by this class. */ + public static final int FOCUS_LAST = 1005; + + /** This is the event id for a focus gained event. */ + public static final int FOCUS_GAINED = 1004; + + /** This is the event id for a focus lost event. */ + public static final int FOCUS_LOST = 1005; + + /** + * Indicates whether or not the focus change is temporary. + * + * @see #isTemporary() + * @serial true if the focus change is temporary + */ + protected boolean temporary; + + /** + * The other component which is giving up or stealing focus from this + * component, if known. + * + * @see #getOppositeComponent() + * @serial the component with the opposite focus event, or null + * @since 1.4 + */ + private final Component opposite; + + /** + * Initializes a new instance of <code>FocusEvent</code> with the + * specified source, id, temporary status, and opposite counterpart. Note + * that an invalid id leads to unspecified results. + * + * @param source the component that is gaining or losing focus + * @param id the event id + * @param temporary true if the focus change is temporary + * @param opposite the component receiving the opposite focus event, or null + * @throws IllegalArgumentException if source is null + */ + public FocusEvent(Component source, int id, boolean temporary, + Component opposite) + { + super(source, id); + this.temporary = temporary; + this.opposite = opposite; + } + + /** + * Initializes a new instance of <code>FocusEvent</code> with the + * specified source, id, and temporary status. Note that an invalid id + * leads to unspecified results. + * + * @param source the component that is gaining or losing focus + * @param id the event id + * @param temporary true if the focus change is temporary + * @throws IllegalArgumentException if source is null + */ + public FocusEvent(Component source, int id, boolean temporary) + { + this(source, id, temporary, null); + } + + /** + * Initializes a new instance of <code>FocusEvent</code> with the + * specified source and id. Note that an invalid id leads to unspecified + * results. + * + * @param source the component that is gaining or losing focus + * @param id the event id + * @throws IllegalArgumentException if source is null + */ + public FocusEvent(Component source, int id) + { + this(source, id, false, null); + } + + /** + * This method tests whether or not the focus change is temporary or + * permanent. + * + * @return true if the focus change is temporary + */ + public boolean isTemporary() + { + return temporary; + } + + /** + * Returns the component which received the opposite focus event. If this + * component gained focus, the opposite lost focus; likewise if this + * component is giving up focus, the opposite is gaining it. If this + * information is unknown, perhaps because the opposite is a native + * application, this returns null. + * + * @return the component with the focus opposite, or null + * @since 1.4 + */ + public Component getOppositeComponent() + { + return opposite; + } + + /** + * Returns a string identifying this event. This is formatted as: + * <code>(getID() == FOCUS_GAINED ? "FOCUS_GAINED" : "FOCUS_LOST") + * + (isTemporary() ? ",temporary," : ",permanent,") + "opposite=" + * + getOppositeComponent()</code>. + * + * @return a string identifying this event + */ + public String paramString() + { + return (id == FOCUS_GAINED ? "FOCUS_GAINED" + : id == FOCUS_LOST ? "FOCUS_LOST" : "unknown type") + + (temporary ? ",temporary,opposite=" : ",permanent,opposite=") + + opposite; + } +} // class FocusEvent _______________________________________________ kaffe mailing list kaffe@kaffe.org http://kaffe.org/cgi-bin/mailman/listinfo/kaffe