aboutsummaryrefslogtreecommitdiff
path: root/libjava/java/awt/Component.java
diff options
context:
space:
mode:
Diffstat (limited to 'libjava/java/awt/Component.java')
-rw-r--r--libjava/java/awt/Component.java88
1 files changed, 52 insertions, 36 deletions
diff --git a/libjava/java/awt/Component.java b/libjava/java/awt/Component.java
index 88f9181..c9afaa1 100644
--- a/libjava/java/awt/Component.java
+++ b/libjava/java/awt/Component.java
@@ -4075,46 +4075,62 @@ p * <li>the set of backward traversal keys
*/
void dispatchEventImpl(AWTEvent e)
{
- // Make use of event id's in order to avoid multiple instanceof tests.
- if (e.id <= ComponentEvent.COMPONENT_LAST
- && e.id >= ComponentEvent.COMPONENT_FIRST
- && (componentListener != null
- || (eventMask & AWTEvent.COMPONENT_EVENT_MASK) != 0))
- processEvent(e);
- else if (e.id <= KeyEvent.KEY_LAST
- && e.id >= KeyEvent.KEY_FIRST
- && (keyListener != null
- || (eventMask & AWTEvent.KEY_EVENT_MASK) != 0))
- processEvent(e);
- else if (e.id <= MouseEvent.MOUSE_LAST
- && e.id >= MouseEvent.MOUSE_FIRST
- && (mouseListener != null
- || mouseMotionListener != null
- || (eventMask & AWTEvent.MOUSE_EVENT_MASK) != 0))
- processEvent(e);
- else if (e.id <= FocusEvent.FOCUS_LAST
- && e.id >= FocusEvent.FOCUS_FIRST
- && (focusListener != null
- || (eventMask & AWTEvent.FOCUS_EVENT_MASK) != 0))
- processEvent(e);
- else if (e.id <= InputMethodEvent.INPUT_METHOD_LAST
- && e.id >= InputMethodEvent.INPUT_METHOD_FIRST
- && (inputMethodListener != null
- || (eventMask & AWTEvent.INPUT_METHOD_EVENT_MASK) != 0))
- processEvent(e);
- else if (e.id <= HierarchyEvent.HIERARCHY_LAST
- && e.id >= HierarchyEvent.HIERARCHY_FIRST
- && (hierarchyListener != null
- || hierarchyBoundsListener != null
- || (eventMask & AWTEvent.HIERARCHY_EVENT_MASK) != 0))
- processEvent(e);
- else if (e.id <= PaintEvent.PAINT_LAST
- && e.id >= PaintEvent.PAINT_FIRST
- && (eventMask & AWTEvent.PAINT_EVENT_MASK) != 0)
+ if (eventTypeEnabled (e.id))
processEvent(e);
}
/**
+ * Tells wether or not an event type is enabled.
+ */
+ boolean eventTypeEnabled (int type)
+ {
+ if (type > AWTEvent.RESERVED_ID_MAX)
+ return true;
+
+ switch (type)
+ {
+ 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
+ || mouseMotionListener != null
+ || (eventMask & AWTEvent.MOUSE_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;
+ }
+ }
+
+ /**
* Coalesce paint events. Current heuristic is: Merge if the union of
* areas is less than twice that of the sum of the areas. The X server
* tend to create a lot of paint events that are adjacent but not