You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pivot.apache.org by gb...@apache.org on 2009/09/30 16:49:43 UTC
svn commit: r820287 -
/incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/ApplicationContext.java
Author: gbrown
Date: Wed Sep 30 14:49:42 2009
New Revision: 820287
URL: http://svn.apache.org/viewvc?rev=820287&view=rev
Log:
Make QueuedCallback public and return an instance of it from ApplicationContext.queueCallback(); ensure that ScheduledCallback cancels any outstanding queued callbacks.
Modified:
incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/ApplicationContext.java
Modified: incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/ApplicationContext.java
URL: http://svn.apache.org/viewvc/incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/ApplicationContext.java?rev=820287&r1=820286&r2=820287&view=diff
==============================================================================
--- incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/ApplicationContext.java (original)
+++ incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/ApplicationContext.java Wed Sep 30 14:49:42 2009
@@ -1372,7 +1372,7 @@
*/
public static final class ScheduledCallback extends TimerTask {
private Runnable callback;
- private volatile boolean cancelled = false;
+ private QueuedCallback queuedCallback = null;
private ScheduledCallback(final Runnable callback) {
this.callback = callback;
@@ -1380,32 +1380,53 @@
@Override
public void run() {
- if (!cancelled) {
- queueCallback(callback);
+ // Cancel any outstanding callback
+ if (queuedCallback != null) {
+ queuedCallback.cancel();
}
+
+ queuedCallback = queueCallback(callback);
}
@Override
public boolean cancel() {
- cancelled = true;
+ // Cancel any outstanding callback
+ if (queuedCallback != null) {
+ queuedCallback.cancel();
+ }
+
return super.cancel();
}
}
- private static class QueuedCallback implements Runnable {
+ /**
+ * Class representing a queued callback.
+ */
+ public static class QueuedCallback implements Runnable {
private Runnable callback;
+ private boolean executed = false;
+ private volatile boolean canceled = false;
- public QueuedCallback(Runnable callback) {
+ private QueuedCallback(Runnable callback) {
this.callback = callback;
}
public void run() {
- callback.run();
+ if (!canceled) {
+ callback.run();
- for (Display display : displays) {
- display.validate();
+ for (Display display : displays) {
+ display.validate();
+ }
+
+ executed = true;
}
}
+
+ public synchronized boolean cancel() {
+ canceled = true;
+ return (!executed);
+ }
}
private DisplayHost displayHost;
@@ -1589,8 +1610,8 @@
* @param callback
* The task to execute.
*/
- public static void queueCallback(Runnable callback) {
- queueCallback(callback, false);
+ public static QueuedCallback queueCallback(Runnable callback) {
+ return queueCallback(callback, false);
}
/**
@@ -1604,7 +1625,7 @@
* If <tt>true</tt>, does not return until the task has executed.
* Otherwise, returns immediately.
*/
- public static void queueCallback(Runnable callback, boolean wait) {
+ public static QueuedCallback queueCallback(Runnable callback, boolean wait) {
QueuedCallback queuedCallback = new QueuedCallback(callback);
// TODO This is a workaround for a potential OS X bug; revisit
@@ -1623,6 +1644,8 @@
} catch (Throwable throwable) {
System.err.println("Unable to queue callback: " + throwable);
}
+
+ return queuedCallback;
}
protected static void createTimer() {