home *** CD-ROM | disk | FTP | other *** search
/ PC Plus SuperCD 31 / SUPERCDa.iso / Inet / HotJava / hjava.exe / Windows / resource / jre / lib / rt.jar / java / awt / LightweightDispatcher.class (.txt) < prev    next >
Encoding:
Java Class File  |  1998-11-11  |  5.7 KB  |  269 lines

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