diff options
Diffstat (limited to 'libjava/gnu/awt/xlib/XEventLoop.java')
-rw-r--r-- | libjava/gnu/awt/xlib/XEventLoop.java | 36 |
1 files changed, 16 insertions, 20 deletions
diff --git a/libjava/gnu/awt/xlib/XEventLoop.java b/libjava/gnu/awt/xlib/XEventLoop.java index 66878185b51..8f7828770e8 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,44 +35,40 @@ 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() + void postNextEvent(boolean block) { - AWTEvent evt = getNextEvent(); - queue.postEvent(evt); + AWTEvent evt = getNextEvent(block); + if (evt != null) + queue.postEvent(evt); } /** get next event. Will block until events become available. */ - public AWTEvent getNextEvent() + public AWTEvent getNextEvent(boolean block) { // ASSERT: if (isIdle()) throw new Error("should not be idle"); AWTEvent event = null; - while (event == null) + if (loadNextEvent(block)) { - loadNextEvent(); - event = createEvent(); - } - - event = lightweightRedirector.redirect(event); - + event = createEvent(); + event = lightweightRedirector.redirect(event); + } return event; } - void loadNextEvent() + boolean loadNextEvent(boolean block) { + 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(block); } catch (RuntimeException re) { @@ -110,6 +105,7 @@ public class XEventLoop implements Runnable { setIdle(false); } + return gotEvent; } /** |