1 |
/* Component.java -- a graphics component |
/* Component.java -- a graphics component |
2 |
Copyright (C) 1999, 2000, 2001, 2002, 2003 Free Software Foundation |
Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation |
3 |
|
|
4 |
This file is part of GNU Classpath. |
This file is part of GNU Classpath. |
5 |
|
|
47 |
import java.awt.event.HierarchyBoundsListener; |
import java.awt.event.HierarchyBoundsListener; |
48 |
import java.awt.event.HierarchyEvent; |
import java.awt.event.HierarchyEvent; |
49 |
import java.awt.event.HierarchyListener; |
import java.awt.event.HierarchyListener; |
|
import java.awt.event.KeyEvent; |
|
|
import java.awt.event.KeyListener; |
|
50 |
import java.awt.event.InputEvent; |
import java.awt.event.InputEvent; |
51 |
import java.awt.event.InputMethodEvent; |
import java.awt.event.InputMethodEvent; |
52 |
import java.awt.event.InputMethodListener; |
import java.awt.event.InputMethodListener; |
53 |
|
import java.awt.event.KeyEvent; |
54 |
|
import java.awt.event.KeyListener; |
55 |
import java.awt.event.MouseEvent; |
import java.awt.event.MouseEvent; |
56 |
import java.awt.event.MouseListener; |
import java.awt.event.MouseListener; |
57 |
import java.awt.event.MouseMotionListener; |
import java.awt.event.MouseMotionListener; |
|
import java.awt.event.MouseWheelListener; |
|
58 |
import java.awt.event.MouseWheelEvent; |
import java.awt.event.MouseWheelEvent; |
59 |
|
import java.awt.event.MouseWheelListener; |
60 |
import java.awt.event.PaintEvent; |
import java.awt.event.PaintEvent; |
61 |
|
import java.awt.event.WindowEvent; |
62 |
import java.awt.im.InputContext; |
import java.awt.im.InputContext; |
63 |
import java.awt.im.InputMethodRequests; |
import java.awt.im.InputMethodRequests; |
64 |
import java.awt.image.BufferStrategy; |
import java.awt.image.BufferStrategy; |
70 |
import java.awt.peer.LightweightPeer; |
import java.awt.peer.LightweightPeer; |
71 |
import java.beans.PropertyChangeListener; |
import java.beans.PropertyChangeListener; |
72 |
import java.beans.PropertyChangeSupport; |
import java.beans.PropertyChangeSupport; |
|
import java.io.ObjectInputStream; |
|
73 |
import java.io.IOException; |
import java.io.IOException; |
74 |
|
import java.io.ObjectInputStream; |
75 |
import java.io.ObjectOutputStream; |
import java.io.ObjectOutputStream; |
76 |
import java.io.PrintStream; |
import java.io.PrintStream; |
77 |
import java.io.PrintWriter; |
import java.io.PrintWriter; |
84 |
import java.util.Locale; |
import java.util.Locale; |
85 |
import java.util.Set; |
import java.util.Set; |
86 |
import java.util.Vector; |
import java.util.Vector; |
87 |
|
|
88 |
import javax.accessibility.Accessible; |
import javax.accessibility.Accessible; |
89 |
import javax.accessibility.AccessibleComponent; |
import javax.accessibility.AccessibleComponent; |
90 |
import javax.accessibility.AccessibleContext; |
import javax.accessibility.AccessibleContext; |
294 |
* @see #getLocale() |
* @see #getLocale() |
295 |
* @see #setLocale(Locale) |
* @see #setLocale(Locale) |
296 |
*/ |
*/ |
297 |
Locale locale; |
Locale locale = Locale.getDefault (); |
298 |
|
|
299 |
/** |
/** |
300 |
* True if the object should ignore repaint events (usually because it is |
* True if the object should ignore repaint events (usually because it is |
2271 |
{ |
{ |
2272 |
boolean handled = handleEvent (e); |
boolean handled = handleEvent (e); |
2273 |
|
|
2274 |
if (!handled) |
if (!handled && getParent() != null) |
2275 |
// FIXME: need to translate event coordinates to parent's |
// FIXME: need to translate event coordinates to parent's |
2276 |
// coordinate space. |
// coordinate space. |
2277 |
handled = getParent ().postEvent (e); |
handled = getParent ().postEvent (e); |
3434 |
*/ |
*/ |
3435 |
public boolean isFocusTraversable() |
public boolean isFocusTraversable() |
3436 |
{ |
{ |
3437 |
return enabled && visible && (peer == null || peer.isFocusTraversable()); |
return enabled && visible && (peer == null || isLightweight() || peer.isFocusTraversable()); |
3438 |
} |
} |
3439 |
|
|
3440 |
/** |
/** |
3449 |
} |
} |
3450 |
|
|
3451 |
/** |
/** |
3452 |
* Specify whether this component can receive focus. |
* Specify whether this component can receive focus. This method also |
3453 |
|
* sets the {@link #isFocusTraversableOverridden} field to 1, which |
3454 |
|
* appears to be the undocumented way {@link |
3455 |
|
* DefaultFocusTraversalPolicy#accept()} determines whether to respect |
3456 |
|
* the {@link #isFocusable()} method of the component. |
3457 |
* |
* |
3458 |
* @param focusable the new focusable status |
* @param focusable the new focusable status |
3459 |
* @since 1.4 |
* @since 1.4 |
3462 |
{ |
{ |
3463 |
firePropertyChange("focusable", this.focusable, focusable); |
firePropertyChange("focusable", this.focusable, focusable); |
3464 |
this.focusable = focusable; |
this.focusable = focusable; |
3465 |
|
this.isFocusTraversableOverridden = 1; |
3466 |
} |
} |
3467 |
|
|
3468 |
/** |
/** |
3722 |
Window toplevel = (Window) parent; |
Window toplevel = (Window) parent; |
3723 |
if (toplevel.isFocusableWindow ()) |
if (toplevel.isFocusableWindow ()) |
3724 |
{ |
{ |
3725 |
if (peer != null) |
if (peer != null && !isLightweight()) |
3726 |
// This call will cause a FOCUS_GAINED event to be |
// This call will cause a FOCUS_GAINED event to be |
3727 |
// posted to the system event queue if the native |
// posted to the system event queue if the native |
3728 |
// windowing system grants the focus request. |
// windowing system grants the focus request. |
3808 |
Window toplevel = (Window) parent; |
Window toplevel = (Window) parent; |
3809 |
if (toplevel.isFocusableWindow ()) |
if (toplevel.isFocusableWindow ()) |
3810 |
{ |
{ |
3811 |
if (peer != null) |
if (peer != null && !isLightweight()) |
3812 |
// This call will cause a FOCUS_GAINED event to be |
// This call will cause a FOCUS_GAINED event to be |
3813 |
// posted to the system event queue if the native |
// posted to the system event queue if the native |
3814 |
// windowing system grants the focus request. |
// windowing system grants the focus request. |
3929 |
if (focusedWindow == toplevel) |
if (focusedWindow == toplevel) |
3930 |
{ |
{ |
3931 |
if (peer != null |
if (peer != null |
3932 |
|
&& !isLightweight() |
3933 |
&& !(this instanceof Window)) |
&& !(this instanceof Window)) |
3934 |
// This call will cause a FOCUS_GAINED event to be |
// This call will cause a FOCUS_GAINED event to be |
3935 |
// posted to the system event queue if the native |
// posted to the system event queue if the native |
4507 |
* |
* |
4508 |
* @return an AWT 1.0 event representing e |
* @return an AWT 1.0 event representing e |
4509 |
*/ |
*/ |
4510 |
private Event translateEvent (AWTEvent e) |
static Event translateEvent (AWTEvent e) |
4511 |
{ |
{ |
4512 |
Component target = (Component) e.getSource (); |
Component target = (Component) e.getSource (); |
4513 |
Event translated = null; |
Event translated = null; |
4699 |
* |
* |
4700 |
* @param e the event to dispatch |
* @param e the event to dispatch |
4701 |
*/ |
*/ |
4702 |
|
|
4703 |
void dispatchEventImpl (AWTEvent e) |
void dispatchEventImpl (AWTEvent e) |
4704 |
{ |
{ |
4705 |
Event oldEvent = translateEvent (e); |
Event oldEvent = translateEvent (e); |
4708 |
postEvent (oldEvent); |
postEvent (oldEvent); |
4709 |
|
|
4710 |
if (eventTypeEnabled (e.id)) |
if (eventTypeEnabled (e.id)) |
4711 |
processEvent (e); |
{ |
4712 |
|
// the trick we use to communicate between dispatch and redispatch |
4713 |
|
// is to have KeyboardFocusManager.redispatch synchronize on the |
4714 |
|
// object itself. we then do not redispatch to KeyboardFocusManager |
4715 |
|
// if we are already holding the lock. |
4716 |
|
if (! Thread.holdsLock(e)) |
4717 |
|
{ |
4718 |
|
switch (e.id) |
4719 |
|
{ |
4720 |
|
case WindowEvent.WINDOW_GAINED_FOCUS: |
4721 |
|
case WindowEvent.WINDOW_LOST_FOCUS: |
4722 |
|
case KeyEvent.KEY_PRESSED: |
4723 |
|
case KeyEvent.KEY_RELEASED: |
4724 |
|
case KeyEvent.KEY_TYPED: |
4725 |
|
case FocusEvent.FOCUS_GAINED: |
4726 |
|
case FocusEvent.FOCUS_LOST: |
4727 |
|
if (KeyboardFocusManager |
4728 |
|
.getCurrentKeyboardFocusManager() |
4729 |
|
.dispatchEvent(e)) |
4730 |
|
return; |
4731 |
|
} |
4732 |
|
} |
4733 |
|
processEvent (e); |
4734 |
|
} |
4735 |
} |
} |
4736 |
|
|
4737 |
/** |
/** |