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 / LightweightDispatcher.class (.txt) < prev    next >
Encoding:
Java Class File  |  1979-12-31  |  5.0 KB  |  299 lines

  1. package java.awt;
  2.  
  3. import java.awt.event.AWTEventListener;
  4. import java.awt.event.ComponentEvent;
  5. import java.awt.event.FocusEvent;
  6. import java.awt.event.InputEvent;
  7. import java.awt.event.KeyEvent;
  8. import java.awt.event.MouseEvent;
  9. import java.io.Serializable;
  10. import java.security.AccessController;
  11. import java.util.EventObject;
  12. import java.util.Stack;
  13. import sun.awt.GlobalCursorManager;
  14.  
  15. class LightweightDispatcher implements Serializable, AWTEventListener {
  16.    private static final long serialVersionUID = 5184291520170872969L;
  17.    private static final int LWD_MOUSE_DRAGGED_OVER = 1500;
  18.    private Container nativeContainer;
  19.    private Component focus;
  20.    private transient Stack focusStack = new Stack();
  21.    private transient Component mouseEventTarget;
  22.    private transient Component targetLastEntered;
  23.    private transient boolean isMouseInNativeContainer = false;
  24.    private transient boolean isClickOrphaned = false;
  25.    private boolean dragging;
  26.    private Cursor nativeCursor;
  27.    private long eventMask;
  28.    private static final long PROXY_EVENT_MASK = 60L;
  29.    private static final long MOUSE_MASK = 48L;
  30.  
  31.    LightweightDispatcher(Container var1) {
  32.       this.nativeContainer = var1;
  33.       this.focus = null;
  34.       this.mouseEventTarget = null;
  35.       this.eventMask = 0L;
  36.    }
  37.  
  38.    void dispose() {
  39.       this.stopListeningForOtherDrags();
  40.    }
  41.  
  42.    void enableEvents(long var1) {
  43.       this.eventMask |= var1;
  44.    }
  45.  
  46.    boolean setFocusRequest(Component var1) {
  47.       boolean var2 = false;
  48.       Window var3 = this.nativeContainer.getWindow();
  49.       if (var3 != null && var1 != null) {
  50.          Component var4 = var3.getFocusOwner();
  51.          this.focusStack.push(var1);
  52.          if (this.focusStack.size() == 1) {
  53.             if (var4 == null) {
  54.                var2 = true;
  55.             } else if (var4 == this.nativeContainer) {
  56.                this.nativeContainer.dispatchEvent(new FocusEvent(this.nativeContainer, 1005, false));
  57.             } else if (var4 != var1) {
  58.                if (var4 == this.focus) {
  59.                   if (this.focus != null) {
  60.                      this.focus.dispatchEvent(new FocusEvent(this.focus, 1005, false));
  61.                   }
  62.                } else {
  63.                   var2 = true;
  64.                }
  65.             }
  66.          }
  67.  
  68.          int var5 = this.focusStack.size();
  69.          if (var5 > 0) {
  70.             this.focus = (Component)this.focusStack.pop();
  71.             this.focusStack.clear();
  72.             if (!var2 && (var4 != var1 || var5 > 1)) {
  73.                this.focus.dispatchEvent(new FocusEvent(this.focus, 1004, false));
  74.             }
  75.          }
  76.  
  77.          return var2;
  78.       } else {
  79.          return true;
  80.       }
  81.    }
  82.  
  83.    boolean dispatchEvent(AWTEvent var1) {
  84.       boolean var2 = false;
  85.       if ((this.eventMask & 60L) != 0L) {
  86.          if (var1 instanceof MouseEvent && (this.eventMask & 48L) != 0L) {
  87.             MouseEvent var5 = (MouseEvent)var1;
  88.             var2 = this.processMouseEvent(var5);
  89.          } else if (var1 instanceof FocusEvent) {
  90.             FocusEvent var3 = (FocusEvent)var1;
  91.             var2 = this.processFocusEvent(var3);
  92.          } else if (var1 instanceof KeyEvent) {
  93.             KeyEvent var4 = (KeyEvent)var1;
  94.             var2 = this.processKeyEvent(var4);
  95.          }
  96.       }
  97.  
  98.       if (var1.getID() == 503) {
  99.          GlobalCursorManager.updateCursorImmediately((InputEvent)var1);
  100.       }
  101.  
  102.       return var2;
  103.    }
  104.  
  105.    private boolean processKeyEvent(KeyEvent var1) {
  106.       if (this.focus != null) {
  107.          Component var2 = ((ComponentEvent)var1).getComponent();
  108.          var1.setSource(this.focus);
  109.          this.focus.dispatchEvent(var1);
  110.          var1.setSource(var2);
  111.          return ((InputEvent)var1).isConsumed();
  112.       } else {
  113.          return false;
  114.       }
  115.    }
  116.  
  117.    private boolean processFocusEvent(FocusEvent var1) {
  118.       if (this.focus != null) {
  119.          int var2 = ((AWTEvent)var1).getID();
  120.          FocusEvent var3 = new FocusEvent(this.focus, var2, var1.isTemporary());
  121.          ((AWTEvent)var1).copyPrivateDataInto(var3);
  122.          this.focus.dispatchEvent(var3);
  123.          if (var2 == 1005 && !var1.isTemporary()) {
  124.             this.focus = null;
  125.          }
  126.  
  127.          return true;
  128.       } else {
  129.          return false;
  130.       }
  131.    }
  132.  
  133.    private boolean processMouseEvent(MouseEvent var1) {
  134.       int var2 = ((AWTEvent)var1).getID();
  135.       Component var3 = this.nativeContainer.getMouseEventTarget(var1.getX(), var1.getY(), true);
  136.       this.trackMouseEnterExit(var3, var1);
  137.       if (this.mouseEventTarget == null && (var2 == 503 || var2 == 501)) {
  138.          Component var4 = var3 != this.nativeContainer ? var3 : null;
  139.          this.setMouseTarget(var4, var1);
  140.       }
  141.  
  142.       if (this.mouseEventTarget != null) {
  143.          switch (var2) {
  144.             case 500:
  145.                if (!this.isClickOrphaned) {
  146.                   this.retargetMouseEvent(this.mouseEventTarget, var2, var1);
  147.                }
  148.  
  149.                this.isClickOrphaned = false;
  150.                break;
  151.             case 501:
  152.                this.dragging = true;
  153.                this.retargetMouseEvent(this.mouseEventTarget, var2, var1);
  154.                break;
  155.             case 502:
  156.                Component var5 = this.mouseEventTarget;
  157.                this.dragging = false;
  158.                this.retargetMouseEvent(this.mouseEventTarget, var2, var1);
  159.                Component var7 = this.nativeContainer.getMouseEventTarget(var1.getX(), var1.getY(), false);
  160.                this.setMouseTarget(var7, var1);
  161.                this.isClickOrphaned = var7 != var5;
  162.                break;
  163.             case 503:
  164.                Component var6 = this.nativeContainer.getMouseEventTarget(var1.getX(), var1.getY(), false);
  165.                this.setMouseTarget(var6, var1);
  166.                this.retargetMouseEvent(this.mouseEventTarget, var2, var1);
  167.             case 504:
  168.             default:
  169.                break;
  170.             case 505:
  171.                if (!this.dragging) {
  172.                   this.setMouseTarget((Component)null, var1);
  173.                }
  174.                break;
  175.             case 506:
  176.                if (this.dragging) {
  177.                   this.retargetMouseEvent(this.mouseEventTarget, var2, var1);
  178.                }
  179.          }
  180.  
  181.          ((InputEvent)var1).consume();
  182.       }
  183.  
  184.       return ((InputEvent)var1).isConsumed();
  185.    }
  186.  
  187.    private void setMouseTarget(Component var1, MouseEvent var2) {
  188.       if (var1 != this.mouseEventTarget) {
  189.          this.mouseEventTarget = var1;
  190.       }
  191.  
  192.    }
  193.  
  194.    private void trackMouseEnterExit(Component var1, MouseEvent var2) {
  195.       Component var3 = null;
  196.       int var4 = ((AWTEvent)var2).getID();
  197.       if (var4 != 505 && var4 != 506 && var4 != 1500 && !this.isMouseInNativeContainer) {
  198.          this.isMouseInNativeContainer = true;
  199.          this.startListeningForOtherDrags();
  200.       } else if (var4 == 505) {
  201.          this.isMouseInNativeContainer = false;
  202.          this.stopListeningForOtherDrags();
  203.       }
  204.  
  205.       if (this.isMouseInNativeContainer) {
  206.          var3 = var1;
  207.       }
  208.  
  209.       if (this.targetLastEntered != var3) {
  210.          if (this.targetLastEntered != null && this.targetLastEntered != this.nativeContainer) {
  211.             this.retargetMouseEvent(this.targetLastEntered, 505, var2);
  212.          }
  213.  
  214.          if (this.nativeContainer != null && var3 == null) {
  215.             this.retargetMouseEvent(this.nativeContainer, 505, var2);
  216.          }
  217.  
  218.          if (var4 == 505) {
  219.             ((InputEvent)var2).consume();
  220.          }
  221.  
  222.          if (this.nativeContainer != null && this.targetLastEntered == null) {
  223.             this.retargetMouseEvent(this.nativeContainer, 504, var2);
  224.          }
  225.  
  226.          if (var3 != null && var3 != this.nativeContainer) {
  227.             this.retargetMouseEvent(var3, 504, var2);
  228.          }
  229.  
  230.          if (var4 == 504) {
  231.             ((InputEvent)var2).consume();
  232.          }
  233.  
  234.          this.targetLastEntered = var3;
  235.       }
  236.    }
  237.  
  238.    private void startListeningForOtherDrags() {
  239.       AccessController.doPrivileged(new 1(this));
  240.    }
  241.  
  242.    private void stopListeningForOtherDrags() {
  243.       AccessController.doPrivileged(new 2(this));
  244.    }
  245.  
  246.    public void eventDispatched(AWTEvent var1) {
  247.       boolean var2 = var1 instanceof MouseEvent && var1.id == 506 && ((EventObject)var1).getSource() != this.nativeContainer;
  248.       if (var2) {
  249.          MouseEvent var3 = (MouseEvent)var1;
  250.          Object var5 = this.nativeContainer.getTreeLock();
  251.          MouseEvent var4;
  252.          synchronized(var5) {
  253.             Component var6 = ((ComponentEvent)var3).getComponent();
  254.             if (!var6.isShowing() || !this.nativeContainer.isShowing()) {
  255.                return;
  256.             }
  257.  
  258.             var4 = new MouseEvent(this.nativeContainer, 1500, ((InputEvent)var3).getWhen(), ((InputEvent)var3).getModifiers(), var3.getX(), var3.getY(), var3.getClickCount(), var3.isPopupTrigger());
  259.             ((AWTEvent)var3).copyPrivateDataInto(var4);
  260.             Point var7 = var6.getLocationOnScreen();
  261.             Point var8 = this.nativeContainer.getLocationOnScreen();
  262.             var4.translatePoint(var7.x - var8.x, var7.y - var8.y);
  263.          }
  264.  
  265.          Component var11 = this.nativeContainer.getMouseEventTarget(var4.getX(), var4.getY(), true);
  266.          this.trackMouseEnterExit(var11, var4);
  267.       }
  268.    }
  269.  
  270.    void retargetMouseEvent(Component var1, int var2, MouseEvent var3) {
  271.       if (var1 != null) {
  272.          int var4 = var3.getX();
  273.          int var5 = var3.getY();
  274.  
  275.          Object var6;
  276.          for(var6 = var1; var6 != null && var6 != this.nativeContainer; var6 = ((Component)var6).getParent()) {
  277.             var4 -= ((Component)var6).x;
  278.             var5 -= ((Component)var6).y;
  279.          }
  280.  
  281.          if (var6 != null) {
  282.             MouseEvent var7 = new MouseEvent(var1, var2, ((InputEvent)var3).getWhen(), ((InputEvent)var3).getModifiers(), var4, var5, var3.getClickCount(), var3.isPopupTrigger());
  283.             ((AWTEvent)var3).copyPrivateDataInto(var7);
  284.             if (var1 == this.nativeContainer) {
  285.                ((Container)var1).dispatchEventToSelf(var7);
  286.             } else {
  287.                var1.dispatchEvent(var7);
  288.             }
  289.          }
  290.  
  291.       }
  292.    }
  293.  
  294.    // $FF: synthetic method
  295.    static Container access$000(LightweightDispatcher var0) {
  296.       return var0.nativeContainer;
  297.    }
  298. }
  299.