java.awt
Class SequencedEvent

java.lang.Object
  |
  +--java.util.EventObject
        |
        +--java.awt.AWTEvent
              |
              +--java.awt.SequencedEvent
All Implemented Interfaces:
ActiveEvent, Serializable

class SequencedEvent
extends AWTEvent
implements ActiveEvent

A mechanism for ensuring that a series of AWTEvents are executed in a precise order, even across multiple AppContexts. The nested events will be dispatched in the order in which their wrapping SequencedEvents were constructed. The only exception to this rule is if the peer of the target of the nested event was destroyed (with a call to Component.removeNotify) before the wrapping SequencedEvent was able to be dispatched. In this case, the nested event is never dispatched.

Version:
1.5, 03/14/02
Author:
David Mendenhall

Field Summary
private  sun.awt.AppContext appContext
           
private  boolean disposed
           
private static int ID
           
private static LinkedList list
           
private  AWTEvent nested
           
 
Fields inherited from class java.awt.AWTEvent
ACTION_EVENT_MASK, ADJUSTMENT_EVENT_MASK, COMPONENT_EVENT_MASK, consumed, CONTAINER_EVENT_MASK, FOCUS_EVENT_MASK, focusManagerIsDispatching, HIERARCHY_BOUNDS_EVENT_MASK, HIERARCHY_EVENT_MASK, id, INPUT_METHOD_EVENT_MASK, INPUT_METHODS_ENABLED_MASK, INVOCATION_EVENT_MASK, ITEM_EVENT_MASK, KEY_EVENT_MASK, MOUSE_EVENT_MASK, MOUSE_MOTION_EVENT_MASK, MOUSE_WHEEL_EVENT_MASK, PAINT_EVENT_MASK, RESERVED_ID_MAX, TEXT_EVENT_MASK, WINDOW_EVENT_MASK, WINDOW_FOCUS_EVENT_MASK, WINDOW_STATE_EVENT_MASK
 
Fields inherited from class java.util.EventObject
source
 
Constructor Summary
(package private) SequencedEvent(AWTEvent nested)
          Constructs a new SequencedEvent which will dispatch the specified nested event.
 
Method Summary
 void dispatch()
          Dispatches the nested event after all previous nested events have been dispatched or disposed.
(package private)  void dispose()
          Disposes of this instance.
private static SequencedEvent getFirst()
           
private static SequencedEvent getFirstWithContext()
           
 boolean isFirstOrDisposed()
          Sequenced events are dispatched in order, so we cannot dispatch until we are the first sequenced event in the queue (i.e.
private static boolean isOwnerAppContextDisposed(SequencedEvent se)
          true only if event exists and nested source appContext is disposed.
 
Methods inherited from class java.awt.AWTEvent
consume, convertToOld, copyPrivateDataInto, getID, isConsumed, paramString, setSource, toString
 
Methods inherited from class java.util.EventObject
getSource
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

ID

private static final int ID

list

private static final LinkedList list

nested

private final AWTEvent nested

appContext

private sun.awt.AppContext appContext

disposed

private boolean disposed
Constructor Detail

SequencedEvent

SequencedEvent(AWTEvent nested)
Constructs a new SequencedEvent which will dispatch the specified nested event.

Parameters:
nested - the AWTEvent which this SequencedEvent's dispatch() method will dispatch
Method Detail

dispatch

public final void dispatch()
Dispatches the nested event after all previous nested events have been dispatched or disposed. If this method is invoked before all previous nested events have been dispatched, then this method blocks until such a point is reached. While waiting disposes nested events to disposed AppContext NOTE: Locking protocol. Since dispose() can get EventQueue lock, dispatch() shall never call dispose() while holding the lock on the list, as EventQueue lock is held during dispatching. The locks should be acquired in the same order.

Specified by:
dispatch in interface ActiveEvent

isOwnerAppContextDisposed

private static final boolean isOwnerAppContextDisposed(SequencedEvent se)
true only if event exists and nested source appContext is disposed.


isFirstOrDisposed

public final boolean isFirstOrDisposed()
Sequenced events are dispatched in order, so we cannot dispatch until we are the first sequenced event in the queue (i.e. it's our turn). But while we wait for our turn to dispatch, the event could have been disposed for a number of reasons.


getFirst

private static final SequencedEvent getFirst()

getFirstWithContext

private static final SequencedEvent getFirstWithContext()

dispose

final void dispose()
Disposes of this instance. This method is invoked once the nested event has been dispatched and handled, or when the peer of the target of the nested event has been disposed with a call to Component.removeNotify. NOTE: Locking protocol. Since SunToolkit.postEvent can get EventQueue lock, it shall never be called while holding the lock on the list, as EventQueue lock is held during dispatching and dispatch() will get lock on the list. The locks should be acquired in the same order.



comments?