summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog16
-rw-r--r--java/awt/Component.java5
-rw-r--r--java/awt/Container.java35
-rw-r--r--javax/swing/RepaintManager.java5
4 files changed, 46 insertions, 15 deletions
diff --git a/ChangeLog b/ChangeLog
index ce20f1162..22bb051bd 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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);
}
}