Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit a07d75d

Browse files
author
zhourenjian
committed
Fixing bug that IE6 sends out mousemove event even after the mouse is not moving and this IE6 behavior break the mouseHoverProc logic and no MouseHover event is sent.
1 parent 143cde4 commit a07d75d

File tree

1 file changed

+28
-14
lines changed
  • sources/net.sf.j2s.java.org.eclipse.swt/src/org/eclipse/swt/widgets

1 file changed

+28
-14
lines changed

sources/net.sf.j2s.java.org.eclipse.swt/src/org/eclipse/swt/widgets/Widget.java

Lines changed: 28 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -857,31 +857,33 @@ public void run() {
857857
hookKeyPress();
858858
}
859859

860-
boolean mouseHoverProc() {
860+
boolean mouseHoverProc(boolean clear) {
861861
boolean hoverHooked = false;
862-
if (hoverTimerID != 0) {
862+
if (hoverTimerID != 0 && clear) {
863863
hoverHooked = true;
864864
window.clearTimeout(hoverTimerID);
865865
hoverTimerID = 0;
866866
}
867867
if (hoverHooked || hooks(SWT.MouseHover)) {
868868
hoverHooked = true;
869-
hoverTimerID = window.setTimeout(Clazz.makeFunction(new Runnable() {
870-
public void run() {
871-
if (!isDisposed()) {
872-
sendEvent(SWT.MouseHover);
869+
if (hoverTimerID == 0) {
870+
hoverTimerID = window.setTimeout(Clazz.makeFunction(new Runnable() {
871+
public void run() {
872+
if (!isDisposed()) {
873+
sendEvent(SWT.MouseHover);
874+
}
875+
hoverTimerID = 0;
873876
}
874-
hoverTimerID = 0;
875-
}
876-
}), 400);
877+
}), 400);
878+
}
877879
}
878880
return hoverHooked;
879881
}
880882

881883
void hookMouseDown() {
882884
handle.onmousedown = new RunnableCompatibility() {
883885
public void run() {
884-
boolean hoverHooked = mouseHoverProc();
886+
boolean hoverHooked = mouseHoverProc(true);
885887
HTMLEventWrapper e = new HTMLEventWrapper (getEvent());
886888
if (e.leftButtonHold) {
887889
dragStatus = true;
@@ -895,7 +897,7 @@ public void run() {
895897
void hookMouseUp() {
896898
handle.onmouseup = new RunnableCompatibility() {
897899
public void run() {
898-
boolean hoverHooked = mouseHoverProc();
900+
boolean hoverHooked = mouseHoverProc(true);
899901
dragStatus = false;
900902
if (!hoverHooked || hooks(SWT.MouseUp)) {
901903
HTMLEventWrapper e = new HTMLEventWrapper (getEvent());
@@ -907,9 +909,20 @@ public void run() {
907909
void hookMouseMove() {
908910
handle.onmousemove = new RunnableCompatibility() {
909911
public void run() {
910-
boolean hoverHooked = mouseHoverProc();
911-
boolean dragHooked = false;
912912
HTMLEventWrapper e = new HTMLEventWrapper (getEvent());
913+
Widget widgetThis = Widget.this;
914+
/**
915+
* @j2sNative
916+
* if (O$.isIE60 || O$.isIE55 || O$.isIE50) {
917+
* if (e.x == widgetThis.lastMouseMoveX && e.y == widgetThis.lastMouseMoveY) {
918+
* return true;
919+
* }
920+
* widgetThis.lastMouseMoveX = e.x;
921+
* widgetThis.lastMouseMoveY = e.y;
922+
* }
923+
*/ { widgetThis.toString(); }
924+
boolean hoverHooked = mouseHoverProc(false);
925+
boolean dragHooked = false;
913926
if (dragStatus && e.leftButtonHold
914927
&& hooks(SWT.DragDetect)) {
915928
dragHooked = true;
@@ -919,13 +932,14 @@ && hooks(SWT.DragDetect)) {
919932
if ((!dragHooked && !hoverHooked) || hooks(SWT.MouseMove)) {
920933
sendMouseEvent(SWT.MouseMove, ((HTMLEvent) getEvent()).button, e.target, e.x, e.y);
921934
}
935+
toReturn(true);
922936
}
923937
};
924938
}
925939
void hookMouseEnter() {
926940
handle.onmouseover = new RunnableCompatibility() {
927941
public void run() {
928-
boolean hoverHooked = mouseHoverProc();
942+
boolean hoverHooked = mouseHoverProc(true);
929943
if (!hoverHooked || hooks(SWT.MouseEnter)) {
930944
HTMLEventWrapper e = new HTMLEventWrapper (getEvent());
931945
sendMouseEvent(SWT.MouseEnter, ((HTMLEvent) getEvent()).button, e.target, e.x, e.y);

0 commit comments

Comments
 (0)