@@ -212,14 +212,68 @@ - (void) windowDidBecomeMain:(NSNotification *) notification {
212212 int count = [mainMenu numberOfItems ];
213213 for ( int i = 0 ; i < count; i++ ) {
214214 NSMenuItem * menuItem = [mainMenu itemAtIndex: i];
215- NSMenu *subenu = [menuItem submenu ];
216- if ( [subenu isJavaMenu ] )
215+ NSMenu *submenu = [menuItem submenu ];
216+ if ( [submenu isJavaMenu ] )
217217 [menuItem setEnabled: NO ];
218218 }
219219
220+
221+ // "Select All (Cmd+A)" in file dialog requires that a menu item
222+ // with "selectAll:" selector exists in main menu bar.
223+
224+ // change action of (disabled) Swing "Select All" menu item (if exists) to "selectAll:"
225+ NSMenuItem * swingSelectAllItem = [self findSelectAllMenuItem: mainMenu];
226+ if ( swingSelectAllItem != nil )
227+ swingSelectAllItem.action = @selector (selectAll: );
228+
229+ // add invisible "Select All" menu item to application menu
230+ NSMenuItem *selectAllItem = [[NSMenuItem alloc ] initWithTitle: @" "
231+ action: @selector (selectAll: ) keyEquivalent: @" a" ];
232+ selectAllItem.keyEquivalentModifierMask = NSEventModifierFlagCommand;
233+ selectAllItem.target = nil ; // use responder chain
234+ selectAllItem.view = [[NSView alloc ] initWithFrame: NSMakeRect ( 0 , 0 , 1 , 1 )];
235+ NSMenu * appMenu = [[mainMenu itemAtIndex: 0 ] submenu ];
236+ [appMenu addItem: selectAllItem];
237+
238+ JNI_COCOA_CATCH ()
239+ }
240+
241+ - (void ) windowDidResignMain:(NSNotification *) notification {
242+ JNI_COCOA_TRY ()
243+
244+ NSMenu * mainMenu = [NSApp mainMenu ];
245+
246+ // remove invisible "Select All" menu item from application menu
247+ NSMenu * appMenu = [[mainMenu itemAtIndex: 0 ] submenu ];
248+ int lastIndex = appMenu.numberOfItems - 1 ;
249+ NSMenuItem * mi = [appMenu itemAtIndex: lastIndex];
250+ if ( mi.keyEquivalentModifierMask == NSEventModifierFlagCommand && [@" a" isEqual: mi.keyEquivalent] )
251+ [appMenu removeItemAtIndex: lastIndex];
252+
253+ // restore Swing "Select All" action
254+ NSMenuItem * swingSelectAllItem = [self findSelectAllMenuItem: mainMenu];
255+ if ( swingSelectAllItem != nil )
256+ swingSelectAllItem.action = @selector (handleAction: );
257+
220258 JNI_COCOA_CATCH ()
221259 }
222260
261+ - (NSMenuItem *) findSelectAllMenuItem:(NSMenu *) menu {
262+ int count = [menu numberOfItems ];
263+ for ( int i = 0 ; i < count; i++ ) {
264+ NSMenuItem * mi = [menu itemAtIndex: i];
265+ if ( mi.keyEquivalentModifierMask == NSEventModifierFlagCommand && [@" a" isEqual: mi.keyEquivalent] )
266+ return mi;
267+
268+ if ( mi.hasSubmenu ) {
269+ NSMenuItem * mi2 = [self findSelectAllMenuItem: mi.submenu];
270+ if ( mi2 != nil )
271+ return mi2;
272+ }
273+ }
274+ return nil ;
275+ }
276+
223277@end
224278
225279// ---- helper -----------------------------------------------------------------
0 commit comments