Imported Classpath 0.18.

* sources.am, Makefile.in: Updated.
	* Makefile.am (nat_source_files): Removed natProxy.cc.
	* java/lang/reflect/natProxy.cc: Removed.
	* gnu/classpath/jdwp/VMFrame.java,
	gnu/classpath/jdwp/VMIdManager.java,
	gnu/classpath/jdwp/VMVirtualMachine.java,
	java/lang/reflect/VMProxy.java: New files.

2005-09-23  Thomas Fitzsimmons  <fitzsim@redhat.com>

	* scripts/makemake.tcl (verbose): Add gnu/java/awt/peer/qt to BC
	list.

2005-09-23  Thomas Fitzsimmons  <fitzsim@redhat.com>

	* gnu/java/net/DefaultContentHandlerFactory.java (getContent):
	Remove ClasspathToolkit references.

2005-09-23  Thomas Fitzsimmons  <fitzsim@redhat.com>

	* gnu/awt/xlib/XCanvasPeer.java: Add new peer methods.
	* gnu/awt/xlib/XFramePeer.java: Likewise.
	* gnu/awt/xlib/XGraphicsConfiguration.java: Likewise.

2005-09-23  Thomas Fitzsimmons  <fitzsim@redhat.com>

	* Makefile.am (libgcjawt_la_SOURCES): Remove jawt.c.  Add
	classpath/native/jawt/jawt.c.
	* Makefile.in: Regenerate.
	* jawt.c: Remove file.
	* include/Makefile.am (tool_include__HEADERS): Remove jawt.h and
	jawt_md.h.  Add ../classpath/include/jawt.h and
	../classpath/include/jawt_md.h.
	* include/Makefile.in: Regenerate.
	* include/jawt.h: Regenerate.
	* include/jawt_md.h: Regenerate.

From-SVN: r104586
This commit is contained in:
Tom Tromey
2005-09-23 21:31:04 +00:00
parent 9b044d1951
commit 1ea63ef8be
544 changed files with 34724 additions and 14512 deletions
+210 -113
View File
@@ -42,6 +42,7 @@ import java.awt.event.ContainerEvent;
import java.awt.event.ContainerListener;
import java.awt.event.KeyEvent;
import java.awt.event.MouseEvent;
import java.awt.peer.ComponentPeer;
import java.awt.peer.ContainerPeer;
import java.awt.peer.LightweightPeer;
import java.beans.PropertyChangeListener;
@@ -59,7 +60,8 @@ import java.util.Iterator;
import java.util.Set;
import javax.accessibility.Accessible;
import javax.swing.SwingUtilities;
import gnu.java.awt.AWTUtilities;
/**
* A generic window toolkit object that acts as a container for other objects.
@@ -338,8 +340,12 @@ public class Container extends Component
if (comp.parent != null)
comp.parent.remove(comp);
comp.parent = this;
if (peer != null)
{
// Notify the component that it has a new parent.
comp.addNotify();
if (comp.isLightweight ())
{
enableEvents (comp.eventMask);
@@ -348,7 +354,8 @@ public class Container extends Component
}
}
invalidate();
// Invalidate the layout of the added component and its ancestors.
comp.invalidate();
if (component == null)
component = new Component[4]; // FIXME, better initial size?
@@ -394,6 +401,9 @@ public class Container extends Component
ContainerEvent.COMPONENT_ADDED,
comp);
getToolkit().getSystemEventQueue().postEvent(ce);
// Repaint this container.
repaint();
}
}
}
@@ -429,6 +439,9 @@ public class Container extends Component
ContainerEvent.COMPONENT_REMOVED,
r);
getToolkit().getSystemEventQueue().postEvent(ce);
// Repaint this container.
repaint();
}
}
}
@@ -513,6 +526,11 @@ public class Container extends Component
public void invalidate()
{
super.invalidate();
if (layoutMgr != null && layoutMgr instanceof LayoutManager2)
{
LayoutManager2 lm2 = (LayoutManager2) layoutMgr;
lm2.invalidateLayout(this);
}
}
/**
@@ -534,6 +552,7 @@ public class Container extends Component
*/
void invalidateTree()
{
super.invalidate(); // Clean cached layout state.
for (int i = 0; i < ncomponents; i++)
{
Component comp = component[i];
@@ -541,6 +560,12 @@ public class Container extends Component
if (comp instanceof Container)
((Container) comp).invalidateTree();
}
if (layoutMgr != null && layoutMgr instanceof LayoutManager2)
{
LayoutManager2 lm2 = (LayoutManager2) layoutMgr;
lm2.invalidateLayout(this);
}
}
/**
@@ -596,11 +621,15 @@ public class Container extends Component
public void setFont(Font f)
{
super.setFont(f);
// FIXME: Although it might make more sense to invalidate only
// those children whose font == null, Sun invalidates all children.
// So we'll do the same.
invalidateTree();
if( (f != null && (font == null || !font.equals(f)))
|| f == null)
{
super.setFont(f);
// FIXME: Although it might make more sense to invalidate only
// those children whose font == null, Sun invalidates all children.
// So we'll do the same.
invalidateTree();
}
}
/**
@@ -622,10 +651,21 @@ public class Container extends Component
*/
public Dimension preferredSize()
{
if (layoutMgr != null)
return layoutMgr.preferredLayoutSize (this);
else
return super.preferredSize ();
synchronized(treeLock)
{
if(valid && prefSize != null)
return new Dimension(prefSize);
LayoutManager layout = getLayout();
if (layout != null)
{
Dimension layoutSize = layout.preferredLayoutSize(this);
if(valid)
prefSize = layoutSize;
return new Dimension(layoutSize);
}
else
return super.preferredSize ();
}
}
/**
@@ -647,8 +687,15 @@ public class Container extends Component
*/
public Dimension minimumSize()
{
if (layoutMgr != null)
return layoutMgr.minimumLayoutSize (this);
if(valid && minSize != null)
return new Dimension(minSize);
LayoutManager layout = getLayout();
if (layout != null)
{
minSize = layout.minimumLayoutSize (this);
return minSize;
}
else
return super.minimumSize ();
}
@@ -660,10 +707,15 @@ public class Container extends Component
*/
public Dimension getMaximumSize()
{
if (layoutMgr != null && layoutMgr instanceof LayoutManager2)
if (valid && maxSize != null)
return new Dimension(maxSize);
LayoutManager layout = getLayout();
if (layout != null && layout instanceof LayoutManager2)
{
LayoutManager2 lm2 = (LayoutManager2) layoutMgr;
return lm2.maximumLayoutSize(this);
LayoutManager2 lm2 = (LayoutManager2) layout;
maxSize = lm2.maximumLayoutSize(this);
return maxSize;
}
else
return super.getMaximumSize();
@@ -678,13 +730,7 @@ public class Container extends Component
*/
public float getAlignmentX()
{
if (layoutMgr instanceof LayoutManager2)
{
LayoutManager2 lm2 = (LayoutManager2) layoutMgr;
return lm2.getLayoutAlignmentX(this);
}
else
return super.getAlignmentX();
return super.getAlignmentX();
}
/**
@@ -696,13 +742,7 @@ public class Container extends Component
*/
public float getAlignmentY()
{
if (layoutMgr instanceof LayoutManager2)
{
LayoutManager2 lm2 = (LayoutManager2) layoutMgr;
return lm2.getLayoutAlignmentY(this);
}
else
return super.getAlignmentY();
return super.getAlignmentY();
}
/**
@@ -718,8 +758,7 @@ public class Container extends Component
{
if (!isShowing())
return;
// Paint self first.
super.paint(g);
// Visit heavyweights as well, in case they were
// erased when we cleared the background for this container.
visitChildren(g, GfxPaintVisitor.INSTANCE, false);
@@ -733,10 +772,30 @@ public class Container extends Component
* drawn.
*
* @param g The graphics context for this update.
*
* @specnote The specification suggests that this method forwards the
* update() call to all its lightweight children. Tests show
* that this is not done either in the JDK. The exact behaviour
* seems to be that the background is cleared in heavyweight
* Containers, and all other containers
* directly call paint(), causing the (lightweight) children to
* be painted.
*/
public void update(Graphics g)
{
super.update(g);
// It seems that the JDK clears the background of containers like Panel
// and Window (within this method) but not of 'plain' Containers or
// JComponents. This could
// lead to the assumption that it only clears heavyweight containers.
// However that is not quite true. In a test with a custom Container
// that overrides isLightweight() to return false, the background is
// also not cleared. So we do a check on !(peer instanceof LightweightPeer)
// instead.
ComponentPeer p = peer;
if (p != null && !(p instanceof LightweightPeer))
g.clearRect(0, 0, getWidth(), getHeight());
paint(g);
}
/**
@@ -1198,7 +1257,7 @@ public class Container extends Component
}
if (focusTraversalKeys == null)
focusTraversalKeys = new Set[3];
focusTraversalKeys = new Set[4];
keystrokes = Collections.unmodifiableSet (new HashSet (keystrokes));
firePropertyChange (name, focusTraversalKeys[id], keystrokes);
@@ -1465,12 +1524,8 @@ public class Container extends Component
for (int i = ncomponents - 1; i >= 0; --i)
{
Component comp = component[i];
// If we're visiting heavyweights as well,
// don't recurse into Containers here. This avoids
// painting the same nested child multiple times.
boolean applicable = comp.isVisible()
&& (comp.isLightweight()
|| !lightweightOnly && ! (comp instanceof Container));
&& (comp.isLightweight() || !lightweightOnly);
if (applicable)
visitChild(gfx, visitor, comp);
@@ -1525,11 +1580,9 @@ public class Container extends Component
void dispatchEventImpl(AWTEvent e)
{
// Give lightweight dispatcher a chance to handle it.
if (eventTypeEnabled (e.id)
&& dispatcher != null
&& dispatcher.handleEvent (e))
if (dispatcher != null && dispatcher.handleEvent (e))
return;
if ((e.id <= ContainerEvent.CONTAINER_LAST
&& e.id >= ContainerEvent.CONTAINER_FIRST)
&& (containerListener != null
@@ -1539,6 +1592,26 @@ public class Container extends Component
super.dispatchEventImpl(e);
}
/**
* Tests if this container has an interest in the given event id.
*
* @param eventId The event id to check.
*
* @return <code>true</code> if a listener for the event id exists or
* if the eventMask is set for the event id.
*
* @see java.awt.Component#eventTypeEnabled(int)
*/
boolean eventTypeEnabled(int eventId)
{
if(eventId <= ContainerEvent.CONTAINER_LAST
&& eventId >= ContainerEvent.CONTAINER_FIRST)
return containerListener != null
|| (eventMask & AWTEvent.CONTAINER_EVENT_MASK) != 0;
else
return super.eventTypeEnabled(eventId);
}
// This is used to implement Component.transferFocus.
Component findNextFocusComponent(Component child)
{
@@ -1603,12 +1676,11 @@ public class Container extends Component
// If we're not lightweight, and we just got a lightweight
// child, we need a lightweight dispatcher to feed it events.
if (! this.isLightweight())
{
if (dispatcher == null)
dispatcher = new LightweightDispatcher (this);
}
if (!this.isLightweight() && dispatcher == null)
dispatcher = new LightweightDispatcher (this);
if (dispatcher != null)
dispatcher.enableEvents(component[i].eventMask);
enableEvents(component[i].eventMask);
if (peer != null && !isLightweight ())
@@ -1862,7 +1934,6 @@ public class Container extends Component
* rather than mimic it exactly we write something which does "roughly
* the same thing".
*/
class LightweightDispatcher implements Serializable
{
private static final long serialVersionUID = 5184291520170872969L;
@@ -1870,10 +1941,8 @@ class LightweightDispatcher implements Serializable
private Cursor nativeCursor;
private long eventMask;
private transient Component mouseEventTarget;
private transient Component pressedComponent;
private transient Component lastComponentEntered;
private transient Component tempComponent;
private transient int pressCount;
LightweightDispatcher(Container c)
@@ -1881,11 +1950,17 @@ class LightweightDispatcher implements Serializable
nativeContainer = c;
}
void acquireComponentForMouseEvent(MouseEvent me)
void enableEvents(long l)
{
eventMask |= l;
}
Component acquireComponentForMouseEvent(MouseEvent me)
{
int x = me.getX ();
int y = me.getY ();
Component mouseEventTarget = null;
// Find the candidate which should receive this event.
Component parent = nativeContainer;
Component candidate = null;
@@ -1893,13 +1968,13 @@ class LightweightDispatcher implements Serializable
while (candidate == null && parent != null)
{
candidate =
SwingUtilities.getDeepestComponentAt(parent, p.x, p.y);
AWTUtilities.getDeepestComponentAt(parent, p.x, p.y);
if (candidate == null || (candidate.eventMask & me.getID()) == 0)
{
candidate = null;
p = SwingUtilities.convertPoint(parent, p.x, p.y, parent.parent);
parent = parent.parent;
}
{
candidate = null;
p = AWTUtilities.convertPoint(parent, p.x, p.y, parent.parent);
parent = parent.parent;
}
}
// If the only candidate we found was the native container itself,
@@ -1915,25 +1990,24 @@ class LightweightDispatcher implements Serializable
{
// Old candidate could have been removed from
// the nativeContainer so we check first.
if (SwingUtilities.isDescendingFrom(lastComponentEntered, nativeContainer))
{
Point tp =
SwingUtilities.convertPoint(nativeContainer,
x, y, lastComponentEntered);
MouseEvent exited = new MouseEvent (lastComponentEntered,
MouseEvent.MOUSE_EXITED,
me.getWhen (),
me.getModifiersEx (),
tp.x, tp.y,
me.getClickCount (),
me.isPopupTrigger (),
me.getButton ());
tempComponent = lastComponentEntered;
lastComponentEntered = null;
tempComponent.dispatchEvent(exited);
}
if (AWTUtilities.isDescendingFrom(lastComponentEntered,
nativeContainer))
{
Point tp = AWTUtilities.convertPoint(nativeContainer,
x, y, lastComponentEntered);
MouseEvent exited = new MouseEvent (lastComponentEntered,
MouseEvent.MOUSE_EXITED,
me.getWhen (),
me.getModifiersEx (),
tp.x, tp.y,
me.getClickCount (),
me.isPopupTrigger (),
me.getButton ());
lastComponentEntered.dispatchEvent (exited);
}
lastComponentEntered = null;
}
// If we have a candidate, maybe enter it.
if (candidate != null)
{
@@ -1942,10 +2016,10 @@ class LightweightDispatcher implements Serializable
&& candidate.isShowing()
&& candidate != nativeContainer
&& candidate != lastComponentEntered)
{
{
lastComponentEntered = mouseEventTarget;
Point cp = SwingUtilities.convertPoint(nativeContainer,
x, y, lastComponentEntered);
Point cp = AWTUtilities.convertPoint(nativeContainer,
x, y, lastComponentEntered);
MouseEvent entered = new MouseEvent (lastComponentEntered,
MouseEvent.MOUSE_ENTERED,
me.getWhen (),
@@ -1958,17 +2032,38 @@ class LightweightDispatcher implements Serializable
}
}
// Check which buttons where pressed except the last button that
// changed state.
int modifiers = me.getModifiersEx() & (MouseEvent.BUTTON1_DOWN_MASK
| MouseEvent.BUTTON2_DOWN_MASK
| MouseEvent.BUTTON3_DOWN_MASK);
switch(me.getButton())
{
case MouseEvent.BUTTON1:
modifiers &= ~MouseEvent.BUTTON1_DOWN_MASK;
break;
case MouseEvent.BUTTON2:
modifiers &= ~MouseEvent.BUTTON2_DOWN_MASK;
break;
case MouseEvent.BUTTON3:
modifiers &= ~MouseEvent.BUTTON3_DOWN_MASK;
break;
}
if (me.getID() == MouseEvent.MOUSE_RELEASED
|| me.getID() == MouseEvent.MOUSE_PRESSED && pressCount > 0
|| me.getID() == MouseEvent.MOUSE_PRESSED && modifiers > 0
|| me.getID() == MouseEvent.MOUSE_DRAGGED)
// If any of the following events occur while a button is held down,
// they should be dispatched to the same component to which the
// original MOUSE_PRESSED event was dispatched:
// - MOUSE_RELEASED
// - MOUSE_PRESSED: another button pressed while the first is held down
// - MOUSE_DRAGGED
if (SwingUtilities.isDescendingFrom(pressedComponent, nativeContainer))
mouseEventTarget = pressedComponent;
{
// If any of the following events occur while a button is held down,
// they should be dispatched to the same component to which the
// original MOUSE_PRESSED event was dispatched:
// - MOUSE_RELEASED
// - MOUSE_PRESSED: another button pressed while the first is held
// down
// - MOUSE_DRAGGED
if (AWTUtilities.isDescendingFrom(pressedComponent, nativeContainer))
mouseEventTarget = pressedComponent;
}
else if (me.getID() == MouseEvent.MOUSE_CLICKED)
{
// Don't dispatch CLICKED events whose target is not the same as the
@@ -1978,6 +2073,7 @@ class LightweightDispatcher implements Serializable
else if (pressCount == 0)
pressedComponent = null;
}
return mouseEventTarget;
}
boolean handleEvent(AWTEvent e)
@@ -1986,41 +2082,42 @@ class LightweightDispatcher implements Serializable
{
MouseEvent me = (MouseEvent) e;
acquireComponentForMouseEvent(me);
// Make the LightWeightDispatcher reentrant. This is necessary when
// a lightweight component does its own modal event queue.
Component mouseEventTarget = acquireComponentForMouseEvent(me);
// Avoid dispatching ENTERED and EXITED events twice.
if (mouseEventTarget != null
&& mouseEventTarget.isShowing()
&& e.getID() != MouseEvent.MOUSE_ENTERED
&& e.getID() != MouseEvent.MOUSE_EXITED)
{
MouseEvent newEvt =
SwingUtilities.convertMouseEvent(nativeContainer, me,
mouseEventTarget);
mouseEventTarget.dispatchEvent(newEvt);
switch (e.getID())
{
case MouseEvent.MOUSE_PRESSED:
if (pressCount++ == 0)
pressedComponent = mouseEventTarget;
break;
case MouseEvent.MOUSE_RELEASED:
// Clear our memory of the original PRESSED event, only if
// we're not expecting a CLICKED event after this. If
// there is a CLICKED event after this, it will do clean up.
if (--pressCount == 0
&& mouseEventTarget != pressedComponent)
pressedComponent = null;
break;
case MouseEvent.MOUSE_PRESSED:
if (pressCount++ == 0)
pressedComponent = mouseEventTarget;
break;
case MouseEvent.MOUSE_RELEASED:
// Clear our memory of the original PRESSED event, only if
// we're not expecting a CLICKED event after this. If
// there is a CLICKED event after this, it will do clean up.
if (--pressCount == 0
&& mouseEventTarget != pressedComponent)
pressedComponent = null;
break;
}
if (newEvt.isConsumed())
e.consume();
MouseEvent newEvt =
AWTUtilities.convertMouseEvent(nativeContainer, me,
mouseEventTarget);
mouseEventTarget.dispatchEvent(newEvt);
if (newEvt.isConsumed())
e.consume();
}
}
return e.isConsumed();
}
} // class LightweightDispatcher
}