aboutsummaryrefslogtreecommitdiff
path: root/libjava/gnu/awt/xlib/XEventLoop.java
diff options
context:
space:
mode:
Diffstat (limited to 'libjava/gnu/awt/xlib/XEventLoop.java')
-rw-r--r--libjava/gnu/awt/xlib/XEventLoop.java36
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;
}
/**