diff options
-rw-r--r-- | ChangeLog | 16 | ||||
-rw-r--r-- | java/awt/Component.java | 5 | ||||
-rw-r--r-- | java/awt/Container.java | 35 | ||||
-rw-r--r-- | javax/swing/RepaintManager.java | 5 |
4 files changed, 46 insertions, 15 deletions
@@ -1,3 +1,19 @@ +2004-08-08 Kim Ho <kho@redhat.com> + + * java/awt/Component.java: + (processMouseEvent): Consume event after + listene rs process it. + (processMouseMotionEvent): ditto. + (processMouseWheelEvent): ditto. + * java/awt/Container.java: + (acquireComponentForMouseEvent): + Do not dispatch to events that have been + removed from the Container. + (handleEvent): Consume the MouseEvents. + * javax/swing/RepaintManager.java: + (paintDirtyRegions): Do not add to list of + damaged areas if the component has no root. + 2004-08-08 Graydon Hoare <graydon@redhat.com> PR SWING/16576 diff --git a/java/awt/Component.java b/java/awt/Component.java index 95b238721..07c700485 100644 --- a/java/awt/Component.java +++ b/java/awt/Component.java @@ -3028,6 +3028,7 @@ public abstract class Component mouseListener.mouseReleased(e); break; } + e.consume(); } /** @@ -3055,6 +3056,7 @@ public abstract class Component mouseMotionListener.mouseMoved(e); break; } + e.consume(); } /** @@ -3073,7 +3075,10 @@ public abstract class Component { if (mouseWheelListener != null && e.id == MouseEvent.MOUSE_WHEEL) + { mouseWheelListener.mouseWheelMoved(e); + e.consume(); + } } /** diff --git a/java/awt/Container.java b/java/awt/Container.java index 96b358d09..1303bf19c 100644 --- a/java/awt/Container.java +++ b/java/awt/Container.java @@ -1882,21 +1882,25 @@ class LightweightDispatcher implements Serializable && lastComponentEntered.isShowing() && lastComponentEntered != candidate) { - 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 ()); - lastComponentEntered.dispatchEvent (exited); + // 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 ()); + lastComponentEntered.dispatchEvent (exited); + } lastComponentEntered = null; } - // If we have a candidate, maybe enter it. if (candidate != null) { @@ -1930,7 +1934,8 @@ class LightweightDispatcher implements Serializable // - MOUSE_RELEASED // - MOUSE_PRESSED: another button pressed while the first is held down // - MOUSE_DRAGGED - mouseEventTarget = pressedComponent; + if (SwingUtilities.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 @@ -1980,6 +1985,8 @@ class LightweightDispatcher implements Serializable pressedComponent = null; break; } + if (newEvt.isConsumed()) + e.consume(); } } else if (e instanceof KeyEvent && focus != null) diff --git a/javax/swing/RepaintManager.java b/javax/swing/RepaintManager.java index 29cee02ea..b7977677a 100644 --- a/javax/swing/RepaintManager.java +++ b/javax/swing/RepaintManager.java @@ -431,6 +431,9 @@ public class RepaintManager if (damaged.width == 0 || damaged.height == 0) continue; JRootPane root = comp.getRootPane(); + // If the component has no root, no repainting will occur. + if (root == null) + continue; Rectangle rootDamage = SwingUtilities.convertRectangle(comp, damaged, root); if (! roots.containsKey(root)) { @@ -450,7 +453,7 @@ public class RepaintManager Map.Entry ent = (Map.Entry) i.next(); JRootPane root = (JRootPane) ent.getKey(); Rectangle rect = (Rectangle) ent.getValue(); - root.paintImmediately(rect); + root.paintImmediately(rect); } } |