jdk Sdiff src/share/classes/java/awt (original) (raw)
144 * Dummy runnable to wake up EDT from getNextEvent() after 145 push/pop is performed 146 / 147 private final static Runnable dummyRunnable = new Runnable() { 148 public void run() { 149 } 150 }; 151 152 private EventDispatchThread dispatchThread; 153 154 private final ThreadGroup threadGroup = 155 Thread.currentThread().getThreadGroup(); 156 private final ClassLoader classLoader = 157 Thread.currentThread().getContextClassLoader(); 158 159 / 160 * The time stamp of the last dispatched InputEvent or ActionEvent. 161 */ 162 private long mostRecentEventTime = System.currentTimeMillis(); 163
164 /** 165 * The modifiers field of the current event, if the current event is an 166 * InputEvent or ActionEvent. 167 / 168 private WeakReference currentEvent; 169 170 / 171 * Non-zero if a thread is waiting in getNextEvent(int) for an event of 172 * a particular ID to be posted to the queue. 173 */ 174 private volatile int waitForID; 175 176 private final String name = "AWT-EventQueue-" + threadInitNumber.getAndIncrement(); 177 178 private static final PlatformLogger eventLog = PlatformLogger.getLogger("java.awt.event.EventQueue"); 179 180 static { 181 AWTAccessor.setEventQueueAccessor( 182 new AWTAccessor.EventQueueAccessor() { 183 public Thread getDispatchThread(EventQueue eventQueue) {
1111 ((SentEvent)entry.event).dispose(); 1112 } 1113 if (prev == null) { 1114 queues[i].head = entry.next; 1115 } else { 1116 prev.next = entry.next; 1117 } 1118 uncacheEQItem(entry); 1119 } else { 1120 prev = entry; 1121 } 1122 entry = entry.next; 1123 } 1124 queues[i].tail = prev; 1125 } 1126 } finally { 1127 pushPopLock.unlock(); 1128 } 1129 } 1130
1131 static void setCurrentEventAndMostRecentTime(AWTEvent e) { 1132 Toolkit.getEventQueue().setCurrentEventAndMostRecentTimeImpl(e); 1133 } 1134 private void setCurrentEventAndMostRecentTimeImpl(AWTEvent e) { 1135 pushPopLock.lock(); 1136 try { 1137 if (Thread.currentThread() != dispatchThread) { 1138 return; 1139 } 1140 1141 currentEvent = new WeakReference(e); 1142 1143 // This series of 'instanceof' checks should be replaced with a 1144 // polymorphic type (for example, an interface which declares a 1145 // getWhen() method). However, this would require us to make such 1146 // a type public, or to place it in sun.awt. Both of these approaches 1147 // have been frowned upon. So for now, we hack. 1148 // 1149 // In tiger, we will probably give timestamps to all events, so this 1150 // will no longer be an issue. 1151 long mostRecentEventTime2 = Long.MIN_VALUE; 1152 if (e instanceof InputEvent) { 1153 InputEvent ie = (InputEvent)e; 1154 mostRecentEventTime2 = ie.getWhen();
1155 } else if (e instanceof InputMethodEvent) {
1156 InputMethodEvent ime = (InputMethodEvent)e;
1157 mostRecentEventTime2 = ime.getWhen();
1158 } else if (e instanceof ActionEvent) {
1159 ActionEvent ae = (ActionEvent)e;
1160 mostRecentEventTime2 = ae.getWhen();
1161 } else if (e instanceof InvocationEvent) {
1162 InvocationEvent ie = (InvocationEvent)e;
1163 mostRecentEventTime2 = ie.getWhen();
1164 }
1165 mostRecentEventTime = Math.max(mostRecentEventTime, mostRecentEventTime2);
1166 } finally {
1167 pushPopLock.unlock();
1168 }
1169 }
1170
1171 /**
1172 * Causes runnable
to have its run
1173 * method called in the {@link #isDispatchThread dispatch thread} of
1174 * {@link Toolkit#getSystemEventQueue the system EventQueue}.
144 * Dummy runnable to wake up EDT from getNextEvent() after 145 push/pop is performed 146 / 147 private final static Runnable dummyRunnable = new Runnable() { 148 public void run() { 149 } 150 }; 151 152 private EventDispatchThread dispatchThread; 153 154 private final ThreadGroup threadGroup = 155 Thread.currentThread().getThreadGroup(); 156 private final ClassLoader classLoader = 157 Thread.currentThread().getContextClassLoader(); 158 159 / 160 * The time stamp of the last dispatched InputEvent or ActionEvent. 161 / 162 private long mostRecentEventTime = System.currentTimeMillis(); 163 164 / 165 * The time stamp of the last KeyEvent . 166 / 167 private long mostRecentKeyEventTime = System.currentTimeMillis(); 168 169 /* 170 * The modifiers field of the current event, if the current event is an 171 * InputEvent or ActionEvent. 172 / 173 private WeakReference currentEvent; 174 175 / 176 * Non-zero if a thread is waiting in getNextEvent(int) for an event of 177 * a particular ID to be posted to the queue. 178 */ 179 private volatile int waitForID; 180 181 private final String name = "AWT-EventQueue-" + threadInitNumber.getAndIncrement(); 182 183 private static final PlatformLogger eventLog = PlatformLogger.getLogger("java.awt.event.EventQueue"); 184 185 static { 186 AWTAccessor.setEventQueueAccessor( 187 new AWTAccessor.EventQueueAccessor() { 188 public Thread getDispatchThread(EventQueue eventQueue) {
1116 ((SentEvent)entry.event).dispose();
1117 }
1118 if (prev == null) {
1119 queues[i].head = entry.next;
1120 } else {
1121 prev.next = entry.next;
1122 }
1123 uncacheEQItem(entry);
1124 } else {
1125 prev = entry;
1126 }
1127 entry = entry.next;
1128 }
1129 queues[i].tail = prev;
1130 }
1131 } finally {
1132 pushPopLock.unlock();
1133 }
1134 }
1135
1136 synchronized long getMostRecentKeyEventTime() {
1137 pushPopLock.lock();
1138 try {
1139 return mostRecentKeyEventTime;
1140 } finally {
1141 pushPopLock.unlock();
1142 }
1143 }
1144
1145 static void setCurrentEventAndMostRecentTime(AWTEvent e) {
1146 Toolkit.getEventQueue().setCurrentEventAndMostRecentTimeImpl(e);
1147 }
1148 private void setCurrentEventAndMostRecentTimeImpl(AWTEvent e) {
1149 pushPopLock.lock();
1150 try {
1151 if (Thread.currentThread() != dispatchThread) {
1152 return;
1153 }
1154
1155 currentEvent = new WeakReference(e);
1156
1157 // This series of 'instanceof' checks should be replaced with a
1158 // polymorphic type (for example, an interface which declares a
1159 // getWhen() method). However, this would require us to make such
1160 // a type public, or to place it in sun.awt. Both of these approaches
1161 // have been frowned upon. So for now, we hack.
1162 //
1163 // In tiger, we will probably give timestamps to all events, so this
1164 // will no longer be an issue.
1165 long mostRecentEventTime2 = Long.MIN_VALUE;
1166 if (e instanceof InputEvent) {
1167 InputEvent ie = (InputEvent)e;
1168 mostRecentEventTime2 = ie.getWhen();
1169 if (e instanceof KeyEvent) {
1170 mostRecentKeyEventTime = ie.getWhen();
1171 }
1172 } else if (e instanceof InputMethodEvent) {
1173 InputMethodEvent ime = (InputMethodEvent)e;
1174 mostRecentEventTime2 = ime.getWhen();
1175 } else if (e instanceof ActionEvent) {
1176 ActionEvent ae = (ActionEvent)e;
1177 mostRecentEventTime2 = ae.getWhen();
1178 } else if (e instanceof InvocationEvent) {
1179 InvocationEvent ie = (InvocationEvent)e;
1180 mostRecentEventTime2 = ie.getWhen();
1181 }
1182 mostRecentEventTime = Math.max(mostRecentEventTime, mostRecentEventTime2);
1183 } finally {
1184 pushPopLock.unlock();
1185 }
1186 }
1187
1188 /**
1189 * Causes runnable
to have its run
1190 * method called in the {@link #isDispatchThread dispatch thread} of
1191 * {@link Toolkit#getSystemEventQueue the system EventQueue}.