Skip to content

Commit 9f2f64c

Browse files
committed
Fixes loss of button action when removed and added to its current menu
1 parent a761be5 commit 9f2f64c

File tree

12 files changed

+209
-10
lines changed

12 files changed

+209
-10
lines changed
234 Bytes
Binary file not shown.
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
20210922053514
1+
20210923060334
234 Bytes
Binary file not shown.
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
20210922053514
1+
20210923060334
234 Bytes
Binary file not shown.

sources/net.sf.j2s.java.core/src/javax/swing/JMenu.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -337,7 +337,7 @@ public void setPopupMenuVisible(boolean b) {
337337
// System.out.println("in JMenu.setPopupMenuVisible " + b);
338338
// // Thread.dumpStack();
339339
// }
340-
if (!isEnabled())
340+
if (!isEnabled() || popupMenu == null)
341341
return;
342342
if (b && popupMenu.getPeer() == null)
343343
popupMenu.addNotify();// BH SwingJS

sources/net.sf.j2s.java.core/src/swingjs/plaf/ButtonListener.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -300,7 +300,7 @@ public void mouseReleased(MouseEvent e) {
300300
return;
301301
b.doClick(0);
302302
verifyButtonClick(b, true);
303-
JSComponentUI ui = b.秘getUI();
303+
// JSComponentUI ui = b.秘getUI();
304304
}
305305
}
306306

sources/net.sf.j2s.java.core/src/swingjs/plaf/JSButtonUI.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -224,6 +224,26 @@ else if (button.getBorder() == BorderFactory.html5Border)
224224

225225
}
226226

227+
@Override
228+
public void dispose() {
229+
if (isUIDisabled)
230+
return;
231+
super.dispose();
232+
if (menuAnchorNode != null) {
233+
// This is set in j2sMenu.js; we set it null here
234+
// re-establish events when this button is added again
235+
DOMNode.setAttr(menuAnchorNode, "_menu", null);
236+
}
237+
}
238+
239+
@Override
240+
protected void undisposeUI(DOMNode node) {
241+
if (!isDisposed)
242+
return;
243+
super.undisposeUI(node);
244+
}
245+
246+
227247
/**
228248
* called by j2sApplet.js
229249
*

sources/net.sf.j2s.java.core/src/swingjs/plaf/JSPopupMenuUI.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -232,8 +232,11 @@ public void setVisible(boolean b) {
232232
menu = (JPopupMenu) jc;
233233
j2sSwingMenu.setMenu(menu);
234234
isTainted = false;
235-
JSComponent.秘getTopInvokableAncestor(jc, true).removeMouseListener(this);
236-
JSComponent.秘getTopInvokableAncestor(jc, true).addMouseListener(this);
235+
Component top = JSComponent.秘getTopInvokableAncestor(jc, true);
236+
if (top != null) {
237+
top.removeMouseListener(this);
238+
top.addMouseListener(this);
239+
}
237240
} else {
238241
updateMenu(true);
239242
}

sources/net.sf.j2s.java.core/src/test/Test_Anything.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ public Test_Anything() {
1515

1616
JMenuBar mb2 = new JMenuBar();
1717
mb2.add(new JMenu("testing2"));
18+
1819
setJMenuBar(mb2);
1920
JTextField tf = new JTextField("test");
2021
System.out.println(tf.getPreferredSize());

0 commit comments

Comments
 (0)