On Aug 23, 2013, at 8:17 AM, Leonid Romanov wrote: > Pressing "Command +" results in two -performKeyEquivalent calls. Here is a > stack trace snippet for the first call: > > 1 AppKit 0x00007fff903da2f9 -[NSView > _performKeyEquivalent:conditionally:] + 41 > 2 AppKit 0x00007fff903da442 -[NSView > performKeyEquivalent:] + 166 > 3 AppKit 0x00007fff903da2f9 -[NSView > _performKeyEquivalent:conditionally:] + 41 > 4 AppKit 0x00007fff903da259 -[NSWindow > performKeyEquivalent:] + 64 > 5 AppKit 0x00007fff903da044 > -[NSApplication _handleKeyEquivalent:] + 462 > 6 AppKit 0x00007fff90297173 > -[NSApplication sendEvent:] + 4480 > > > And for the second call: > > 1 AppKit 0x00007fff903da2f9 -[NSView > _performKeyEquivalent:conditionally:] + 41 > 2 AppKit 0x00007fff903da442 -[NSView > performKeyEquivalent:] + 166 > 3 AppKit 0x00007fff903da2f9 -[NSView > _performKeyEquivalent:conditionally:] + 41 > 4 AppKit 0x00007fff903da259 -[NSWindow > performKeyEquivalent:] + 64 > 5 AppKit 0x00007fff903da044 > -[NSApplication _handleKeyEquivalent:] + 462 > 6 AppKit 0x00007fff900e3927 > -[NSApplication _handleSpecialAlternateKeyEquivalent:] + 656 > 7 AppKit 0x00007fff9029718e > -[NSApplication sendEvent:] + 4507 > > As you can see, the second -performKeyEquivalent call is initiated by > -[NSApplication _handleSpecialAlternateKeyEquivalent:]. So, could anyone tell > me what is so special about "Command +" key stroke that it warrants not one, > but two -performKeyEquivalent calls, and how do I filter out the second call?
Did your implementation of -performKeyEquivalent: return YES? If not, then you have no reason to assume it won't be called again. In fact, some paths to a second call are known (although I'm not familiar with this particular one). For example, see WWDC 2010 video Session 145 - Key Event Handling in Cocoa Applications, around the 9:40 mark. If you can't redesign your code so that it tolerates a second call (or prevents it by returning YES), then you might look for ways to track when a new, not-seen-before event begins dispatch. You could observe NSApplicationDidUpdateNotification or NSWindowDidUpdateNotification. You could subclass NSApplication and override -sendEvent: just to reset a flag. Etc. Regards, Ken _______________________________________________ Cocoa-dev mailing list (Cocoa-dev@lists.apple.com) Please do not post admin requests or moderator comments to the list. Contact the moderators at cocoa-dev-admins(at)lists.apple.com Help/Unsubscribe/Update your Subscription: https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com This email sent to arch...@mail-archive.com