diff options
Diffstat (limited to 'libjava/gnu/awt/xlib/XEventLoop.java')
-rw-r--r-- | libjava/gnu/awt/xlib/XEventLoop.java | 30 |
1 files changed, 13 insertions, 17 deletions
diff --git a/libjava/gnu/awt/xlib/XEventLoop.java b/libjava/gnu/awt/xlib/XEventLoop.java index 66878185b51..bda5a9f4822 100644 --- a/libjava/gnu/awt/xlib/XEventLoop.java +++ b/libjava/gnu/awt/xlib/XEventLoop.java @@ -21,12 +21,11 @@ import java.awt.event.InputEvent; import java.awt.event.MouseEvent; import java.util.Vector; -public class XEventLoop implements Runnable +public class XEventLoop { Display display; EventQueue queue; XAnyEvent anyEvent; - Thread eventLoopThread; LightweightRedirector lightweightRedirector = new LightweightRedirector(); @@ -36,20 +35,18 @@ public class XEventLoop implements Runnable this.queue = queue; anyEvent = new XAnyEvent(display); - eventLoopThread = new Thread(this, "AWT thread for XEventLoop"); - eventLoopThread.start(); } - public void run() + void interrupt() { - while (true) - postNextEvent(); + anyEvent.interrupt(); } void postNextEvent() { AWTEvent evt = getNextEvent(); - queue.postEvent(evt); + if (evt != null) + queue.postEvent(evt); } /** get next event. Will block until events become available. */ @@ -61,19 +58,17 @@ public class XEventLoop implements Runnable throw new Error("should not be idle"); AWTEvent event = null; - while (event == null) + if (loadNextEvent()) { - loadNextEvent(); - event = createEvent(); - } - - event = lightweightRedirector.redirect(event); - + event = createEvent(); + event = lightweightRedirector.redirect(event); + } return event; } - void loadNextEvent() + boolean loadNextEvent() { + boolean gotEvent = false; try { setIdle(true); @@ -100,7 +95,7 @@ public class XEventLoop implements Runnable of events. */ //display.flush(); // implicit? - anyEvent.loadNext(); + gotEvent = anyEvent.loadNext(); } catch (RuntimeException re) { @@ -110,6 +105,7 @@ public class XEventLoop implements Runnable { setIdle(false); } + return gotEvent; } /** |