From 1705e37dbbe626bb8f57ba765c03525a8e4570ed Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Mon, 11 Aug 2003 18:26:08 +0000 Subject: [PATCH] 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 --- libjava/ChangeLog | 10 +++++++ libjava/java/awt/EventQueue.java | 47 ++++++++++++++++++++++++++++---- 2 files changed, 52 insertions(+), 5 deletions(-) diff --git a/libjava/ChangeLog b/libjava/ChangeLog index d790e60fbd9..b9a8680cadb 100644 --- a/libjava/ChangeLog +++ b/libjava/ChangeLog @@ -1,3 +1,13 @@ +2003-08-11 Tom Tromey + + * 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 * java/io/PrintStream.java (print): Always flush if auto_flush is diff --git a/libjava/java/awt/EventQueue.java b/libjava/java/awt/EventQueue.java index d6204cefd9a..45dc9713b6e 100644 --- a/libjava/java/awt/EventQueue.java +++ b/libjava/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,12 +268,31 @@ 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(); return (Thread.currentThread() == eq.dispatchThread); } + /** + * 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, @@ -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; } }