Skip to content

Commit 1437a63

Browse files
hansonrhansonr
authored andcommitted
fixes missing JPopupMenu.isPopupTrigger(), event.isPopupTrigger()
1 parent db0a9ea commit 1437a63

File tree

7 files changed

+115
-508
lines changed

7 files changed

+115
-508
lines changed
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
20190121000416
1+
20190121071846
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
20190121000416
1+
20190121071846

sources/net.sf.j2s.java.core/src/swingjs/JSMouse.java

Lines changed: 27 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -337,22 +337,13 @@ private int updateClickCount(int id, long time, int x, int y) {
337337
private void mouseAction(int id, long time, int x, int y, int xcount,
338338
int modifiers, int dy) {
339339

340-
// Oddly, Windows returns InputEvent.META_DOWN_MASK on release, though
341-
// BUTTON3_DOWN_MASK for pressed. So here we just accept both when not a
342-
// mac.
343-
// A bit of a kludge.
344-
345-
int extended = modifiers & EXTENDED_MASK;
346-
boolean popupTrigger = (
347-
extended == InputEvent.BUTTON3_DOWN_MASK ||
348-
extended == InputEvent.META_DOWN_MASK ||
349-
JSToolkit.isMac && extended == (InputEvent.CTRL_DOWN_MASK | InputEvent.BUTTON1_DOWN_MASK));
350340
int button = getButton(modifiers);
351341
int count = (xcount > 1 && id == MouseEvent.MOUSE_CLICKED ? xcount : updateClickCount(id, time, x, y));
342+
boolean popupTrigger = isPopupTrigger(id, modifiers, JSToolkit.isWin);
352343

353344
Component source = viewer.getTopComponent(); // may be a JFrame
354345
MouseEvent e;
355-
if (id == MouseEvent.MOUSE_WHEEL) {
346+
if (id == MouseEvent.MOUSE_WHEEL) {
356347
e = new MouseWheelEvent(source, id, time, modifiers, x, y, x, y, count,
357348
popupTrigger, MouseWheelEvent.WHEEL_UNIT_SCROLL, 1, dy);
358349
} else {
@@ -387,9 +378,34 @@ private void mouseAction(int id, long time, int x, int y, int xcount,
387378
((Container) e.getSource()).dispatchEvent(e);
388379
}
389380
}
381+
382+
private static boolean isPopupTrigger(int id, int mods, boolean isWin) {
383+
boolean rt = ((mods & InputEvent.BUTTON3_MASK) != 0);
384+
if (isWin) {
385+
if (id != MouseEvent.MOUSE_RELEASED)
386+
return false;
387+
//
388+
// // Oddly, Windows returns InputEvent.META_DOWN_MASK on release, though
389+
// // BUTTON3_DOWN_MASK for pressed. So here we just accept both.
390+
//
391+
// actually, we can use XXX_MASK, not XXX_DOWN_MASK and avoid this issue, because
392+
// J2S adds the appropriate extended (0xFFFFC000) and simple (0x3F) modifiers.
393+
// final boolean isMetaDown = ((jmodifiers & InputEvent.META_DOWN_MASK) != 0);
394+
//
395+
return rt;// || isMetaDown;
396+
} else {
397+
// mac, linux, unix
398+
if (id != MouseEvent.MOUSE_PRESSED)
399+
return false;
400+
boolean lt = ((mods & InputEvent.BUTTON1_MASK) != 0);
401+
boolean ctrl = ((mods & InputEvent.CTRL_MASK) != 0);
402+
return rt || (ctrl && lt);
403+
}
404+
}
390405

391406
private boolean keyAction(int id, int modifiers, Object jqevent2, long time) {
392407
return JSKeyEvent.dispatchKeyEvent(id, modifiers, jqevent, time);
393408
}
394409

410+
395411
}

sources/net.sf.j2s.java.core/src/swingjs/JSToolkit.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -73,13 +73,16 @@ public class JSToolkit extends SunToolkit implements KeyboardFocusManagerPeerPro
7373
/**
7474
* for JSMouse only
7575
*/
76-
public static boolean isMac;
76+
public static boolean isMac, isLinux, isUnix, isWin;
7777

7878
static {
7979
/**
8080
* @j2sNative
8181
*
82-
* swingjs.JSToolkit.isMac = (J2S.featureDetection.os == "mac");
82+
* C$.isMac = (J2S.featureDetection.os == "mac");
83+
* C$.isLinux = (J2S.featureDetection.os == "linux");
84+
* C$.isUnix = (J2S.featureDetection.os == "unix");
85+
* C$.isWin = (J2S.featureDetection.os == "win");
8386
*
8487
*/
8588
{
@@ -93,7 +96,7 @@ public class JSToolkit extends SunToolkit implements KeyboardFocusManagerPeerPro
9396
*/
9497

9598
public JSToolkit() {
96-
super();
99+
super();
97100
System.out.println("JSToolkit initialized");
98101
}
99102

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

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,8 @@
3434
import java.awt.event.ContainerListener;
3535
import java.awt.event.KeyEvent;
3636
import java.awt.event.KeyListener;
37+
import java.awt.event.MouseEvent;
38+
import java.awt.peer.PopupMenuPeer;
3739
import java.beans.PropertyChangeEvent;
3840

3941
import javax.swing.InputMap;
@@ -176,11 +178,6 @@ protected void uninstallListeners() {
176178
}
177179
}
178180

179-
public Object getPopup() {
180-
// TODO: this causes an uncaught error.
181-
return null;
182-
}
183-
184181
@Override
185182
public void setVisible(boolean b) {
186183
// TODO: We are not setting vis false when closing
@@ -1178,5 +1175,8 @@ public static void processJ2SMenuCmd(Object[] data) {
11781175
}
11791176
}
11801177

1178+
public boolean isPopupTrigger(MouseEvent e) {
1179+
return e.isPopupTrigger();
1180+
}
11811181

11821182
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ public void processKeyEvent(KeyEvent e, MenuElement[] path, MenuSelectionManager
7171

7272

7373

74-
int nAction = 0;
74+
int nAction = 0;
7575

7676
ActionListener listener = new ActionListener() {
7777

0 commit comments

Comments
 (0)