home *** CD-ROM | disk | FTP | other *** search
/ S283 Planetary Science &n…he Search for Life DVD 2 / DVD-ROM.iso / install / jre1_3 / lib / rt.jar / java / awt / EventQueue.class (.txt) < prev    next >
Encoding:
Java Class File  |  1979-12-31  |  5.7 KB  |  328 lines

  1. package java.awt;
  2.  
  3. import java.awt.event.InvocationEvent;
  4. import java.awt.event.KeyEvent;
  5. import java.awt.event.MouseEvent;
  6. import java.lang.reflect.InvocationTargetException;
  7. import java.util.EmptyStackException;
  8. import java.util.EventObject;
  9. import sun.awt.DebugHelper;
  10. import sun.awt.PeerEvent;
  11. import sun.awt.SunToolkit;
  12.  
  13. public class EventQueue {
  14.    private static final DebugHelper dbg;
  15.    private static int threadInitNumber;
  16.    private static final int LOW_PRIORITY = 0;
  17.    private static final int NORM_PRIORITY = 1;
  18.    private static final int HIGH_PRIORITY = 2;
  19.    private static final int NUM_PRIORITIES = 3;
  20.    private Queue[] queues = new Queue[3];
  21.    private EventQueue nextQueue;
  22.    private EventQueue previousQueue;
  23.    private EventDispatchThread dispatchThread;
  24.    private static final boolean debug = false;
  25.    // $FF: synthetic field
  26.    static Class class$java$awt$EventQueue;
  27.  
  28.    private static synchronized int nextThreadNum() {
  29.       return threadInitNumber++;
  30.    }
  31.  
  32.    public EventQueue() {
  33.       for(int var1 = 0; var1 < 3; ++var1) {
  34.          this.queues[var1] = new Queue();
  35.       }
  36.  
  37.       String var2 = "AWT-EventQueue-" + nextThreadNum();
  38.       this.dispatchThread = new EventDispatchThread(var2, this);
  39.       this.dispatchThread.setPriority(6);
  40.       this.dispatchThread.start();
  41.    }
  42.  
  43.    public void postEvent(AWTEvent var1) {
  44.       Toolkit var2 = Toolkit.getDefaultToolkit();
  45.       if (var2 instanceof SunToolkit) {
  46.          ((SunToolkit)var2).flushPendingEvents();
  47.       }
  48.  
  49.       this.postEventPrivate(var1);
  50.    }
  51.  
  52.    final void postEventPrivate(AWTEvent var1) {
  53.       synchronized(this) {
  54.          int var3 = var1.getID();
  55.          if (this.nextQueue != null) {
  56.             this.nextQueue.postEventPrivate(var1);
  57.          } else if (var1 instanceof PeerEvent && (((PeerEvent)var1).getFlags() & 1L) != 0L) {
  58.             this.postEvent(var1, 2);
  59.          } else if (var3 != 800 && var3 != 801) {
  60.             this.postEvent(var1, 1);
  61.          } else {
  62.             this.postEvent(var1, 0);
  63.          }
  64.  
  65.       }
  66.    }
  67.  
  68.    private void postEvent(AWTEvent var1, int var2) {
  69.       EventQueueItem var3 = new EventQueueItem(var1);
  70.       if (this.queues[var2].head == null) {
  71.          boolean var4 = this.noEvents();
  72.          this.queues[var2].head = this.queues[var2].tail = var3;
  73.          if (var1.getID() == 800 || var1.getID() == 801) {
  74.             Object var5 = ((EventObject)var1).getSource();
  75.             ((Component)var5).coalesceEvents(var1, var1);
  76.          }
  77.  
  78.          if (var4) {
  79.             this.notifyAll();
  80.          }
  81.       } else {
  82.          Object var8 = ((EventObject)var1).getSource();
  83.          boolean var9 = var1 instanceof PeerEvent;
  84.          if (var8 instanceof Component) {
  85.             EventQueueItem var6 = this.queues[var2].head;
  86.             if (var1.id == 503 || var1.id == 506) {
  87.                for(EventQueueItem var7 = var6; var7 != null; var7 = var7.next) {
  88.                   if (var7.event instanceof MouseEvent && var7.id != var1.id) {
  89.                      var6 = var7;
  90.                   }
  91.                }
  92.             }
  93.  
  94.             while(true) {
  95.                if (var6.id == var3.id && var6.event.getSource() == var8) {
  96.                   Object var10 = ((Component)var8).coalesceEvents(var6.event, var1);
  97.                   if (var9 && var10 == null && var6.event instanceof PeerEvent) {
  98.                      var10 = ((PeerEvent)var6.event).coalesceEvents((PeerEvent)var1);
  99.                   }
  100.  
  101.                   if (var10 != null) {
  102.                      var6.event = (AWTEvent)var10;
  103.                      return;
  104.                   }
  105.                }
  106.  
  107.                if (var6.next == null) {
  108.                   break;
  109.                }
  110.  
  111.                var6 = var6.next;
  112.             }
  113.          }
  114.  
  115.          if (var1.getID() == 800 || var1.getID() == 801) {
  116.             ((Component)var8).coalesceEvents(var1, var1);
  117.          }
  118.  
  119.          this.queues[var2].tail.next = var3;
  120.          this.queues[var2].tail = var3;
  121.       }
  122.  
  123.    }
  124.  
  125.    private boolean noEvents() {
  126.       for(int var1 = 0; var1 < 3; ++var1) {
  127.          if (this.queues[var1].head != null) {
  128.             return false;
  129.          }
  130.       }
  131.  
  132.       return true;
  133.    }
  134.  
  135.    public synchronized AWTEvent getNextEvent() throws InterruptedException {
  136.       while(true) {
  137.          for(int var1 = 2; var1 >= 0; --var1) {
  138.             if (this.queues[var1].head != null) {
  139.                EventQueueItem var2 = this.queues[var1].head;
  140.                this.queues[var1].head = var2.next;
  141.                if (var2.next == null) {
  142.                   this.queues[var1].tail = null;
  143.                }
  144.  
  145.                return var2.event;
  146.             }
  147.          }
  148.  
  149.          this.wait();
  150.       }
  151.    }
  152.  
  153.    public synchronized AWTEvent peekEvent() {
  154.       for(int var1 = 2; var1 >= 0; --var1) {
  155.          if (this.queues[var1].head != null) {
  156.             return this.queues[var1].head.event;
  157.          }
  158.       }
  159.  
  160.       return null;
  161.    }
  162.  
  163.    public synchronized AWTEvent peekEvent(int var1) {
  164.       for(int var2 = 2; var2 >= 0; --var2) {
  165.          for(EventQueueItem var3 = this.queues[var2].head; var3 != null; var3 = var3.next) {
  166.             if (var3.id == var1) {
  167.                return var3.event;
  168.             }
  169.          }
  170.       }
  171.  
  172.       return null;
  173.    }
  174.  
  175.    protected void dispatchEvent(AWTEvent var1) {
  176.       Object var2 = ((EventObject)var1).getSource();
  177.       if (var1 instanceof ActiveEvent) {
  178.          ((ActiveEvent)var1).dispatch();
  179.       } else if (var2 instanceof Component) {
  180.          ((Component)var2).dispatchEvent(var1);
  181.       } else if (var2 instanceof MenuComponent) {
  182.          ((MenuComponent)var2).dispatchEvent(var1);
  183.       } else {
  184.          System.err.println("unable to dispatch event: " + var1);
  185.       }
  186.  
  187.    }
  188.  
  189.    public synchronized void push(EventQueue var1) {
  190.       if (this.nextQueue != null) {
  191.          this.nextQueue.push(var1);
  192.       } else {
  193.          synchronized(var1) {
  194.             while(this.peekEvent() != null) {
  195.                try {
  196.                   var1.postEventPrivate(this.getNextEvent());
  197.                } catch (InterruptedException var5) {
  198.                }
  199.             }
  200.  
  201.             var1.previousQueue = this;
  202.          }
  203.  
  204.          this.nextQueue = var1;
  205.       }
  206.    }
  207.  
  208.    protected void pop() throws EmptyStackException {
  209.       EventQueue var1 = this.previousQueue;
  210.       EventQueue var2 = var1 != null ? var1 : this;
  211.       synchronized(var2) {
  212.          synchronized(this) {
  213.             if (this.nextQueue != null) {
  214.                this.nextQueue.pop();
  215.                return;
  216.             }
  217.  
  218.             if (this.previousQueue == null) {
  219.                throw new EmptyStackException();
  220.             }
  221.  
  222.             this.previousQueue.nextQueue = null;
  223.  
  224.             while(this.peekEvent() != null) {
  225.                try {
  226.                   this.previousQueue.postEventPrivate(this.getNextEvent());
  227.                } catch (InterruptedException var7) {
  228.                }
  229.             }
  230.  
  231.             this.previousQueue = null;
  232.          }
  233.       }
  234.  
  235.       this.dispatchThread.stopDispatching();
  236.    }
  237.  
  238.    public static boolean isDispatchThread() {
  239.       EventQueue var0 = Toolkit.getEventQueue();
  240.  
  241.       for(EventQueue var1 = var0.nextQueue; var1 != null; var1 = var1.nextQueue) {
  242.          var0 = var1;
  243.       }
  244.  
  245.       return Thread.currentThread() == var0.dispatchThread;
  246.    }
  247.  
  248.    final EventDispatchThread getDispatchThread() {
  249.       return this.dispatchThread;
  250.    }
  251.  
  252.    final synchronized void changeKeyEventFocus(Object var1) {
  253.       for(int var2 = 0; var2 < 3; ++var2) {
  254.          for(EventQueueItem var3 = this.queues[var2].head; var3 != null; var3 = var3.next) {
  255.             if (var3.event instanceof KeyEvent) {
  256.                ((KeyEvent)var3.event).setSource(var1);
  257.             }
  258.          }
  259.       }
  260.  
  261.    }
  262.  
  263.    final void removeSourceEvents(Object var1) {
  264.       Toolkit var2 = Toolkit.getDefaultToolkit();
  265.       if (var2 instanceof SunToolkit) {
  266.          ((SunToolkit)var2).flushPendingEvents();
  267.       }
  268.  
  269.       synchronized(this) {
  270.          for(int var4 = 0; var4 < 3; ++var4) {
  271.             EventQueueItem var5 = this.queues[var4].head;
  272.  
  273.             EventQueueItem var6;
  274.             for(var6 = null; var5 != null; var5 = var5.next) {
  275.                if (var5.event.getSource() == var1) {
  276.                   if (var6 == null) {
  277.                      this.queues[var4].head = var5.next;
  278.                   } else {
  279.                      var6.next = var5.next;
  280.                   }
  281.                } else {
  282.                   var6 = var5;
  283.                }
  284.             }
  285.  
  286.             this.queues[var4].tail = var6;
  287.          }
  288.  
  289.       }
  290.    }
  291.  
  292.    public static void invokeLater(Runnable var0) {
  293.       Toolkit.getEventQueue().postEvent(new InvocationEvent(Toolkit.getDefaultToolkit(), var0));
  294.    }
  295.  
  296.    public static void invokeAndWait(Runnable var0) throws InterruptedException, InvocationTargetException {
  297.       if (isDispatchThread()) {
  298.          throw new Error("Cannot call invokeAndWait from the event dispatcher thread");
  299.       } else {
  300.          1.AWTInvocationLock var1 = new 1.AWTInvocationLock();
  301.          EventQueue var2 = Toolkit.getEventQueue();
  302.          InvocationEvent var3 = new InvocationEvent(Toolkit.getDefaultToolkit(), var0, var1, true);
  303.          synchronized(var1) {
  304.             Toolkit.getEventQueue().postEvent(var3);
  305.             var1.wait();
  306.          }
  307.  
  308.          Exception var5 = var3.getException();
  309.          if (var5 != null) {
  310.             throw new InvocationTargetException(var5);
  311.          }
  312.       }
  313.    }
  314.  
  315.    // $FF: synthetic method
  316.    static Class class$(String var0) {
  317.       try {
  318.          return Class.forName(var0);
  319.       } catch (ClassNotFoundException var2) {
  320.          throw new NoClassDefFoundError(((Throwable)var2).getMessage());
  321.       }
  322.    }
  323.  
  324.    static {
  325.       dbg = DebugHelper.create(class$java$awt$EventQueue == null ? (class$java$awt$EventQueue = class$("java.awt.EventQueue")) : class$java$awt$EventQueue);
  326.    }
  327. }
  328.