• Open Menu Close Menu
  • Apple
  • Shopping Bag
  • Apple
  • Mac
  • iPad
  • iPhone
  • Watch
  • TV
  • Music
  • Support
  • Search apple.com
  • Shopping Bag

Lists

Open Menu Close Menu
  • Terms and Conditions
  • Lists hosted on this site
  • Email the Postmaster
  • Tips for posting to public mailing lists
Re: Best practice for hidden keyboard shortcuts
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Best practice for hidden keyboard shortcuts


  • Subject: Re: Best practice for hidden keyboard shortcuts
  • From: Philip Dow <email@hidden>
  • Date: Fri, 2 Nov 2007 19:58:22 -0700

If you all don't mind I'm going to post what I've done. I've seen this show up so many times, and this solution, if it isn't unknowingly screwing things up, feels clean.

In your custom subclass of NSApplication (everybody's doing it!) override sendEvent: Can you feel the power!?

- (void)sendEvent:(NSEvent *)anEvent
{
// is this a keyboard equivalent event ?
// if so does the key window respond to custom keyboard equivalents?
if ( [anEvent type] == NSKeyDown && ( [anEvent modifierFlags] & NSCommandKeyMask ) && [[[self keyWindow] windowController] respondsToSelector:@selector(performCustomKeyEquivalent:)] )
{
// if the key window doesn't have anything to do, pass the message onto super
if ( ![[[self keyWindow] windowController] performSelector:@selector(performCustomKeyEquivalent:) withObject:anEvent] )
[super sendEvent:anEvent];
}
else
{
// let super handle anything else
[super sendEvent:anEvent];
}
}


sendEvent is asking the frontmost window if its window controller responds to custom key events. There I am implementing performCustomKeyEquivalent:(NSEvent*)anEvent, where I check the charactersIgnoringModifiers and modifierFlags to decide how to act.

In truth a view controller responsible for managing the window's actual content does that. The window controller is just passing the message on, but I suppose you could do whatever you want.

Application wide hidden keyboard shortcuts. I guess keyboard equivalents aren't that hard.

-Phil

On Nov 2, 2007, at 11:21 AM, David Spooner wrote:


You may be able to implement the methods in a higher-level responder; this leaves you with the problem of how to distribute the messages to the appropriate views, but you will also have to do that if you take the -sendEvent: route...


dave

On 2-Nov-07, at 11:38 AM, Philip Dow wrote:

Ah, I failed to mention that the views upon which the key equivalents act are not necessarily in focus, so they won't receive the keyDown events.

-Phil

On Nov 2, 2007, at 9:49 AM, David Spooner wrote:

Phil,

I had written a class of view which implements arbitrary key equivalents (with some exceptions, like cmd-tab) by overriding both -performKeyEquivalent: and -keyDown: -- I don't recall the specifics, but I know that both methods are called in different circumstances...

dave




Journler Developer
email@hidden




_______________________________________________

Cocoa-dev mailing list (email@hidden)

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:
This email sent to email@hidden


  • Follow-Ups:
    • Re: Best practice for hidden keyboard shortcuts
      • From: Sandy Martel <email@hidden>
References: 
 >Best practice for hidden keyboard shortcuts (From: Philip Dow <email@hidden>)
 >Re: Best practice for hidden keyboard shortcuts (From: David Spooner <email@hidden>)
 >Re: Best practice for hidden keyboard shortcuts (From: Philip Dow <email@hidden>)
 >Re: Best practice for hidden keyboard shortcuts (From: David Spooner <email@hidden>)

  • Prev by Date: Re: Choppy Core Animation
  • Next by Date: Re: Adding an icon to the dock
  • Previous by thread: Re: Best practice for hidden keyboard shortcuts
  • Next by thread: Re: Best practice for hidden keyboard shortcuts
  • Index(es):
    • Date
    • Thread