OSDN Git Service

auto import from //depot/cupcake/@135843
[android-x86/frameworks-native.git] / awt / org / apache / harmony / awt / wtk / NativeEventThread.java
1 /*
2  *  Licensed to the Apache Software Foundation (ASF) under one or more
3  *  contributor license agreements.  See the NOTICE file distributed with
4  *  this work for additional information regarding copyright ownership.
5  *  The ASF licenses this file to You under the Apache License, Version 2.0
6  *  (the "License"); you may not use this file except in compliance with
7  *  the License.  You may obtain a copy of the License at
8  *
9  *     http://www.apache.org/licenses/LICENSE-2.0
10  *
11  *  Unless required by applicable law or agreed to in writing, software
12  *  distributed under the License is distributed on an "AS IS" BASIS,
13  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  *  See the License for the specific language governing permissions and
15  *  limitations under the License.
16  */
17 /**
18  * @author Pavel Dolgov
19  * @version $Revision$
20  */
21 package org.apache.harmony.awt.wtk;
22
23
24 /**
25  * NativeEventThread
26  */
27 public class NativeEventThread extends Thread {
28     
29     public interface Init {
30         WTK init();
31     }
32     
33     NativeEventQueue nativeQueue;
34     Init init;
35     
36     private WTK wtk;
37     
38     public NativeEventThread() {
39         super("AWT-NativeEventThread"); //$NON-NLS-1$
40         setDaemon(true);
41     }
42
43     @Override
44     public void run() {
45         synchronized (this) {
46             try {
47                 wtk = init.init();
48                 nativeQueue = wtk.getNativeEventQueue();
49             } finally {
50                 notifyAll();
51             }
52         }
53         
54         runModalLoop();
55     }
56
57     void runModalLoop() {
58         while (nativeQueue.waitEvent()) {
59             nativeQueue.dispatchEvent();
60         }
61     }
62     
63     public void start(Init init) {
64         synchronized (this) {
65             this.init = init;
66             super.start();
67             try {
68                 wait();
69             } catch (InterruptedException e) {
70                 throw new RuntimeException(e);
71             }
72         }
73     }
74     
75     public WTK getWTK() {
76         return wtk;
77     }
78 }