src/share/classes/java/awt/event/InputMethodEvent.java
Print this page
@@ -23,10 +23,14 @@
* questions.
*/
package java.awt.event;
+import sun.awt.AWTAccessor;
+import sun.awt.AppContext;
+import sun.awt.SunToolkit;
+
import java.awt.AWTEvent;
import java.awt.Component;
import java.awt.EventQueue;
import java.awt.font.TextHitInfo;
import java.io.IOException;
@@ -215,12 +219,14 @@
* @throws IllegalArgumentException if <code>source</code> is null
*/
public InputMethodEvent(Component source, int id,
AttributedCharacterIterator text, int committedCharacterCount,
TextHitInfo caret, TextHitInfo visiblePosition) {
- this(source, id, EventQueue.getMostRecentEventTime(), text,
- committedCharacterCount, caret, visiblePosition);
+ this(source, id,
+ getMostRecentEventTimeForSource(source),
+ text, committedCharacterCount,
+ caret, visiblePosition);
}
/**
* Constructs an <code>InputMethodEvent</code> with the
* specified source component, type, caret, and visiblePosition.
@@ -256,12 +262,13 @@
* <code>INPUT_METHOD_FIRST</code>..<code>INPUT_METHOD_LAST</code>
* @throws IllegalArgumentException if <code>source</code> is null
*/
public InputMethodEvent(Component source, int id, TextHitInfo caret,
TextHitInfo visiblePosition) {
- this(source, id, EventQueue.getMostRecentEventTime(), null,
- 0, caret, visiblePosition);
+ this(source, id,
+ getMostRecentEventTimeForSource(source),
+ null, 0, caret, visiblePosition);
}
/**
* Gets the combined committed and composed text.
* Characters from index 0 to index <code>getCommittedCharacterCount() - 1</code> are committed
@@ -409,9 +416,27 @@
* invoking {@link java.awt.EventQueue#getMostRecentEventTime()}.
*/
private void readObject(ObjectInputStream s) throws ClassNotFoundException, IOException {
s.defaultReadObject();
if (when == 0) {
- when = EventQueue.getMostRecentEventTime();
+ when = getMostRecentEventTimeForSource(this.source);
+ }
+ }
+
+ /**
+ * Get the most recent event time in the {@code EventQueue} which the {@code source}
+ * belongs to.
+ *
+ * @param source the source of the event
+ * @exception IllegalArgumentException if source is null.
+ * @return most recent event time in the {@code EventQueue}
+ */
+ private static long getMostRecentEventTimeForSource(Object source) {
+ if (source == null) {
+ // throw the IllegalArgumentException to conform to EventObject spec
+ throw new IllegalArgumentException("null source");
}
+ AppContext appContext = SunToolkit.targetToAppContext(source);
+ EventQueue eventQueue = SunToolkit.getSystemEventQueueImplPP(appContext);
+ return AWTAccessor.getEventQueueAccessor().getMostRecentEventTime(eventQueue);
}
}