home *** CD-ROM | disk | FTP | other *** search
- package java.awt;
-
- import java.awt.event.AWTEventListener;
- import java.awt.event.ComponentEvent;
- import java.awt.event.FocusEvent;
- import java.awt.event.InputEvent;
- import java.awt.event.KeyEvent;
- import java.awt.event.MouseEvent;
- import java.io.Serializable;
- import java.security.AccessController;
- import java.util.EventObject;
- import java.util.Stack;
- import sun.awt.GlobalCursorManager;
-
- class LightweightDispatcher implements Serializable, AWTEventListener {
- private static final long serialVersionUID = 5184291520170872969L;
- private static final int LWD_MOUSE_DRAGGED_OVER = 1500;
- private Container nativeContainer;
- private Component focus;
- private transient Stack focusStack = new Stack();
- private transient Component mouseEventTarget;
- private transient Component targetLastEntered;
- private transient boolean isMouseInNativeContainer = false;
- private transient boolean isClickOrphaned = false;
- private boolean dragging;
- private Cursor nativeCursor;
- private long eventMask;
- private static final long PROXY_EVENT_MASK = 60L;
- private static final long MOUSE_MASK = 48L;
-
- LightweightDispatcher(Container var1) {
- this.nativeContainer = var1;
- this.focus = null;
- this.mouseEventTarget = null;
- this.eventMask = 0L;
- }
-
- void dispose() {
- this.stopListeningForOtherDrags();
- }
-
- void enableEvents(long var1) {
- this.eventMask |= var1;
- }
-
- boolean setFocusRequest(Component var1) {
- boolean var2 = false;
- Window var3 = this.nativeContainer.getWindow();
- if (var3 != null && var1 != null) {
- Component var4 = var3.getFocusOwner();
- this.focusStack.push(var1);
- if (this.focusStack.size() == 1) {
- if (var4 == null) {
- var2 = true;
- } else if (var4 == this.nativeContainer) {
- this.nativeContainer.dispatchEvent(new FocusEvent(this.nativeContainer, 1005, false));
- } else if (var4 != var1) {
- if (var4 == this.focus) {
- if (this.focus != null) {
- this.focus.dispatchEvent(new FocusEvent(this.focus, 1005, false));
- }
- } else {
- var2 = true;
- }
- }
- }
-
- int var5 = this.focusStack.size();
- if (var5 > 0) {
- this.focus = (Component)this.focusStack.pop();
- this.focusStack.clear();
- if (!var2 && (var4 != var1 || var5 > 1)) {
- this.focus.dispatchEvent(new FocusEvent(this.focus, 1004, false));
- }
- }
-
- return var2;
- } else {
- return true;
- }
- }
-
- boolean dispatchEvent(AWTEvent var1) {
- boolean var2 = false;
- if ((this.eventMask & 60L) != 0L) {
- if (var1 instanceof MouseEvent && (this.eventMask & 48L) != 0L) {
- MouseEvent var5 = (MouseEvent)var1;
- var2 = this.processMouseEvent(var5);
- } else if (var1 instanceof FocusEvent) {
- FocusEvent var3 = (FocusEvent)var1;
- var2 = this.processFocusEvent(var3);
- } else if (var1 instanceof KeyEvent) {
- KeyEvent var4 = (KeyEvent)var1;
- var2 = this.processKeyEvent(var4);
- }
- }
-
- if (var1.getID() == 503) {
- GlobalCursorManager.updateCursorImmediately((InputEvent)var1);
- }
-
- return var2;
- }
-
- private boolean processKeyEvent(KeyEvent var1) {
- if (this.focus != null) {
- Component var2 = ((ComponentEvent)var1).getComponent();
- var1.setSource(this.focus);
- this.focus.dispatchEvent(var1);
- var1.setSource(var2);
- return ((InputEvent)var1).isConsumed();
- } else {
- return false;
- }
- }
-
- private boolean processFocusEvent(FocusEvent var1) {
- if (this.focus != null) {
- int var2 = ((AWTEvent)var1).getID();
- FocusEvent var3 = new FocusEvent(this.focus, var2, var1.isTemporary());
- ((AWTEvent)var1).copyPrivateDataInto(var3);
- this.focus.dispatchEvent(var3);
- if (var2 == 1005 && !var1.isTemporary()) {
- this.focus = null;
- }
-
- return true;
- } else {
- return false;
- }
- }
-
- private boolean processMouseEvent(MouseEvent var1) {
- int var2 = ((AWTEvent)var1).getID();
- Component var3 = this.nativeContainer.getMouseEventTarget(var1.getX(), var1.getY(), true);
- this.trackMouseEnterExit(var3, var1);
- if (this.mouseEventTarget == null && (var2 == 503 || var2 == 501)) {
- Component var4 = var3 != this.nativeContainer ? var3 : null;
- this.setMouseTarget(var4, var1);
- }
-
- if (this.mouseEventTarget != null) {
- switch (var2) {
- case 500:
- if (!this.isClickOrphaned) {
- this.retargetMouseEvent(this.mouseEventTarget, var2, var1);
- }
-
- this.isClickOrphaned = false;
- break;
- case 501:
- this.dragging = true;
- this.retargetMouseEvent(this.mouseEventTarget, var2, var1);
- break;
- case 502:
- Component var5 = this.mouseEventTarget;
- this.dragging = false;
- this.retargetMouseEvent(this.mouseEventTarget, var2, var1);
- Component var7 = this.nativeContainer.getMouseEventTarget(var1.getX(), var1.getY(), false);
- this.setMouseTarget(var7, var1);
- this.isClickOrphaned = var7 != var5;
- break;
- case 503:
- Component var6 = this.nativeContainer.getMouseEventTarget(var1.getX(), var1.getY(), false);
- this.setMouseTarget(var6, var1);
- this.retargetMouseEvent(this.mouseEventTarget, var2, var1);
- case 504:
- default:
- break;
- case 505:
- if (!this.dragging) {
- this.setMouseTarget((Component)null, var1);
- }
- break;
- case 506:
- if (this.dragging) {
- this.retargetMouseEvent(this.mouseEventTarget, var2, var1);
- }
- }
-
- ((InputEvent)var1).consume();
- }
-
- return ((InputEvent)var1).isConsumed();
- }
-
- private void setMouseTarget(Component var1, MouseEvent var2) {
- if (var1 != this.mouseEventTarget) {
- this.mouseEventTarget = var1;
- }
-
- }
-
- private void trackMouseEnterExit(Component var1, MouseEvent var2) {
- Component var3 = null;
- int var4 = ((AWTEvent)var2).getID();
- if (var4 != 505 && var4 != 506 && var4 != 1500 && !this.isMouseInNativeContainer) {
- this.isMouseInNativeContainer = true;
- this.startListeningForOtherDrags();
- } else if (var4 == 505) {
- this.isMouseInNativeContainer = false;
- this.stopListeningForOtherDrags();
- }
-
- if (this.isMouseInNativeContainer) {
- var3 = var1;
- }
-
- if (this.targetLastEntered != var3) {
- if (this.targetLastEntered != null && this.targetLastEntered != this.nativeContainer) {
- this.retargetMouseEvent(this.targetLastEntered, 505, var2);
- }
-
- if (this.nativeContainer != null && var3 == null) {
- this.retargetMouseEvent(this.nativeContainer, 505, var2);
- }
-
- if (var4 == 505) {
- ((InputEvent)var2).consume();
- }
-
- if (this.nativeContainer != null && this.targetLastEntered == null) {
- this.retargetMouseEvent(this.nativeContainer, 504, var2);
- }
-
- if (var3 != null && var3 != this.nativeContainer) {
- this.retargetMouseEvent(var3, 504, var2);
- }
-
- if (var4 == 504) {
- ((InputEvent)var2).consume();
- }
-
- this.targetLastEntered = var3;
- }
- }
-
- private void startListeningForOtherDrags() {
- AccessController.doPrivileged(new 1(this));
- }
-
- private void stopListeningForOtherDrags() {
- AccessController.doPrivileged(new 2(this));
- }
-
- public void eventDispatched(AWTEvent var1) {
- boolean var2 = var1 instanceof MouseEvent && var1.id == 506 && ((EventObject)var1).getSource() != this.nativeContainer;
- if (var2) {
- MouseEvent var3 = (MouseEvent)var1;
- Object var5 = this.nativeContainer.getTreeLock();
- MouseEvent var4;
- synchronized(var5) {
- Component var6 = ((ComponentEvent)var3).getComponent();
- if (!var6.isShowing() || !this.nativeContainer.isShowing()) {
- return;
- }
-
- var4 = new MouseEvent(this.nativeContainer, 1500, ((InputEvent)var3).getWhen(), ((InputEvent)var3).getModifiers(), var3.getX(), var3.getY(), var3.getClickCount(), var3.isPopupTrigger());
- ((AWTEvent)var3).copyPrivateDataInto(var4);
- Point var7 = var6.getLocationOnScreen();
- Point var8 = this.nativeContainer.getLocationOnScreen();
- var4.translatePoint(var7.x - var8.x, var7.y - var8.y);
- }
-
- Component var11 = this.nativeContainer.getMouseEventTarget(var4.getX(), var4.getY(), true);
- this.trackMouseEnterExit(var11, var4);
- }
- }
-
- void retargetMouseEvent(Component var1, int var2, MouseEvent var3) {
- if (var1 != null) {
- int var4 = var3.getX();
- int var5 = var3.getY();
-
- Object var6;
- for(var6 = var1; var6 != null && var6 != this.nativeContainer; var6 = ((Component)var6).getParent()) {
- var4 -= ((Component)var6).x;
- var5 -= ((Component)var6).y;
- }
-
- if (var6 != null) {
- MouseEvent var7 = new MouseEvent(var1, var2, ((InputEvent)var3).getWhen(), ((InputEvent)var3).getModifiers(), var4, var5, var3.getClickCount(), var3.isPopupTrigger());
- ((AWTEvent)var3).copyPrivateDataInto(var7);
- if (var1 == this.nativeContainer) {
- ((Container)var1).dispatchEventToSelf(var7);
- } else {
- var1.dispatchEvent(var7);
- }
- }
-
- }
- }
-
- // $FF: synthetic method
- static Container access$000(LightweightDispatcher var0) {
- return var0.nativeContainer;
- }
- }
-