Commit 1705e37d by Tom Tromey Committed by Tom Tromey

EventQueue.java (currentEvent, lastWhen): New fields.

	* java/awt/EventQueue.java (currentEvent, lastWhen): New fields.
	(postEvent): Removed FIXME comment.
	(isDispatchThread): Documented.
	(getCurrentEvent): New method.
	(dispatchEvent): Set currentEvent and lastWhen.
	(getMostRecentEventTime): Rewrote.
	(invokeLater): Documented.

From-SVN: r70333
parent 13fb3a61
2003-08-11 Tom Tromey <tromey@redhat.com>
* java/awt/EventQueue.java (currentEvent, lastWhen): New fields.
(postEvent): Removed FIXME comment.
(isDispatchThread): Documented.
(getCurrentEvent): New method.
(dispatchEvent): Set currentEvent and lastWhen.
(getMostRecentEventTime): Rewrote.
(invokeLater): Documented.
2003-08-10 Bryce McKinlay <bryce@mckinlay.net.nz> 2003-08-10 Bryce McKinlay <bryce@mckinlay.net.nz>
* java/io/PrintStream.java (print): Always flush if auto_flush is * java/io/PrintStream.java (print): Always flush if auto_flush is
......
/* Copyright (C) 1999, 2000, 2001, 2002 Free Software Foundation /* Copyright (C) 1999, 2000, 2001, 2002, 2003 Free Software Foundation
This file is part of GNU Classpath. This file is part of GNU Classpath.
...@@ -37,6 +37,8 @@ exception statement from your version. */ ...@@ -37,6 +37,8 @@ exception statement from your version. */
package java.awt; package java.awt;
import java.awt.event.ActionEvent;
import java.awt.event.InputEvent;
import java.awt.event.InvocationEvent; import java.awt.event.InvocationEvent;
import java.lang.reflect.InvocationTargetException; import java.lang.reflect.InvocationTargetException;
import java.util.EmptyStackException; import java.util.EmptyStackException;
...@@ -44,7 +46,7 @@ import java.util.EmptyStackException; ...@@ -44,7 +46,7 @@ import java.util.EmptyStackException;
/* Written using on-line Java 2 Platform Standard Edition v1.3 API /* Written using on-line Java 2 Platform Standard Edition v1.3 API
* Specification, as well as "The Java Class Libraries", 2nd edition * Specification, as well as "The Java Class Libraries", 2nd edition
* (Addison-Wesley, 1998). * (Addison-Wesley, 1998).
* Status: Believed complete, but untested. Check FIXME's. * Status: Believed complete, but untested.
*/ */
/** /**
...@@ -65,6 +67,8 @@ public class EventQueue ...@@ -65,6 +67,8 @@ public class EventQueue
private EventQueue next; private EventQueue next;
private EventQueue prev; private EventQueue prev;
private AWTEvent currentEvent;
private long lastWhen = System.currentTimeMillis();
private EventDispatchThread dispatchThread = new EventDispatchThread(this); private EventDispatchThread dispatchThread = new EventDispatchThread(this);
...@@ -162,7 +166,6 @@ public class EventQueue ...@@ -162,7 +166,6 @@ public class EventQueue
next.postEvent(evt); next.postEvent(evt);
return; return;
} }
// FIXME: Security checks?
/* Check for any events already on the queue with the same source /* Check for any events already on the queue with the same source
and ID. */ and ID. */
...@@ -249,6 +252,10 @@ public class EventQueue ...@@ -249,6 +252,10 @@ public class EventQueue
} }
/** /**
* This arranges for runnable to have its run method called in the
* dispatch thread of the EventQueue. This will happen after all
* pending events are processed.
*
* @since 1.2 * @since 1.2
*/ */
public static void invokeLater(Runnable runnable) public static void invokeLater(Runnable runnable)
...@@ -261,6 +268,10 @@ public class EventQueue ...@@ -261,6 +268,10 @@ public class EventQueue
eq.postEvent(ie); eq.postEvent(ie);
} }
/**
* Return true if the current thread is the AWT event dispatch
* thread.
*/
public static boolean isDispatchThread() public static boolean isDispatchThread()
{ {
EventQueue eq = Toolkit.getDefaultToolkit().getSystemEventQueue(); EventQueue eq = Toolkit.getDefaultToolkit().getSystemEventQueue();
...@@ -268,6 +279,21 @@ public class EventQueue ...@@ -268,6 +279,21 @@ public class EventQueue
} }
/** /**
* Return the event currently being dispatched by the event
* dispatch thread. If the current thread is not the event
* dispatch thread, this method returns null.
*
* @since 1.4
*/
public static AWTEvent getCurrentEvent()
{
EventQueue eq = Toolkit.getDefaultToolkit().getSystemEventQueue();
if (Thread.currentThread() != eq.dispatchThread)
return null;
return eq.currentEvent;
}
/**
* Allows a custom EventQueue implementation to replace this one. * Allows a custom EventQueue implementation to replace this one.
* All pending events are transferred to the new queue. Calls to postEvent, * All pending events are transferred to the new queue. Calls to postEvent,
* getNextEvent, and peekEvent are forwarded to the pushed queue until it * getNextEvent, and peekEvent are forwarded to the pushed queue until it
...@@ -332,6 +358,15 @@ public class EventQueue ...@@ -332,6 +358,15 @@ public class EventQueue
*/ */
protected void dispatchEvent(AWTEvent evt) protected void dispatchEvent(AWTEvent evt)
{ {
currentEvent = evt;
if (evt instanceof InputEvent)
lastWhen = ((InputEvent) evt).getWhen();
else if (evt instanceof ActionEvent)
lastWhen = ((ActionEvent) evt).getWhen();
else if (evt instanceof InvocationEvent)
lastWhen = ((InvocationEvent) evt).getWhen();
if (evt instanceof ActiveEvent) if (evt instanceof ActiveEvent)
{ {
ActiveEvent active_evt = (ActiveEvent) evt; ActiveEvent active_evt = (ActiveEvent) evt;
...@@ -373,7 +408,9 @@ public class EventQueue ...@@ -373,7 +408,9 @@ public class EventQueue
*/ */
public static long getMostRecentEventTime() public static long getMostRecentEventTime()
{ {
// XXX For now, this ONLY does the current time. EventQueue eq = Toolkit.getDefaultToolkit().getSystemEventQueue();
return System.currentTimeMillis(); if (Thread.currentThread() != eq.dispatchThread)
return System.currentTimeMillis();
return eq.lastWhen;
} }
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment