19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed to the Apache Software Foundation (ASF) under one or more 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * contributor license agreements. See the NOTICE file distributed with 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * this work for additional information regarding copyright ownership. 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The ASF licenses this file to You under the Apache License, Version 2.0 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * (the "License"); you may not use this file except in compliance with 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the License. You may obtain a copy of the License at 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License. 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @author Michael Danilov, Pavel Dolgov 199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @version $Revision$ 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage java.awt; 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.awt.event.InvocationEvent; 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.lang.reflect.InvocationTargetException; 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.util.EmptyStackException; 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The EventQueue class manages events. It is a platform-independent class that 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * queues events both from the underlying peer classes and from trusted 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * application classes. 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @since Android 1.0 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class EventQueue { 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The core ref. 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private final EventQueueCoreAtomicReference coreRef = new EventQueueCoreAtomicReference(); 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The Class EventQueueCoreAtomicReference. 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final class EventQueueCoreAtomicReference { 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The core. 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private EventQueueCore core; 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* synchronized */ 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Gets the. 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the event queue core. 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project EventQueueCore get() { 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return core; 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* synchronized */ 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Sets the. 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param newCore 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the new core. 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void set(EventQueueCore newCore) { 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project core = newCore; 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns true if the calling thread is the current AWT EventQueue's 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * dispatch thread. 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return true, if the calling thread is the current AWT EventQueue's 799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * dispatch thread; false otherwise. 809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static boolean isDispatchThread() { 829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return Thread.currentThread() instanceof EventDispatchThread; 839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Posts an InvocationEvent which executes the run() method on a Runnable 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * when dispatched by the AWT event dispatcher thread. 889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param runnable 909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the Runnable whose run method should be executed synchronously 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * on the EventQueue. 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static void invokeLater(Runnable runnable) { 949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Toolkit toolkit = Toolkit.getDefaultToolkit(); 959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project InvocationEvent event = new InvocationEvent(toolkit, runnable); 969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project toolkit.getSystemEventQueueImpl().postEvent(event); 979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Posts an InvocationEvent which executes the run() method on a Runnable 1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * when dispatched by the AWT event dispatcher thread and the notifyAll 1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * method is called on it immediately after run returns. 1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param runnable 1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the Runnable whose run method should be executed synchronously 1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * on the EventQueue. 1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @throws InterruptedException 1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * if another thread has interrupted this thread. 1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @throws InvocationTargetException 1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * if an error occurred while running the runnable. 1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static void invokeAndWait(Runnable runnable) throws InterruptedException, 1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project InvocationTargetException { 1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (isDispatchThread()) { 1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new Error(); 1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final Toolkit toolkit = Toolkit.getDefaultToolkit(); 1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final Object notifier = new Object(); // $NON-LOCK-1$ 1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project InvocationEvent event = new InvocationEvent(toolkit, runnable, notifier, true); 1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project synchronized (notifier) { 1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project toolkit.getSystemEventQueueImpl().postEvent(event); 1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project notifier.wait(); 1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Exception exception = event.getException(); 1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (exception != null) { 1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new InvocationTargetException(exception); 1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Gets the system event queue. 1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the system event queue. 1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static EventQueue getSystemEventQueue() { 1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Thread th = Thread.currentThread(); 1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (th instanceof EventDispatchThread) { 1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return ((EventDispatchThread)th).toolkit.getSystemEventQueueImpl(); 1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return null; 1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Gets the most recent event's timestamp. This event was dispatched from 1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the EventQueue associated with the calling thread. 1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the timestamp of the last Event to be dispatched, or 1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * System.currentTimeMillis() if this method is invoked from a 1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * thread other than an event-dispatching thread. 1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static long getMostRecentEventTime() { 1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project EventQueue eq = getSystemEventQueue(); 1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return (eq != null) ? eq.getMostRecentEventTimeImpl() : System.currentTimeMillis(); 1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Gets the most recent event time impl. 1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the most recent event time impl. 1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private long getMostRecentEventTimeImpl() { 1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return getCore().getMostRecentEventTime(); 1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns the the currently dispatched event by the EventQueue associated 1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * with the calling thread. 1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the currently dispatched event or null if this method is invoked 1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * from a thread other than an event-dispatching thread. 1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static AWTEvent getCurrentEvent() { 1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project EventQueue eq = getSystemEventQueue(); 1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return (eq != null) ? eq.getCurrentEventImpl() : null; 1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Gets the current event impl. 1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the current event impl. 1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private AWTEvent getCurrentEventImpl() { 1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return getCore().getCurrentEvent(); 1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Instantiates a new event queue. 1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public EventQueue() { 1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project setCore(new EventQueueCore(this)); 1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Instantiates a new event queue. 2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param t 2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the t. 2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project EventQueue(Toolkit t) { 2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project setCore(new EventQueueCore(this, t)); 2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Posts a event to the EventQueue. 2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param event 2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * AWTEvent. 2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void postEvent(AWTEvent event) { 2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project event.isPosted = true; 2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project getCore().postEvent(event); 2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns an event from the EventQueue and removes it from this queue. 2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the next AWTEvent. 2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @throws InterruptedException 2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * is thrown if another thread interrupts this thread. 2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public AWTEvent getNextEvent() throws InterruptedException { 2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return getCore().getNextEvent(); 2289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Gets the next event no wait. 2329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the next event no wait. 2349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project AWTEvent getNextEventNoWait() { 2369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return getCore().getNextEventNoWait(); 2379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns the first event of the EventQueue (without removing it from the 2419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * queue). 2429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the the first AWT event of the EventQueue. 2449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public AWTEvent peekEvent() { 2469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return getCore().peekEvent(); 2479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns the first event of the EventQueue with the specified ID (without 2519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * removing it from the queue). 2529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param id 2549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the type ID of event. 2559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the first event of the EventQueue with the specified ID. 2569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public AWTEvent peekEvent(int id) { 2589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return getCore().peekEvent(id); 2599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Replaces the existing EventQueue with the specified EventQueue. Any 2639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * pending events are transferred to the new EventQueue. 2649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param newEventQueue 2669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the new event queue. 2679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void push(EventQueue newEventQueue) { 2699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project getCore().push(newEventQueue); 2709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Stops dispatching events using this EventQueue. Any pending events are 2749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * transferred to the previous EventQueue. 2759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @throws EmptyStackException 2779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * is thrown if no previous push was made on this EventQueue. 2789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected void pop() throws EmptyStackException { 2809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project getCore().pop(); 2819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Dispatches the specified event. 2859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param event 2879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the AWTEvent. 2889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected void dispatchEvent(AWTEvent event) { 2909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project getCore().dispatchEventImpl(event); 2919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Checks if the queue is empty. 2959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return true, if is empty. 2979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project boolean isEmpty() { 2999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return getCore().isEmpty(); 3009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Gets the core. 3049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the core. 3069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project EventQueueCore getCore() { 3089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return coreRef.get(); 3099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Sets the core. 3139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param newCore 3159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the new core. 3169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void setCore(EventQueueCore newCore) { 3189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project coreRef.set((newCore != null) ? newCore : new EventQueueCore(this)); 3199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 321