summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Tromey <tromey@redhat.com>2003-08-11 18:24:11 +0000
committerTom Tromey <tromey@redhat.com>2003-08-11 18:24:11 +0000
commitb4a430ed6eaa1fa97504ebe17b92a267cfc155a9 (patch)
treebe496a88de92e4719e1f22401d2d2f80c2741c5a
parent56274448d6b91749c248b30d9eced609077edea6 (diff)
downloadclasspath-b4a430ed6eaa1fa97504ebe17b92a267cfc155a9.tar.gz
* 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.
-rw-r--r--ChangeLog10
-rw-r--r--java/awt/EventQueue.java47
2 files changed, 52 insertions, 5 deletions
diff --git a/ChangeLog b/ChangeLog
index c86471363..1d044ef4d 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+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-11 Ingo Proetel <proetel@aicas.com>
* gnu/java/rmi/server/UnicastRef.java: make constructor public and check if serverobject
diff --git a/java/awt/EventQueue.java b/java/awt/EventQueue.java
index d6204cefd..45dc9713b 100644
--- a/java/awt/EventQueue.java
+++ b/java/awt/EventQueue.java
@@ -1,4 +1,4 @@
-/* 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.
@@ -37,6 +37,8 @@ exception statement from your version. */
package java.awt;
+import java.awt.event.ActionEvent;
+import java.awt.event.InputEvent;
import java.awt.event.InvocationEvent;
import java.lang.reflect.InvocationTargetException;
import java.util.EmptyStackException;
@@ -44,7 +46,7 @@ import java.util.EmptyStackException;
/* Written using on-line Java 2 Platform Standard Edition v1.3 API
* Specification, as well as "The Java Class Libraries", 2nd edition
* (Addison-Wesley, 1998).
- * Status: Believed complete, but untested. Check FIXME's.
+ * Status: Believed complete, but untested.
*/
/**
@@ -65,6 +67,8 @@ public class EventQueue
private EventQueue next;
private EventQueue prev;
+ private AWTEvent currentEvent;
+ private long lastWhen = System.currentTimeMillis();
private EventDispatchThread dispatchThread = new EventDispatchThread(this);
@@ -162,7 +166,6 @@ public class EventQueue
next.postEvent(evt);
return;
}
- // FIXME: Security checks?
/* Check for any events already on the queue with the same source
and ID. */
@@ -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
*/
public static void invokeLater(Runnable runnable)
@@ -261,6 +268,10 @@ public class EventQueue
eq.postEvent(ie);
}
+ /**
+ * Return true if the current thread is the AWT event dispatch
+ * thread.
+ */
public static boolean isDispatchThread()
{
EventQueue eq = Toolkit.getDefaultToolkit().getSystemEventQueue();
@@ -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.
* All pending events are transferred to the new queue. Calls to postEvent,
* getNextEvent, and peekEvent are forwarded to the pushed queue until it
@@ -332,6 +358,15 @@ public class EventQueue
*/
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)
{
ActiveEvent active_evt = (ActiveEvent) evt;
@@ -373,7 +408,9 @@ public class EventQueue
*/
public static long getMostRecentEventTime()
{
- // XXX For now, this ONLY does the current time.
- return System.currentTimeMillis();
+ EventQueue eq = Toolkit.getDefaultToolkit().getSystemEventQueue();
+ if (Thread.currentThread() != eq.dispatchThread)
+ return System.currentTimeMillis();
+ return eq.lastWhen;
}
}