Skip to content

Commit 3d5b6b5

Browse files
hansonrhansonr
authored andcommitted
better handling of menu closing
1 parent 0baae96 commit 3d5b6b5

File tree

7 files changed

+57
-50
lines changed

7 files changed

+57
-50
lines changed

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -303,7 +303,7 @@ private static boolean checkHideMenus(AbstractButton b) {
303303
if (s == "MenuUI")
304304
return true;
305305
if (s.indexOf("MenuItemUI") >= 0)
306-
JSComponentUI.hideAllMenus();
306+
JSComponentUI.hideMenusAndToolTip();
307307
return false;
308308
}
309309

@@ -393,7 +393,7 @@ public void actionPerformed(ActionEvent e) {
393393
case SELECT:
394394
JMenu menu = getMenu(e);
395395
if (menu.isTopLevelMenu()) {
396-
JSComponentUI.hideAllMenus();
396+
JSComponentUI.hideMenusAndToolTip();
397397
JPopupMenu p = menu.getPopupMenu();
398398
menu.setPopupMenuVisible(!p.isVisible());
399399
return;

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

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -571,6 +571,11 @@ public void setDraggable(JSFunction f) {
571571

572572
protected static JQuery jquery = JSUtil.getJQuery();
573573

574+
/**
575+
* A static flag indicating that we have a menu open
576+
*/
577+
protected static boolean isMenuOpen;
578+
574579
/**
575580
* JavaScript menu timer id
576581
*/
@@ -760,8 +765,9 @@ protected void ignoreAllMouseEvents(DOMNode node) {
760765
}
761766

762767
@SuppressWarnings("unused")
763-
protected static void hideAllMenus() {
764-
JSUtil.jQuery.$(".ui-j2smenu").hide();
768+
protected static void hideMenusAndToolTip() {
769+
if (isMenuOpen)
770+
JSPopupMenuUI.closeAllMenus();
765771
if (/** @j2sNative javax.swing.ToolTipManager ||*/false)
766772
ToolTipManager.j2sHideToolTip();
767773
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -177,7 +177,7 @@ public DOMNode updateDOMNode() {
177177
* referenced by j2sNative, above
178178
*/
179179
/*not private*/ void hideMenu() {
180-
hideAllMenus();
180+
hideMenusAndToolTip();
181181
}
182182

183183

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

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -461,7 +461,7 @@ public void windowGainedFocus(WindowEvent e) {
461461

462462
@Override
463463
public void windowLostFocus(WindowEvent e) {
464-
hideAllMenus();
464+
hideMenusAndToolTip();
465465
// Cancel a resize which may be in progress, when a
466466
// WINDOW_LOST_FOCUS event occurs, which may be
467467
// caused by an Alt-Tab or a modal dialog popup.
@@ -471,7 +471,7 @@ public void windowLostFocus(WindowEvent e) {
471471
// InternalFrameListener
472472
@Override
473473
public void internalFrameClosed(InternalFrameEvent e) {
474-
hideAllMenus();
474+
hideMenusAndToolTip();
475475
iframe.removeInternalFrameListener(getHandler());
476476
}
477477

@@ -494,13 +494,13 @@ public void internalFrameDeactivated(InternalFrameEvent e) {
494494
}
495495

496496
@Override
497-
public void internalFrameClosing(InternalFrameEvent e) { hideAllMenus(); }
497+
public void internalFrameClosing(InternalFrameEvent e) { hideMenusAndToolTip(); }
498498
@Override
499-
public void internalFrameOpened(InternalFrameEvent e) { hideAllMenus();}
499+
public void internalFrameOpened(InternalFrameEvent e) { hideMenusAndToolTip();}
500500
@Override
501-
public void internalFrameIconified(InternalFrameEvent e) { hideAllMenus();}
501+
public void internalFrameIconified(InternalFrameEvent e) { hideMenusAndToolTip();}
502502
@Override
503-
public void internalFrameDeiconified(InternalFrameEvent e) { hideAllMenus();}
503+
public void internalFrameDeiconified(InternalFrameEvent e) { hideMenusAndToolTip();}
504504

505505

506506

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

Lines changed: 1 addition & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import javax.swing.JMenu;
99
import javax.swing.UIManager;
1010

11+
import swingjs.JSUtil;
1112
import swingjs.api.js.DOMNode;
1213

1314
public class JSMenuUI extends JSMenuItemUI {
@@ -51,28 +52,6 @@ public DOMNode updateDOMNode() {
5152
return domNode;
5253
}
5354

54-
// @Override
55-
// public boolean handleJSEvent(Object target, int eventType, Object jQueryEvent) {
56-
// System.out.println("JSMenuUI this is not working, right? ");// RIGHT
57-
// // we use == here because this will be JavaScript
58-
// if (target == domNode && eventType == -1) {
59-
// String type = (/** @j2sNative jQueryEvent.type || */ "");
60-
// if (type.equals("mouseenter")) {
61-
// if (!jm.getParent().getUIClassID().equals("MenuBarUI"))
62-
// stopPopupMenuTimer();
63-
// jm.setSelected(true);
64-
// return HANDLED;
65-
// }
66-
// if (type.equals("mouseleave")) {
67-
// jm.setSelected(false);
68-
// if (jm.getParent().getUIClassID().equals("MenuBarUI"))
69-
// startPopupMenuTimer();
70-
// return HANDLED;
71-
// }
72-
// }
73-
// return super.handleJSEvent(target, eventType, jQueryEvent);
74-
// }
75-
7655
@Override
7756
public void propertyChangedFromListener(PropertyChangeEvent e, String prop) {
7857
// System.out.println("JSMenuUI prop = " + prop + " " + jm.getText());

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

Lines changed: 29 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -183,6 +183,7 @@ public void setVisible(boolean b) {
183183
// TODO: We are not setting vis false when closing
184184
//if (b && menu != null && menu.isVisible())
185185
//b = false;
186+
closeAllMenus();
186187
if (b) {
187188
if (isTainted || menu == null || outerNode == null || DOMNode.firstChild(outerNode) == null) {
188189
if (menu == null) {
@@ -201,8 +202,7 @@ public void setVisible(boolean b) {
201202
int x = /** @j2sNative this.menu.desiredLocationX || */0;
202203
int y = /** @j2sNative this.menu.desiredLocationY || */0;
203204
j2sSwingMenu.showMenu(menu, x, y);
204-
} else {
205-
hideAllMenus();
205+
// } else {
206206
// hideMenu();
207207
}
208208
}
@@ -507,7 +507,7 @@ public void menuKeyPressed(MenuKeyEvent e) {
507507
} else if (item instanceof JMenuItem) {
508508
((JMenuItem) item).doClick();
509509
e.consume();
510-
hideAllMenus();
510+
hideMenusAndToolTip();
511511
}
512512
}
513513

@@ -1134,6 +1134,11 @@ public boolean isJSPopupVisible() {
11341134

11351135
private static int np=0;
11361136

1137+
/**
1138+
* from j2sMenu.js
1139+
*
1140+
* @param data
1141+
*/
11371142
@SuppressWarnings("unused")
11381143
public static void processJ2SMenuCmd(Object[] data) {
11391144
String trigger = (String) data[0];
@@ -1146,16 +1151,18 @@ public static void processJ2SMenuCmd(Object[] data) {
11461151
System.out.println("JSPopupMenuUI processing " + (np++) + " " + trigger + " for " + mid);
11471152
switch (trigger) {
11481153
case "_activate":
1149-
case "_close":
1154+
case "_closeSubmenus":
11501155
case "_hide":
1151-
case "_open":
1156+
case "_move":
1157+
case "_openSubmenu":
11521158
case "_show":
11531159
case "_startOpening":
11541160
case "blur":
1161+
case "clearOut":
11551162
case "collapse":
11561163
case "expand":
1157-
case "focus":
11581164
case "keyActivate":
1165+
case "noclickout":
11591166
case "onblur":
11601167
case "onclick":
11611168
case "onclick_out":
@@ -1166,11 +1173,16 @@ public static void processJ2SMenuCmd(Object[] data) {
11661173
case "onover2":
11671174
case "onover3":
11681175
case "onpress":
1176+
case "onrelease":
11691177
case "refresh":
11701178
case "select":
11711179
break;
1180+
case "focus":
1181+
isMenuOpen = true;
1182+
break;
11721183
case "collapseAll":
1173-
hideAllMenus();
1184+
closeAllMenus();
1185+
isMenuOpen = false;
11741186
j2smenu.options.jPopupMenu.visible = false;
11751187
((JComponent) j2smenu.options.jPopupMenu.getInvoker()).getRootPane().requestFocus();
11761188
break;
@@ -1180,5 +1192,15 @@ public static void processJ2SMenuCmd(Object[] data) {
11801192
public boolean isPopupTrigger(MouseEvent e) {
11811193
return e.isPopupTrigger();
11821194
}
1195+
1196+
public static void closeAllMenus() {
1197+
if (isMenuOpen) {
1198+
// top-level or submenu:
1199+
JSUtil.jQuery.$(".ui-j2smenu").hide();
1200+
JSUtil.jQuery.$(".ui-j2smenu-node").removeClass("ui-state-active").removeClass("ui-state-focus");
1201+
}
1202+
}
1203+
1204+
11831205

11841206
}

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

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -216,7 +216,7 @@ public Insets getInsets() {
216216
@Override
217217
public void setVisible(boolean b) {
218218
if (!isPopup)
219-
hideAllMenus();
219+
hideMenusAndToolTip();
220220
super.setVisible(b);
221221
}
222222

@@ -231,25 +231,25 @@ public void windowOpened(WindowEvent e) {
231231

232232
@Override
233233
public void windowClosing(WindowEvent e) {
234-
hideAllMenus();
234+
hideMenusAndToolTip();
235235
}
236236

237237

238238
@Override
239239
public void windowClosed(WindowEvent e) {
240-
hideAllMenus();
240+
hideMenusAndToolTip();
241241
}
242242

243243

244244
@Override
245245
public void windowIconified(WindowEvent e) {
246-
hideAllMenus();
246+
hideMenusAndToolTip();
247247
}
248248

249249

250250
@Override
251251
public void windowDeiconified(WindowEvent e) {
252-
hideAllMenus();
252+
hideMenusAndToolTip();
253253
}
254254

255255

@@ -262,31 +262,31 @@ public void windowActivated(WindowEvent e) {
262262

263263
@Override
264264
public void windowDeactivated(WindowEvent e) {
265-
hideAllMenus();
265+
hideMenusAndToolTip();
266266
}
267267

268268

269269
@Override
270270
public void componentResized(ComponentEvent e) {
271-
hideAllMenus();
271+
hideMenusAndToolTip();
272272
}
273273

274274

275275
@Override
276276
public void componentMoved(ComponentEvent e) {
277-
hideAllMenus();
277+
hideMenusAndToolTip();
278278
}
279279

280280

281281
@Override
282282
public void componentShown(ComponentEvent e) {
283-
hideAllMenus();
283+
hideMenusAndToolTip();
284284
}
285285

286286

287287
@Override
288288
public void componentHidden(ComponentEvent e) {
289-
hideAllMenus();
289+
hideMenusAndToolTip();
290290
}
291291

292292
}

0 commit comments

Comments
 (0)