[PATCH] 7160951: ActionListener called twice for JMenuItem using ScreenMenuBar
Marco Dinacci
marco.dinacci at gmail.com
Tue Sep 4 06:42:53 PDT 2012
Hello,
The following patch, based on changeset 0b236cc20500 (jdk7u8-b05 tag),
fixes http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7160951
The patch checks whether the NSEvent received in the NSMenuItem
callback coincides with the NSMenuItem accelerator. If it does, it
doesn't call the Java callback.
# HG changeset patch
# User Marco Dinacci <marco.dinacci at gmail.com>
# Date 1346764262 -3600
# Node ID c451e0ad537c9856ccc7be5488360070ba657142
# Parent 57d81e01a61fb8be46ef792dce63b0aa2a88992d
Fix bug #7160951
diff --git a/src/macosx/native/sun/awt/CMenuItem.m
b/src/macosx/native/sun/awt/CMenuItem.m
--- a/src/macosx/native/sun/awt/CMenuItem.m
+++ b/src/macosx/native/sun/awt/CMenuItem.m
@@ -82,22 +82,36 @@ JNF_COCOA_ENTER(env);
} else {
static JNF_CLASS_CACHE(jc_CMenuItem, "sun/lwawt/macosx/CMenuItem");
static JNF_MEMBER_CACHE(jm_handleAction, jc_CMenuItem,
"handleAction", "(JI)V"); // AWT_THREADING Safe (event)
NSEvent *currEvent = [[NSApplication sharedApplication] currentEvent];
NSUInteger modifiers = [currEvent modifierFlags];
jint javaModifiers = 0;
- if ((modifiers & NSCommandKeyMask) != 0) javaModifiers |=
java_awt_Event_META_MASK;
- if ((modifiers & NSShiftKeyMask) != 0) javaModifiers |=
java_awt_Event_SHIFT_MASK;
- if ((modifiers & NSControlKeyMask) != 0) javaModifiers |=
java_awt_Event_CTRL_MASK;
- if ((modifiers & NSAlternateKeyMask) != 0) javaModifiers |=
java_awt_Event_ALT_MASK;
+ NSEventType type = [currEvent type];
+ if (type == NSKeyDown) {
+ NSString *menuKey = [sender keyEquivalent];
+ NSString *eventKey = [currEvent characters];
+
+ if (![menuKey isEqualToString:eventKey]) {
+ // Only send the event if the NSEvent characters do not
+ // coincides with the NSMenuItem keyEquivalent.
- JNFCallVoidMethod(env, fPeer, jm_handleAction,
UTC(currEvent), javaModifiers); // AWT_THREADING Safe (event)
+ if ((modifiers & NSCommandKeyMask) != 0)
javaModifiers |= java_awt_Event_META_MASK;
+ if ((modifiers & NSShiftKeyMask) != 0)
javaModifiers |= java_awt_Event_SHIFT_MASK;
+ if ((modifiers & NSControlKeyMask) != 0)
javaModifiers |= java_awt_Event_CTRL_MASK;
+ if ((modifiers & NSAlternateKeyMask) != 0)
javaModifiers |= java_awt_Event_ALT_MASK;
+
+ JNFCallVoidMethod(env, fPeer, jm_handleAction,
UTC(currEvent), javaModifiers); // AWT_THREADING Safe (event)
+ }
+ } else {
+ JNFCallVoidMethod(env, fPeer, jm_handleAction,
UTC(currEvent), javaModifiers); // AWT_THREADING Safe (event)
+ }
+
}
JNF_COCOA_EXIT(env);
}
- (void) setJavaLabel:(NSString *)theLabel shortcut:(NSString
*)theKeyEquivalent modifierMask:(jint)modifiers {
AWT_ASSERT_NOT_APPKIT_THREAD;
NSUInteger modifierMask = 0;
exporting patch:
<fdopen>
Best,
Marco
More information about the macosx-port-dev
mailing list