]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
EventDispatchThread.java (run): Stop running when interrupted.
authorFernando Nasser <fnasser@redhat.com>
Fri, 16 Jan 2004 16:15:49 +0000 (16:15 +0000)
committerFernando Nasser <fnasser@gcc.gnu.org>
Fri, 16 Jan 2004 16:15:49 +0000 (16:15 +0000)
        * java/awt/EventDispatchThread.java (run): Stop running when
        interrupted.
        * java/awt/EventQueue.java (pop): Stop dispatch thread when done.
        Reset the queue after transferring its contents.
        (push): Start a new dispatch thread if none is running.

From-SVN: r75977

libjava/ChangeLog
libjava/java/awt/EventDispatchThread.java
libjava/java/awt/EventQueue.java

index a19a55c4a73ff7bfbbc95592a5ecdeffffdefcdf..c16a006c96b9614852af9b23037f7ead3024337d 100644 (file)
@@ -1,3 +1,11 @@
+2004-01-16  Fernando Nasser  <fnasser@redhat.com>
+
+       * java/awt/EventDispatchThread.java (run): Stop running when
+       interrupted.
+       * java/awt/EventQueue.java (pop): Stop dispatch thread when done.
+       Reset the queue after transferring its contents.
+       (push): Start a new dispatch thread if none is running.
+
 2004-01-16  Olga Rodimina <rodimina@redhat.com>
 
        * gnu/java/awt/peer/gtk/GdkGraphics2D.java:
index 6e0e875abb5f6982833113bc0058b2717062d024..91145e1bb48a7a8a9c080fc57fce92ed4a324ac0 100644 (file)
@@ -62,8 +62,18 @@ class EventDispatchThread extends Thread
         try
        {
          AWTEvent evt = queue.getNextEvent();
+         if (isInterrupted ())
+           {
+             // We are interrupted when we should finish executing
+             return;
+           }
          queue.dispatchEvent(evt);
        }
+       catch (InterruptedException ie)
+       {
+         // We are interrupted when we should finish executing
+         return;
+       }
        catch (Throwable x)
        {
          System.err.println("Exception during event dispatch:");
index d20edbc13b069af02a678395c4051e3925d3e362..fe9138fa3f765a71b86917cfee28c89d91824780 100644 (file)
@@ -301,8 +301,8 @@ public class EventQueue
   /**
    * Allows a custom EventQueue implementation to replace this one. 
    * All pending events are transferred to the new queue. Calls to postEvent,
-   * getNextEvent, and peekEvent are forwarded to the pushed queue until it
-   * is removed with a pop().
+   * getNextEvent, and peekEvent and others are forwarded to the pushed queue
+   * until it is removed with a pop().
    *
    * @exception NullPointerException if newEventQueue is null.
    */
@@ -320,6 +320,10 @@ public class EventQueue
         return;
       }
 
+    /* Make sure we have a live dispatch thread to drive the queue */
+    if (dispatchThread == null)
+      dispatchThread = new EventDispatchThread(this);
+
     int i = next_out;
     while (i != next_in)
       {
@@ -361,6 +365,13 @@ public class EventQueue
             if (++i == queue.length)
               i = 0;
           }
+       // Empty the queue so it can be reused
+       next_in = 0;
+       next_out = 0;
+
+        // Tell our EventDispatchThread that it can end execution
+        dispatchThread.interrupt ();
+       dispatchThread = null;
       }
   }