Skip to content

Commit 1af88fc

Browse files
author
zhourenjian
committed
Fixed bugs on SWT.Resize/SWT.Move/SWT.Show/SWT.Hide events
Fixed bugs on mouse events of Button Other bug fixes
1 parent 16cf4c3 commit 1af88fc

File tree

7 files changed

+125
-12
lines changed

7 files changed

+125
-12
lines changed

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

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1321,6 +1321,21 @@ public void run() {
13211321
}
13221322
};
13231323
}
1324+
1325+
void hookMouseEnter() {
1326+
super.hookMouseEnter();
1327+
btnHandle.onmouseover = btnText.onmouseover = handle.onmouseover;
1328+
}
1329+
1330+
void hookMouseExit() {
1331+
super.hookMouseExit();
1332+
btnHandle.onmouseout = btnText.onmouseout = handle.onmouseout;
1333+
}
1334+
1335+
void hookMouseMove() {
1336+
super.hookMouseMove();
1337+
btnHandle.onmousemove = btnText.onmousemove = handle.onmousemove;
1338+
}
13241339

13251340
/*
13261341
TCHAR windowClass () {

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

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2073,6 +2073,8 @@ void setBounds (int x, int y, int width, int height, int flags) {
20732073
}
20742074

20752075
void setBounds (int x, int y, int width, int height, int flags, boolean defer) {
2076+
boolean resized = this.width != width || this.height != height;
2077+
boolean moved = this.left != x || this.top != y;
20762078
/**
20772079
* A patch to send bounds to support mirroring features like what Windows have.
20782080
*/
@@ -2143,6 +2145,8 @@ void setBounds (int x, int y, int width, int height, int flags, boolean defer) {
21432145
* for the view, not the data!
21442146
*/
21452147
this.left = tempX;
2148+
if (resized && hooks(SWT.Resize)) sendEvent(SWT.Resize);
2149+
if (moved && hooks(SWT.Move)) sendEvent(SWT.Move);
21462150
}
21472151

21482152
/**
@@ -2821,8 +2825,8 @@ public void setVisible (boolean visible) {
28212825
display.sendMessage(new MESSAGE(this, MESSAGE.CONTROL_LAYOUT, null));
28222826
}
28232827
}
2824-
handle.style.visibility = visible ? "visible" : "hidden";
2825-
handle.style.display = visible ? "block" : "none";
2828+
handle.style.visibility = visible ? "" : "hidden";
2829+
handle.style.display = visible ? "" : "none";
28262830
/*
28272831
* Feature in Windows. If the receiver has focus, hiding
28282832
* the receiver causes no window to have focus. The fix is

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

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -731,11 +731,11 @@ void addModalLayer() {
731731

732732
/**
733733
* @j2sNative
734-
* ClazzLoader.loadClass ("$wt.widgets.HTMLSource", function () {
734+
* ClazzLoader.loadClass ("org.eclipse.swt.widgets.HTMLSource", function () {
735735
* new $wt.widgets.HTMLSource ().exportSource (this, a);
736736
* });
737737
* @j2sNativeSrc
738-
* ClazzLoader.loadClass ("$wt.widgets.HTMLSource", function () {
738+
* ClazzLoader.loadClass ("org.eclipse.swt.widgets.HTMLSource", function () {
739739
* new $wt.widgets.HTMLSource ().exportSource (this, onlyContent);
740740
* });
741741
*/
@@ -2171,7 +2171,8 @@ public void setVisible (boolean visible) {
21712171
//if (visible == OS.IsWindowVisible (handle)) return;
21722172
if (visible == (handle.style.visibility != "hidden")) return;
21732173
}
2174-
handle.style.visibility = visible ? "visible" : "hidden";
2174+
handle.style.visibility = visible ? "" : "hidden";
2175+
handle.style.display = visible ? "" : "none";
21752176
if (visible) {
21762177
/*
21772178
* It is possible (but unlikely), that application

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

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -523,7 +523,10 @@ String parse (String string, Object handle) {
523523
if (anchor != null) {
524524
anchor.href = ids[linkIndex];
525525
anchor.target = "_blank";
526-
anchor.title = ids[linkIndex];
526+
String title = ids[linkIndex];
527+
if (title != null && title.length() > 0 && !title.startsWith("#")) {
528+
anchor.title = ids[linkIndex];
529+
}
527530
}
528531
linkIndex++;
529532
start = tagStart = linkStart = endtagStart = refStart = index + 1;

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

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -221,13 +221,29 @@ void _setVisible (boolean visible) {
221221
CSSStyle style = handle.style;
222222
if (visible) {
223223
//style.width = "200px";
224-
style.left = x + "px";
225-
style.top = y + "px";
224+
Rectangle clientArea = getDisplay().getPrimaryMonitor().getClientArea();
226225
style.zIndex = "1" + window.currentTopZIndex;
227226
style.display = "block";
227+
int height = OS.getContainerHeight(handle);
228+
int width = OS.getContainerWidth(handle);
229+
int left = x, top = y;
230+
if (y + height > clientArea.y + clientArea.height) {
231+
if (y + height - clientArea.y - clientArea.height > height - y) {
232+
top = y - height;
233+
}
234+
}
235+
if (x + width > clientArea.x + clientArea.width) {
236+
if (x + width - clientArea.x - clientArea.width > width - x) {
237+
left = x - width;
238+
}
239+
}
240+
style.left = left + "px";
241+
style.top = top + "px";
228242
btnFocus.focus();
243+
if (hooks(SWT.Show)) sendEvent(SWT.Show);
229244
} else {
230245
style.display = "none";
246+
if (hooks(SWT.Hide)) sendEvent(SWT.Hide);
231247
}
232248
/*
233249
int hwndParent = parent.handle;
@@ -505,6 +521,7 @@ public void run() {
505521
if (time - lastFocusdTime > 20) {
506522
if ((style & SWT.BAR) == 0) {
507523
handle.style.display = "none";
524+
sendEvent(SWT.Hide);
508525
} else {
509526
//OS.removeCSSClass(handle, "menu-bar-selected");
510527
}

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

Lines changed: 45 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import org.eclipse.swt.graphics.Rectangle;
2323
import org.eclipse.swt.internal.RunnableCompatibility;
2424
import org.eclipse.swt.internal.browser.OS;
25+
import org.eclipse.swt.internal.dnd.HTMLEventWrapper;
2526
import org.eclipse.swt.internal.xhtml.Element;
2627
import org.eclipse.swt.internal.xhtml.HTMLEvent;
2728
import org.eclipse.swt.internal.xhtml.document;
@@ -303,8 +304,51 @@ public void run() {
303304
ev.time = display.getLastEventTime();
304305
sendEvent(ev);
305306
toReturn(ev.doit);
306-
sendEvent(SWT.KeyDown);
307+
308+
HTMLEventWrapper e = new HTMLEventWrapper (getEvent());
309+
HTMLEvent evt = (HTMLEvent) e.event;
310+
int keyCode = evt.keyCode;
311+
if (keyCode == 27) {
312+
dragStatus = false;
313+
}
314+
Event event = new Event();
315+
event.character = (char) keyCode;
316+
event.keyCode = keyCode;
317+
event.type = SWT.KeyDown;
318+
event.display = display;
319+
event.stateMask = (evt.altKey ? SWT.ALT : 0) | (evt.shiftKey ? SWT.SHIFT : 0) | (evt.ctrlKey ? SWT.CTRL : 0);
320+
event.widget = Text.this;
321+
if (event.time == 0) {
322+
event.time = display.getLastEventTime ();
323+
}
324+
sendEvent(event);
325+
//sendEvent(SWT.KeyDown);
326+
}
327+
}
328+
};
329+
}
330+
331+
@Override
332+
void hookKeyUp() {
333+
textHandle.onkeyup = new RunnableCompatibility() {
334+
public void run() {
335+
HTMLEventWrapper e = new HTMLEventWrapper (getEvent());
336+
HTMLEvent evt = (HTMLEvent) e.event;
337+
int keyCode = evt.keyCode;
338+
if (keyCode == 27) {
339+
dragStatus = false;
340+
}
341+
Event event = new Event();
342+
event.character = (char) keyCode;
343+
event.keyCode = keyCode;
344+
event.type = SWT.KeyUp;
345+
event.display = display;
346+
event.stateMask = (evt.altKey ? SWT.ALT : 0) | (evt.shiftKey ? SWT.SHIFT : 0) | (evt.ctrlKey ? SWT.CTRL : 0);
347+
event.widget = Text.this;
348+
if (event.time == 0) {
349+
event.time = display.getLastEventTime ();
307350
}
351+
sendEvent(event);
308352
}
309353
};
310354
}

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

Lines changed: 32 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import org.eclipse.swt.SWT;
1616
import org.eclipse.swt.SWTException;
1717
import org.eclipse.swt.events.DisposeListener;
18+
import org.eclipse.swt.events.KeyEvent;
1819
import org.eclipse.swt.internal.RunnableCompatibility;
1920
import org.eclipse.swt.internal.SWTEventListener;
2021
import org.eclipse.swt.internal.dnd.HTMLEventWrapper;
@@ -783,18 +784,46 @@ public int getStyle () {
783784
void hookKeyDown() {
784785
handle.onkeydown = new RunnableCompatibility() {
785786
public void run() {
786-
sendEvent(SWT.KeyDown);
787+
HTMLEventWrapper e = new HTMLEventWrapper (getEvent());
788+
HTMLEvent evt = (HTMLEvent) e.event;
789+
int keyCode = evt.keyCode;
790+
if (keyCode == 27) {
791+
dragStatus = false;
792+
}
793+
Event event = new Event();
794+
event.character = (char) keyCode;
795+
event.keyCode = keyCode;
796+
event.type = SWT.KeyDown;
797+
event.display = display;
798+
event.stateMask = (evt.altKey ? SWT.ALT : 0) | (evt.shiftKey ? SWT.SHIFT : 0) | (evt.ctrlKey ? SWT.CTRL : 0);
799+
event.widget = Widget.this;
800+
if (event.time == 0) {
801+
event.time = display.getLastEventTime ();
802+
}
803+
sendEvent(event);
787804
}
788805
};
789806
}
790807
void hookKeyUp() {
791808
handle.onkeyup = new RunnableCompatibility() {
792809
public void run() {
793810
HTMLEventWrapper e = new HTMLEventWrapper (getEvent());
794-
if (((HTMLEvent) e.event).keyCode == 27) {
811+
HTMLEvent evt = (HTMLEvent) e.event;
812+
int keyCode = evt.keyCode;
813+
if (keyCode == 27) {
795814
dragStatus = false;
796815
}
797-
sendEvent(SWT.KeyUp);
816+
Event event = new Event();
817+
event.character = (char) keyCode;
818+
event.keyCode = keyCode;
819+
event.type = SWT.KeyUp;
820+
event.display = display;
821+
event.stateMask = (evt.altKey ? SWT.ALT : 0) | (evt.shiftKey ? SWT.SHIFT : 0) | (evt.ctrlKey ? SWT.CTRL : 0);
822+
event.widget = Widget.this;
823+
if (event.time == 0) {
824+
event.time = display.getLastEventTime ();
825+
}
826+
sendEvent(event);
798827
}
799828
};
800829
}

0 commit comments

Comments
 (0)