aboutsummaryrefslogtreecommitdiffstats
path: root/Framework/MASShortcutMonitor.h
AgeCommit message (Collapse)Author
2015-01-16Decrease headerdoc indenting to appease appledoc (see #55).Tomáš Znamenáček
I think I have finally found out the reason for CocoaDocs ignoring our markup: I have indented the documentation by four spaces, which was interpreted as “code” by appledoc. Trying now without the indent, that should finally help.
2015-01-13Merge branch 'master' into legacy-osx-support.Tomáš Znamenáček
Conflicts: CHANGES
2015-01-13Changed headerdoc markup to work better with CocoaDocs (closes #55).Tomáš Znamenáček
2015-01-12Non-exclusive hotkey registration (#56).Tomáš Znamenáček
2015-01-07Added header documentation.Tomáš Znamenáček
2015-01-07Turned MASShortcutMonitor into a singleton.Tomáš Znamenáček
There can only be one Carbon event handler, so it doesn’t make sense to create multiple instances of the shortcut monitor.
2015-01-07Refactored the shortcut dispatcher and bindings to user defaults.Tomáš Znamenáček
This is a big change that was hard to split into smaller commits. There’s now a new class to bind shortcuts to actions, a new class to bind user defaults’ keys to actions, and a new way to associate user defaults with the recorder control (MASShortcutView). I have also updated the demo app to go with the changes. The new class to associate shortcuts with actions is called MASShortcutMonitor. It wraps the Carbon hotkey magic and offers a simple interface to add a shortcut along with a block that should be run when the shortcut is pressed. It’s the lowest-level interface. Since the usual requirement is to store the shortcuts into user defaults, there’s also a higher-level interface offered by the MASShortcutBinder class. That takes a defaults key and associates it with a block. When the shortcut stored under the defaults key changes, the binder automatically switches to the new shortcut. The class is a wrapper built atop of the previous one, the MASShortcutMonitor – it simply adds, updates and removes shortcuts as the user defaults change. I have removed the special user defaults integration code from the recorder control (MASShortcutView) and replaced it with a small Cocoa Bindings shim. This means that in order to keep the recorder control in sync with the defaults you just have to call the usual bind:toObject:withKeyPath:options: method, like this: [_shortcutView bind:MASShortcutBinding toObject:[NSUserDefaultsController sharedUserDefaultsController] withKeyPath[@"values.ExampleDefaultsKey" options:@{NSValueTransformerNameBindingOption:NSKeyedUnarchiveFromDataTransformerName}]; That’s more verbose than the previous solution, but it’s much cleaner and can be swept under a convenience call if needed. I might also add a dictionaryValue property later that would make it possible to bind the value to user defaults directly, without a transformer, and would enable backward compatibility with Shortcut Recorder.