Compare commits
47 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 10001acbf6 | |||
| 3383d87ecb | |||
| ab2f247992 | |||
| afca3a410b | |||
| 46b6e62a6a | |||
| 4dcea4bb08 | |||
| d3dc31a7fb | |||
| f987cb0680 | |||
| b846358d73 | |||
| a117bf5dee | |||
| 2239ac2ec7 | |||
| d86757c434 | |||
| d02bfb1732 | |||
| 8c0ff79452 | |||
| 8bc3635a92 | |||
| ce3b7d9179 | |||
| f144290909 | |||
| e0b9bc7004 | |||
| 844970408a | |||
| cf7b2d8a4f | |||
| 4843c0708f | |||
| 0ba254c9db | |||
| 76ff9e14d8 | |||
| 85d096792f | |||
| 94763f73be | |||
| df65d89351 | |||
| c6376de97a | |||
| 42f02fddc1 | |||
| 639bee0e71 | |||
| 53186d9c74 | |||
| 887f3ddb8c | |||
| f19f2ba028 | |||
| 32a1aa3e5e | |||
| 9b6219ea1f | |||
| 20416b0641 | |||
| def4890af2 | |||
| 881157bfd6 | |||
| ff3bbb3c49 | |||
| a4a541444c | |||
| b0dd8deed9 | |||
| 7b265ca3ae | |||
| 5ef03d07de | |||
| 04a892f9ec | |||
| 64c657331c | |||
| b54c1edbf4 | |||
| e73de450ad | |||
| 4e98f342e4 |
+4
-1
@@ -13,5 +13,8 @@ build/*
|
||||
xcuserdata
|
||||
profile
|
||||
*.moved-aside
|
||||
.bundle
|
||||
Fastlane/README.md
|
||||
Fastlane/report.xml
|
||||
# Finder
|
||||
.DS_Store
|
||||
.DS_Store
|
||||
|
||||
+3
-2
@@ -1,3 +1,4 @@
|
||||
language: objective-c
|
||||
xcode_project: MASShortcut.xcodeproj
|
||||
xcode_scheme: MASShortcut
|
||||
script:
|
||||
- xcodebuild -scheme MASShortcut build test
|
||||
- bundle exec pod lib lint
|
||||
|
||||
@@ -0,0 +1,68 @@
|
||||
Details about this file’s format at <http://keepachangelog.com/>. The change log is parsed automatically when minting releases through Fastlane, see `Fastlane/Fastfile`.
|
||||
|
||||
## [Unreleased]
|
||||
|
||||
## [2.4.0] - 2019-06-11
|
||||
|
||||
- Use properly typedef’d enumerations to improve Swift syntax [Tony Arnold]
|
||||
- Fix return from a NSToolTip method that expects a non-null return value [Tony Arnold]
|
||||
- Brazilian Portuguese localization [vitu]
|
||||
- `kVK_ANSI_KeypadMinus` fixes [Vyacheslav Dubovitsky]
|
||||
- Swedish localization [Pavel Kozárek]
|
||||
- Provide intrinsicContenSize to improve compatibility with autolayout [Fletcher T. Penney]
|
||||
- Allow app extension API only for the framework target [zoul]
|
||||
- Make it possible to turn off shortcut validation [zoul]
|
||||
- Use more specific types for -keyCode and -modifierFlags [zoul]
|
||||
- Use NSEvent constants instead of hard-coded numbers [zoul]
|
||||
|
||||
## [2.3.6] - 2016-10-30
|
||||
- Improve compatibility with the 10.12 SDK [thanks to Clemens Schulz]
|
||||
|
||||
## [2.3.5] - 2016-9-7
|
||||
- Improve Italian localization [zoul]
|
||||
|
||||
## [2.3.4] - 2016-8-12
|
||||
- Simplified and traditional Chinese localization [MichaelRow]
|
||||
- Add Korean, Dutch, Polish, Russian & update Spanish localizations [Radek Pietruszewski]
|
||||
- Improved German localization [Florian Schliep]
|
||||
- Add a Makefile to improve command-line building [sfsam]
|
||||
|
||||
## [2.3.3] - 2016-1-9
|
||||
- Improved Japanese localization [oreshinya]
|
||||
- Improved Frech localization [magiclantern]
|
||||
- Fixed CocoaPods localization with `use_frameworks!` [nivanchikov]
|
||||
|
||||
## [2.3.2] - 2015-10-12
|
||||
- Fixed localization when building through CocoaPods [Allan Beaufour]
|
||||
|
||||
## [2.3.1] - 2015-9-10
|
||||
- Trying to work around a strange build error in CocoaPods.
|
||||
|
||||
## [2.3.0] - 2015-9-10
|
||||
- Basic localization support for Czech, German, Spanish, Italian, French, and Japanese. Native speaking testers welcome!
|
||||
|
||||
## [2.2.0] - 2015-8-18
|
||||
- Basic accessibility support [starkos]
|
||||
- Added an option to hide the shortcut delete button [oreshinya]
|
||||
- Advertised support for Carthage [Tom Brown]
|
||||
- Bugfix for shortcuts not working after set twice [Roman Sokolov]
|
||||
- Ignore a solo Tab key when recording shortcuts [Roman Sokolov]
|
||||
|
||||
## [2.1.2] - 2015-1-28
|
||||
- Better key equivalent handling for non-ASCII layouts. [Dmitry Obukhov]
|
||||
|
||||
## [2.1.1] - 2015-1-16
|
||||
- Another headerdoc fix for CocoaDocs, hopefully the last one.
|
||||
|
||||
## [2.1.0] - 2015-1-16
|
||||
- Added support for older OS X versions down to 10.6 included.
|
||||
- Headerdoc markup that plays better with CocoaDocs.
|
||||
|
||||
## [2.0.1] - 2015-1-9
|
||||
- Trivial Podspec fix.
|
||||
|
||||
## [2.0.0] - 2015-1-9
|
||||
- First version with a changes file :)
|
||||
- Major, backwards incompatible refactoring to simplify long-term maintenance.
|
||||
- Added a simple spec describing the recording behaviour.
|
||||
- Adds compatibility mode with Shortcut Recorder.
|
||||
@@ -1,53 +0,0 @@
|
||||
2.3.6 2016/10/30
|
||||
- Improve compatibility with the 10.12 SDK [thanks to Clemens Schulz]
|
||||
|
||||
2.3.5 2016/9/7
|
||||
- Improve Italian localization [zoul]
|
||||
|
||||
2.3.4 2016/8/12
|
||||
- Simplified and traditional Chinese localization [MichaelRow]
|
||||
- Add Korean, Dutch, Polish, Russian & update Spanish localizations [Radek Pietruszewski]
|
||||
- Improved German localization [Florian Schliep]
|
||||
– Add a Makefile to improve command-line building [sfsam]
|
||||
|
||||
2.3.3 2016/1/9
|
||||
- Improved Japanese localization [oreshinya]
|
||||
- Improved Frech localization [magiclantern]
|
||||
- Fixed CocoaPods localization with use_frameworks! [nivanchikov]
|
||||
|
||||
2.3.2 2015/10/12
|
||||
- Fixed localization when building through CocoaPods [Allan Beaufour]
|
||||
|
||||
2.3.1 2015/9/10
|
||||
- Trying to work around a strange build error in CocoaPods.
|
||||
|
||||
2.3.0 2015/9/10
|
||||
- Basic localization support for Czech, German, Spanish,
|
||||
Italian, French, and Japanese. Native speaking testers welcome!
|
||||
|
||||
2.2.0 2015/8/18
|
||||
- Basic accessibility support [starkos]
|
||||
- Added an option to hide the shortcut delete button [oreshinya]
|
||||
- Advertised support for Carthage [Tom Brown]
|
||||
- Bugfix for shortcuts not working after set twice [Roman Sokolov]
|
||||
- Ignore a solo Tab key when recording shortcuts [Roman Sokolov]
|
||||
|
||||
2.1.2 2015/1/28
|
||||
- Better key equivalent handling for non-ASCII layouts.
|
||||
[Dmitry Obukhov]
|
||||
|
||||
2.1.1 2015/1/16
|
||||
- Another headerdoc fix for CocoaDocs, hopefully the last one.
|
||||
|
||||
2.1.0 2015/1/16
|
||||
- Added support for older OS X versions down to 10.6 included.
|
||||
- Headerdoc markup that plays better with CocoaDocs.
|
||||
|
||||
2.0.1 2015/1/9
|
||||
- Trivial Podspec fix.
|
||||
|
||||
2.0.0 2015/1/9
|
||||
- First version with a changes file :)
|
||||
- Major, backwards incompatible refactoring to simplify long-term maintenance.
|
||||
- Added a simple spec describing the recording behaviour.
|
||||
- Adds compatibility mode with Shortcut Recorder.
|
||||
@@ -1,29 +0,0 @@
|
||||
# Backward Compatibility
|
||||
|
||||
Please note that this framework supports older OS X versions down to 10.6. When changing the code, be careful not to call any API functions not available in 10.6 or call them conditionally, only where supported.
|
||||
|
||||
# Commit Messages
|
||||
|
||||
Please use descriptive commit message. As an example, _Bug fix_ commit message doesn’t say much, while _Fix a memory-management bug in formatting code_ works much better. A [nice detailed article about writing commit messages](http://chris.beams.io/posts/git-commit/) is also available.
|
||||
|
||||
# How to Release a New Version
|
||||
|
||||
First, update the version numbers. (MASShortcut uses [Semantic Versioning](http://semver.org/), so please read the docs if you’re not sure what the deal is.) The version number is stored in `Framework/Info.plist` and `MASShortcut.podspec` (twice in both files).
|
||||
|
||||
Then update the `CHANGES` file. Add information about the new version (see the previous versions for an example) and add the release date.
|
||||
|
||||
Now commit the changes:
|
||||
|
||||
$ git commit -a -m "Version bump to x.y.z."
|
||||
|
||||
And tag the last commit:
|
||||
|
||||
$ git tag -a x.y.z
|
||||
|
||||
Now push both the commits and tags (`--tags`) to GitHub and push the new podspec to CocoaPods:
|
||||
|
||||
$ pod trunk push MASShortcut.podspec
|
||||
|
||||
This will run sanity checks on the podspec and fail if the spec does not validate.
|
||||
|
||||
That’s it. Go have a beer or a cup of tea to celebrate.
|
||||
+88
-2
@@ -9,6 +9,7 @@ static void *MASObservingContext = &MASObservingContext;
|
||||
@interface AppDelegate ()
|
||||
@property(strong) IBOutlet MASShortcutView *customShortcutView;
|
||||
@property(strong) IBOutlet NSTextField *feedbackTextField;
|
||||
@property(strong) IBOutlet NSVisualEffectView *visualEffectView;
|
||||
@end
|
||||
|
||||
@implementation AppDelegate
|
||||
@@ -19,10 +20,15 @@ static void *MASObservingContext = &MASObservingContext;
|
||||
|
||||
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
|
||||
|
||||
// Most apps need default shortcut, delete these lines if this is not your case
|
||||
MASShortcut *firstLaunchShortcut = [MASShortcut shortcutWithKeyCode:kVK_F1 modifierFlags:NSEventModifierFlagCommand];
|
||||
NSData *firstLaunchShortcutData = [NSKeyedArchiver archivedDataWithRootObject:firstLaunchShortcut];
|
||||
|
||||
// Register default values to be used for the first app start
|
||||
[defaults registerDefaults:@{
|
||||
MASHardcodedShortcutEnabledKey : @YES,
|
||||
MASCustomShortcutEnabledKey : @YES,
|
||||
MASCustomShortcutKey : firstLaunchShortcutData
|
||||
}];
|
||||
|
||||
// Bind the shortcut recorder view’s value to user defaults.
|
||||
@@ -46,9 +52,9 @@ static void *MASObservingContext = &MASObservingContext;
|
||||
- (void)playShortcutFeedback
|
||||
{
|
||||
[[NSSound soundNamed:@"Ping"] play];
|
||||
[_feedbackTextField setStringValue:NSLocalizedString(@"Shortcut pressed!", @"Feedback that’s displayed when user presses the sample shortcut.")];
|
||||
[self.feedbackTextField setStringValue:NSLocalizedString(@"Shortcut pressed!", @"Feedback that’s displayed when user presses the sample shortcut.")];
|
||||
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
|
||||
[_feedbackTextField setStringValue:@""];
|
||||
[self.feedbackTextField setStringValue:@""];
|
||||
});
|
||||
}
|
||||
|
||||
@@ -93,6 +99,86 @@ static void *MASObservingContext = &MASObservingContext;
|
||||
}
|
||||
}
|
||||
|
||||
#pragma mark Actions
|
||||
|
||||
// These actions let you configure the NSVisualEffect view and test the MASShortcutView in a variety of scenarios.
|
||||
|
||||
- (void) displayMojaveAlertWithMessage: (NSString *) message
|
||||
{
|
||||
NSAlert *alert = [NSAlert new];
|
||||
alert.messageText = @"Not Available";
|
||||
alert.informativeText = [NSString stringWithFormat:@"The %@ is only available on Mojave (10.14) and later", message];
|
||||
[alert addButtonWithTitle:@"OK"];
|
||||
[alert runModal];
|
||||
}
|
||||
|
||||
- (IBAction) setAppearance: (id) sender
|
||||
{
|
||||
if ([sender isKindOfClass:[NSPopUpButton class]]) {
|
||||
NSPopUpButton *popUpButton = (NSPopUpButton *)sender;
|
||||
|
||||
NSInteger tag = popUpButton.selectedTag;
|
||||
switch (tag) {
|
||||
case 0: // Inherited
|
||||
self.visualEffectView.appearance = nil;
|
||||
break;
|
||||
case 1: // Vibrant Light
|
||||
self.visualEffectView.appearance = [NSAppearance appearanceNamed:NSAppearanceNameVibrantLight];
|
||||
break;
|
||||
case 2: // Vibrant Dark
|
||||
self.visualEffectView.appearance = [NSAppearance appearanceNamed:NSAppearanceNameVibrantDark];
|
||||
break;
|
||||
case 3: // Aqua
|
||||
self.visualEffectView.appearance = [NSAppearance appearanceNamed:NSAppearanceNameAqua];
|
||||
break;
|
||||
case 4: // Dark Aqua
|
||||
if (@available(macOS 10.14, *)) {
|
||||
self.visualEffectView.appearance = [NSAppearance appearanceNamed:NSAppearanceNameDarkAqua];
|
||||
} else {
|
||||
[self displayMojaveAlertWithMessage:@"Dark Aqua Appearance"];
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
- (IBAction) setMaterial: (id) sender
|
||||
{
|
||||
if ([sender isKindOfClass:[NSPopUpButton class]]) {
|
||||
NSPopUpButton *popUpButton = (NSPopUpButton *)sender;
|
||||
|
||||
NSInteger tag = popUpButton.selectedTag;
|
||||
switch (tag) {
|
||||
case 0: // Popover
|
||||
self.visualEffectView.material = NSVisualEffectMaterialPopover;
|
||||
break;
|
||||
case 1: // Sidebar
|
||||
self.visualEffectView.material = NSVisualEffectMaterialSidebar;
|
||||
break;
|
||||
case 2: // HUD Window
|
||||
if (@available(macOS 10.14, *)) {
|
||||
self.visualEffectView.material = NSVisualEffectMaterialHUDWindow;
|
||||
} else {
|
||||
[self displayMojaveAlertWithMessage:@"HUD Window Material"];
|
||||
}
|
||||
break;
|
||||
case 3: // Window Background
|
||||
if (@available(macOS 10.14, *)) {
|
||||
self.visualEffectView.material = NSVisualEffectMaterialWindowBackground;
|
||||
} else {
|
||||
[self displayMojaveAlertWithMessage:@"Window Background Material"];
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#pragma mark NSApplicationDelegate
|
||||
|
||||
- (BOOL) applicationShouldTerminateAfterLastWindowClosed: (NSApplication*) sender
|
||||
|
||||
+2
-2
@@ -15,9 +15,9 @@
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>APPL</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>1.0</string>
|
||||
<string>2.4.0</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>1</string>
|
||||
<string>2.4.0</string>
|
||||
<key>LSMinimumSystemVersion</key>
|
||||
<string>${MACOSX_DEPLOYMENT_TARGET}</string>
|
||||
<key>NSHumanReadableCopyright</key>
|
||||
|
||||
+110
-16
@@ -1,8 +1,9 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="8173.3" systemVersion="14E46" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none">
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="14460.31" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none">
|
||||
<dependencies>
|
||||
<deployment identifier="macosx"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="8173.3"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="14460.31"/>
|
||||
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
||||
</dependencies>
|
||||
<objects>
|
||||
<customObject id="-2" userLabel="File's Owner" customClass="NSApplication">
|
||||
@@ -155,8 +156,7 @@
|
||||
<action selector="paste:" target="-1" id="226"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Paste and Match Style" keyEquivalent="V" id="485">
|
||||
<modifierMask key="keyEquivalentModifierMask" option="YES" command="YES"/>
|
||||
<menuItem title="Paste and Match Style" keyEquivalent="v" id="485">
|
||||
<connections>
|
||||
<action selector="pasteAsPlainText:" target="-1" id="486"/>
|
||||
</connections>
|
||||
@@ -649,18 +649,18 @@
|
||||
</menu>
|
||||
<window title="Demo" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" releasedWhenClosed="NO" frameAutosaveName="DemoWindow" animationBehavior="default" id="371">
|
||||
<windowStyleMask key="styleMask" titled="YES" closable="YES" miniaturizable="YES"/>
|
||||
<rect key="contentRect" x="335" y="390" width="393" height="129"/>
|
||||
<rect key="contentRect" x="335" y="390" width="393" height="284"/>
|
||||
<rect key="screenRect" x="0.0" y="0.0" width="1440" height="877"/>
|
||||
<view key="contentView" id="372">
|
||||
<rect key="frame" x="0.0" y="0.0" width="393" height="129"/>
|
||||
<view key="contentView" wantsLayer="YES" id="372">
|
||||
<rect key="frame" x="0.0" y="0.0" width="393" height="284"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<subviews>
|
||||
<customView id="536" customClass="MASShortcutView">
|
||||
<rect key="frame" x="142" y="90" width="158" height="19"/>
|
||||
<rect key="frame" x="142" y="245" width="158" height="19"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
</customView>
|
||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" id="PG0-jh-Onh">
|
||||
<rect key="frame" x="18" y="92" width="111" height="17"/>
|
||||
<rect key="frame" x="18" y="247" width="111" height="17"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Custom shortcut:" id="85u-1A-n7H">
|
||||
<font key="font" metaFont="system"/>
|
||||
@@ -669,7 +669,7 @@
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
<button id="zCi-ki-Uuh">
|
||||
<rect key="frame" x="140" y="63" width="169" height="18"/>
|
||||
<rect key="frame" x="140" y="218" width="169" height="18"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<buttonCell key="cell" type="check" title="Enable custom shortcut" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="Y47-p3-sDa">
|
||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||
@@ -680,7 +680,7 @@
|
||||
</connections>
|
||||
</button>
|
||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" id="KnS-ut-phz">
|
||||
<rect key="frame" x="18" y="65" width="111" height="17"/>
|
||||
<rect key="frame" x="18" y="220" width="111" height="17"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Options:" id="cUE-gA-heG">
|
||||
<font key="font" metaFont="system"/>
|
||||
@@ -689,7 +689,7 @@
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
<button id="F4r-KM-wn9">
|
||||
<rect key="frame" x="140" y="43" width="235" height="18"/>
|
||||
<rect key="frame" x="140" y="198" width="235" height="18"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<buttonCell key="cell" type="check" title="Enable hard-coded shortcut (⌘F2)" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="7gv-jN-44g">
|
||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||
@@ -700,7 +700,7 @@
|
||||
</connections>
|
||||
</button>
|
||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" id="9fB-XS-8pK">
|
||||
<rect key="frame" x="18" y="20" width="111" height="17"/>
|
||||
<rect key="frame" x="18" y="175" width="111" height="17"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Feedback:" id="Zbz-mV-NDc">
|
||||
<font key="font" metaFont="system"/>
|
||||
@@ -709,7 +709,7 @@
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" id="Aso-dH-W8I">
|
||||
<rect key="frame" x="140" y="20" width="211" height="17"/>
|
||||
<rect key="frame" x="140" y="175" width="211" height="17"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="left" placeholderString="Press a shortcut to see feedback" id="Ckx-v7-e6x">
|
||||
<font key="font" metaFont="system"/>
|
||||
@@ -717,14 +717,108 @@
|
||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
<visualEffectView appearanceType="inheritedVibrantDark" blendingMode="behindWindow" material="sidebar" state="followsWindowActiveState" id="l1t-cm-ytp">
|
||||
<rect key="frame" x="0.0" y="0.0" width="394" height="155"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<subviews>
|
||||
<customView id="W0x-si-HFG" customClass="MASShortcutView">
|
||||
<rect key="frame" x="142" y="50" width="158" height="19"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
</customView>
|
||||
<textField verticalHuggingPriority="750" id="6zm-L6-krB">
|
||||
<rect key="frame" x="142" y="20" width="158" height="22"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" borderStyle="bezel" placeholderString="Nothing important" drawsBackground="YES" id="D9i-kK-lKz">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" id="inI-Z8-RQI">
|
||||
<rect key="frame" x="18" y="116" width="111" height="17"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Appearance:" id="lOM-io-1Eg">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" id="QHs-6N-eda">
|
||||
<rect key="frame" x="18" y="91" width="111" height="17"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Material:" id="c8q-5c-egp">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
<popUpButton verticalHuggingPriority="750" id="UzX-fU-4se">
|
||||
<rect key="frame" x="140" y="111" width="163" height="25"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<popUpButtonCell key="cell" type="push" title="Inherited" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" selectedItem="nVm-0A-rmR" id="xPV-hQ-85B">
|
||||
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
|
||||
<font key="font" metaFont="menu"/>
|
||||
<menu key="menu" id="K7p-po-GKT">
|
||||
<items>
|
||||
<menuItem title="Inherited" state="on" id="nVm-0A-rmR"/>
|
||||
<menuItem title="Vibrant Light" tag="1" id="OAc-mb-u8i"/>
|
||||
<menuItem title="Vibrant Dark" tag="2" id="fAm-DH-Xtk"/>
|
||||
<menuItem title="Aqua" tag="3" id="GAF-sP-c3A"/>
|
||||
<menuItem title="Dark Aqua" tag="4" id="mk7-OA-JKv"/>
|
||||
</items>
|
||||
</menu>
|
||||
</popUpButtonCell>
|
||||
<connections>
|
||||
<action selector="setAppearance:" target="494" id="dID-gh-aL4"/>
|
||||
</connections>
|
||||
</popUpButton>
|
||||
<popUpButton verticalHuggingPriority="750" id="h98-uu-zJN">
|
||||
<rect key="frame" x="140" y="86" width="163" height="25"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<popUpButtonCell key="cell" type="push" title="Popover" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" selectedItem="kWK-Vb-dcN" id="HBr-i7-UuT">
|
||||
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
|
||||
<font key="font" metaFont="menu"/>
|
||||
<menu key="menu" id="J4V-zf-WmE">
|
||||
<items>
|
||||
<menuItem title="Popover" state="on" id="kWK-Vb-dcN"/>
|
||||
<menuItem title="Sidebar" tag="1" id="uFc-A5-T9Q"/>
|
||||
<menuItem title="HUD Window" tag="2" id="gV5-Ph-kYg"/>
|
||||
<menuItem title="Window Background" tag="3" id="tHv-f7-9rU"/>
|
||||
</items>
|
||||
</menu>
|
||||
</popUpButtonCell>
|
||||
<connections>
|
||||
<action selector="setMaterial:" target="494" id="M89-kv-IrJ"/>
|
||||
</connections>
|
||||
</popUpButton>
|
||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" id="FZE-8P-xqW">
|
||||
<rect key="frame" x="18" y="51" width="111" height="17"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Samples:" id="Whf-bT-vQa">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
<button verticalHuggingPriority="750" id="l37-jD-LZU">
|
||||
<rect key="frame" x="302" y="42" width="63" height="32"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<buttonCell key="cell" type="push" title="Foo" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="yRv-5f-OR6">
|
||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
</buttonCell>
|
||||
</button>
|
||||
</subviews>
|
||||
</visualEffectView>
|
||||
</subviews>
|
||||
</view>
|
||||
<point key="canvasLocation" x="352.5" y="367.5"/>
|
||||
<point key="canvasLocation" x="140" y="398"/>
|
||||
</window>
|
||||
<customObject id="494" customClass="AppDelegate">
|
||||
<connections>
|
||||
<outlet property="customShortcutView" destination="536" id="aO6-hh-1vm"/>
|
||||
<outlet property="feedbackTextField" destination="Aso-dH-W8I" id="hk8-xL-ieC"/>
|
||||
<outlet property="visualEffectView" destination="l1t-cm-ytp" id="NSm-DS-5Sy"/>
|
||||
<outlet property="window" destination="371" id="532"/>
|
||||
</connections>
|
||||
</customObject>
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
/* Feedback that’s displayed when user presses the sample shortcut. */
|
||||
"Shortcut pressed!" = "Atalho pressionado!";
|
||||
|
||||
@@ -0,0 +1,34 @@
|
||||
desc "Make a new release: Bump version number, update changelog and commit & tag the changes"
|
||||
lane :release do |options|
|
||||
|
||||
# Make sure we don't commit any work-in-progress with the release
|
||||
ensure_git_status_clean
|
||||
|
||||
# Read the release type from command-line arguments, default to patch
|
||||
release_type = options[:type] ? options[:type] : "patch"
|
||||
|
||||
# Bump version number
|
||||
increment_version_number(bump_type: release_type)
|
||||
version_number = get_version_number(target: "MASShortcut")
|
||||
increment_build_number(build_number: version_number)
|
||||
|
||||
# Update changelog with the version number and release date
|
||||
stamp_changelog(section_identifier: version_number)
|
||||
git_add(path: 'CHANGELOG.md')
|
||||
|
||||
# Update CocoaPods version
|
||||
version_bump_podspec(path: "MASShortcut.podspec", bump_type: release_type)
|
||||
git_add(path: 'MASShortcut.podspec')
|
||||
|
||||
# Commit and tag the release
|
||||
commit_version_bump(
|
||||
message: "Release #{version_number}",
|
||||
xcodeproj: "MASShortcut.xcodeproj",
|
||||
force: true)
|
||||
add_git_tag(tag: version_number)
|
||||
end
|
||||
|
||||
desc "Push podspec to CocoaPods trunk"
|
||||
lane :trunk do |options|
|
||||
pod_push
|
||||
end
|
||||
@@ -0,0 +1,5 @@
|
||||
# Autogenerated by fastlane
|
||||
#
|
||||
# Ensure this file is checked in to source control!
|
||||
|
||||
gem 'fastlane-plugin-changelog'
|
||||
@@ -15,9 +15,9 @@
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>FMWK</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>2.3.6</string>
|
||||
<string>2.4.0</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>2.3.6</string>
|
||||
<string>2.4.0</string>
|
||||
<key>NSHumanReadableCopyright</key>
|
||||
<string>Copyright © Vadim Shpakovski. All rights reserved.</string>
|
||||
</dict>
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
#import "MASKeyMasks.h"
|
||||
|
||||
// These glyphs are missed in Carbon.h
|
||||
enum {
|
||||
typedef NS_ENUM(unsigned short, kMASShortcutGlyph) {
|
||||
kMASShortcutGlyphEject = 0x23CF,
|
||||
kMASShortcutGlyphClear = 0x2715,
|
||||
kMASShortcutGlyphDeleteLeft = 0x232B,
|
||||
@@ -16,14 +16,14 @@
|
||||
Hardware independent, same as in `NSEvent`. See `Events.h` in the HIToolbox
|
||||
framework for a complete list, or Command-click this symbol: `kVK_ANSI_A`.
|
||||
*/
|
||||
@property (nonatomic, readonly) NSUInteger keyCode;
|
||||
@property (nonatomic, readonly) NSInteger keyCode;
|
||||
|
||||
/**
|
||||
Cocoa keyboard modifier flags.
|
||||
|
||||
Same as in `NSEvent`: `NSCommandKeyMask`, `NSAlternateKeyMask`, etc.
|
||||
*/
|
||||
@property (nonatomic, readonly) NSUInteger modifierFlags;
|
||||
@property (nonatomic, readonly) NSEventModifierFlags modifierFlags;
|
||||
|
||||
/**
|
||||
Same as `keyCode`, just a different type.
|
||||
@@ -68,8 +68,8 @@
|
||||
*/
|
||||
@property (nonatomic, readonly) NSString *modifierFlagsString;
|
||||
|
||||
- (instancetype)initWithKeyCode:(NSUInteger)code modifierFlags:(NSUInteger)flags;
|
||||
+ (instancetype)shortcutWithKeyCode:(NSUInteger)code modifierFlags:(NSUInteger)flags;
|
||||
- (instancetype)initWithKeyCode:(NSInteger)code modifierFlags:(NSEventModifierFlags)flags;
|
||||
+ (instancetype)shortcutWithKeyCode:(NSInteger)code modifierFlags:(NSEventModifierFlags)flags;
|
||||
|
||||
/**
|
||||
Creates a new shortcut from an `NSEvent` object.
|
||||
@@ -8,7 +8,7 @@ static NSString *const MASShortcutModifierFlags = @"ModifierFlags";
|
||||
|
||||
#pragma mark Initialization
|
||||
|
||||
- (instancetype)initWithKeyCode:(NSUInteger)code modifierFlags:(NSUInteger)flags
|
||||
- (instancetype)initWithKeyCode:(NSInteger)code modifierFlags:(NSEventModifierFlags)flags
|
||||
{
|
||||
self = [super init];
|
||||
if (self) {
|
||||
@@ -18,7 +18,7 @@ static NSString *const MASShortcutModifierFlags = @"ModifierFlags";
|
||||
return self;
|
||||
}
|
||||
|
||||
+ (instancetype)shortcutWithKeyCode:(NSUInteger)code modifierFlags:(NSUInteger)flags
|
||||
+ (instancetype)shortcutWithKeyCode:(NSInteger)code modifierFlags:(NSEventModifierFlags)flags
|
||||
{
|
||||
return [[self alloc] initWithKeyCode:code modifierFlags:flags];
|
||||
}
|
||||
@@ -48,33 +48,34 @@ static NSString *const MASShortcutModifierFlags = @"ModifierFlags";
|
||||
- (NSString *)keyCodeStringForKeyEquivalent
|
||||
{
|
||||
NSString *keyCodeString = self.keyCodeString;
|
||||
if (keyCodeString.length > 1) {
|
||||
switch (self.keyCode) {
|
||||
case kVK_F1: return NSStringFromMASKeyCode(0xF704);
|
||||
case kVK_F2: return NSStringFromMASKeyCode(0xF705);
|
||||
case kVK_F3: return NSStringFromMASKeyCode(0xF706);
|
||||
case kVK_F4: return NSStringFromMASKeyCode(0xF707);
|
||||
case kVK_F5: return NSStringFromMASKeyCode(0xF708);
|
||||
case kVK_F6: return NSStringFromMASKeyCode(0xF709);
|
||||
case kVK_F7: return NSStringFromMASKeyCode(0xF70a);
|
||||
case kVK_F8: return NSStringFromMASKeyCode(0xF70b);
|
||||
case kVK_F9: return NSStringFromMASKeyCode(0xF70c);
|
||||
case kVK_F10: return NSStringFromMASKeyCode(0xF70d);
|
||||
case kVK_F11: return NSStringFromMASKeyCode(0xF70e);
|
||||
case kVK_F12: return NSStringFromMASKeyCode(0xF70f);
|
||||
// From this point down I am guessing F13 etc come sequentially, I don't have a keyboard to test.
|
||||
case kVK_F13: return NSStringFromMASKeyCode(0xF710);
|
||||
case kVK_F14: return NSStringFromMASKeyCode(0xF711);
|
||||
case kVK_F15: return NSStringFromMASKeyCode(0xF712);
|
||||
case kVK_F16: return NSStringFromMASKeyCode(0xF713);
|
||||
case kVK_F17: return NSStringFromMASKeyCode(0xF714);
|
||||
case kVK_F18: return NSStringFromMASKeyCode(0xF715);
|
||||
case kVK_F19: return NSStringFromMASKeyCode(0xF716);
|
||||
case kVK_Space: return NSStringFromMASKeyCode(0x20);
|
||||
default: return @"";
|
||||
}
|
||||
|
||||
if (keyCodeString.length <= 1) {
|
||||
return keyCodeString.lowercaseString;
|
||||
}
|
||||
|
||||
switch (self.keyCode) {
|
||||
case kVK_F1: return NSStringFromMASKeyCode(NSF1FunctionKey);
|
||||
case kVK_F2: return NSStringFromMASKeyCode(NSF2FunctionKey);
|
||||
case kVK_F3: return NSStringFromMASKeyCode(NSF3FunctionKey);
|
||||
case kVK_F4: return NSStringFromMASKeyCode(NSF4FunctionKey);
|
||||
case kVK_F5: return NSStringFromMASKeyCode(NSF5FunctionKey);
|
||||
case kVK_F6: return NSStringFromMASKeyCode(NSF6FunctionKey);
|
||||
case kVK_F7: return NSStringFromMASKeyCode(NSF7FunctionKey);
|
||||
case kVK_F8: return NSStringFromMASKeyCode(NSF8FunctionKey);
|
||||
case kVK_F9: return NSStringFromMASKeyCode(NSF9FunctionKey);
|
||||
case kVK_F10: return NSStringFromMASKeyCode(NSF10FunctionKey);
|
||||
case kVK_F11: return NSStringFromMASKeyCode(NSF11FunctionKey);
|
||||
case kVK_F12: return NSStringFromMASKeyCode(NSF12FunctionKey);
|
||||
case kVK_F13: return NSStringFromMASKeyCode(NSF13FunctionKey);
|
||||
case kVK_F14: return NSStringFromMASKeyCode(NSF14FunctionKey);
|
||||
case kVK_F15: return NSStringFromMASKeyCode(NSF15FunctionKey);
|
||||
case kVK_F16: return NSStringFromMASKeyCode(NSF16FunctionKey);
|
||||
case kVK_F17: return NSStringFromMASKeyCode(NSF17FunctionKey);
|
||||
case kVK_F18: return NSStringFromMASKeyCode(NSF18FunctionKey);
|
||||
case kVK_F19: return NSStringFromMASKeyCode(NSF19FunctionKey);
|
||||
case kVK_Space: return NSStringFromMASKeyCode(0x20);
|
||||
default: return @"";
|
||||
}
|
||||
return keyCodeString.lowercaseString;
|
||||
}
|
||||
|
||||
- (NSString *)keyCodeString
|
||||
@@ -132,7 +133,7 @@ static NSString *const MASShortcutModifierFlags = @"ModifierFlags";
|
||||
case kVK_ANSI_KeypadClear: return NSStringFromMASKeyCode(kMASShortcutGlyphPadClear);
|
||||
case kVK_ANSI_KeypadDivide: return @"/";
|
||||
case kVK_ANSI_KeypadEnter: return NSStringFromMASKeyCode(kMASShortcutGlyphReturn);
|
||||
case kVK_ANSI_KeypadMinus: return @"–";
|
||||
case kVK_ANSI_KeypadMinus: return @"-";
|
||||
case kVK_ANSI_KeypadEquals: return @"=";
|
||||
|
||||
// Hardcode
|
||||
@@ -210,7 +211,7 @@ static NSString *const MASShortcutModifierFlags = @"ModifierFlags";
|
||||
|
||||
- (void)encodeWithCoder:(NSCoder *)coder
|
||||
{
|
||||
[coder encodeInteger:(self.keyCode != NSNotFound ? (NSInteger)self.keyCode : - 1) forKey:MASShortcutKeyCode];
|
||||
[coder encodeInteger:(self.keyCode != NSNotFound ? self.keyCode : - 1) forKey:MASShortcutKeyCode];
|
||||
[coder encodeInteger:(NSInteger)self.modifierFlags forKey:MASShortcutModifierFlags];
|
||||
}
|
||||
|
||||
@@ -219,7 +220,7 @@ static NSString *const MASShortcutModifierFlags = @"ModifierFlags";
|
||||
self = [super init];
|
||||
if (self) {
|
||||
NSInteger code = [decoder decodeIntegerForKey:MASShortcutKeyCode];
|
||||
_keyCode = (code < 0 ? NSNotFound : (NSUInteger)code);
|
||||
_keyCode = (code < 0) ? NSNotFound : code;
|
||||
_modifierFlags = [decoder decodeIntegerForKey:MASShortcutModifierFlags];
|
||||
}
|
||||
return self;
|
||||
@@ -15,8 +15,8 @@
|
||||
|
||||
- (BOOL) isShortcutValid: (MASShortcut*) shortcut
|
||||
{
|
||||
NSUInteger keyCode = [shortcut keyCode];
|
||||
NSUInteger modifiers = [shortcut modifierFlags];
|
||||
NSInteger keyCode = [shortcut keyCode];
|
||||
NSEventModifierFlags modifiers = [shortcut modifierFlags];
|
||||
|
||||
// Allow any function key with any combination of modifiers
|
||||
BOOL includesFunctionKey = ((keyCode == kVK_F1) || (keyCode == kVK_F2) || (keyCode == kVK_F3) || (keyCode == kVK_F4) ||
|
||||
@@ -53,7 +53,7 @@
|
||||
- (BOOL) isShortcut: (MASShortcut*) shortcut alreadyTakenInMenu: (NSMenu*) menu explanation: (NSString**) explanation
|
||||
{
|
||||
NSString *keyEquivalent = [shortcut keyCodeStringForKeyEquivalent];
|
||||
NSUInteger flags = [shortcut modifierFlags];
|
||||
NSEventModifierFlags flags = [shortcut modifierFlags];
|
||||
|
||||
for (NSMenuItem *menuItem in menu.itemArray) {
|
||||
if (menuItem.hasSubmenu && [self isShortcut:shortcut alreadyTakenInMenu:[menuItem submenu] explanation:explanation]) return YES;
|
||||
@@ -91,7 +91,7 @@
|
||||
CFNumberRef flags = CFDictionaryGetValue(hotKeyInfo, kHISymbolicHotKeyModifiers);
|
||||
CFNumberRef enabled = CFDictionaryGetValue(hotKeyInfo, kHISymbolicHotKeyEnabled);
|
||||
|
||||
if (([(__bridge NSNumber *)code unsignedIntegerValue] == [shortcut keyCode]) &&
|
||||
if (([(__bridge NSNumber *)code integerValue] == [shortcut keyCode]) &&
|
||||
([(__bridge NSNumber *)flags unsignedIntegerValue] == [shortcut carbonFlags]) &&
|
||||
([(__bridge NSNumber *)enabled boolValue])) {
|
||||
|
||||
@@ -2,12 +2,12 @@
|
||||
|
||||
extern NSString *const MASShortcutBinding;
|
||||
|
||||
typedef enum {
|
||||
typedef NS_ENUM(NSInteger, MASShortcutViewStyle) {
|
||||
MASShortcutViewStyleDefault = 0, // Height = 19 px
|
||||
MASShortcutViewStyleTexturedRect, // Height = 25 px
|
||||
MASShortcutViewStyleRounded, // Height = 43 px
|
||||
MASShortcutViewStyleFlat
|
||||
} MASShortcutViewStyle;
|
||||
};
|
||||
|
||||
@interface MASShortcutView : NSView
|
||||
|
||||
@@ -24,7 +24,7 @@ static const CGFloat MASButtonFontSize = 11;
|
||||
NSInteger _shortcutToolTipTag;
|
||||
NSInteger _hintToolTipTag;
|
||||
NSTrackingArea *_hintArea;
|
||||
BOOL _acceptsFirstResponder;
|
||||
BOOL _acceptsFirstResponder;
|
||||
}
|
||||
|
||||
#pragma mark -
|
||||
@@ -60,7 +60,7 @@ static const CGFloat MASButtonFontSize = 11;
|
||||
_shortcutValidator = [MASShortcutValidator sharedValidator];
|
||||
_enabled = YES;
|
||||
_showsDeleteButton = YES;
|
||||
_acceptsFirstResponder = NO;
|
||||
_acceptsFirstResponder = NO;
|
||||
[self resetShortcutCellStyle];
|
||||
}
|
||||
|
||||
@@ -78,6 +78,7 @@ static const CGFloat MASButtonFontSize = 11;
|
||||
_enabled = flag;
|
||||
[self updateTrackingAreas];
|
||||
self.recording = NO;
|
||||
[self invalidateIntrinsicContentSize];
|
||||
[self setNeedsDisplay:YES];
|
||||
}
|
||||
}
|
||||
@@ -87,6 +88,7 @@ static const CGFloat MASButtonFontSize = 11;
|
||||
if (_style != newStyle) {
|
||||
_style = newStyle;
|
||||
[self resetShortcutCellStyle];
|
||||
[self invalidateIntrinsicContentSize];
|
||||
[self setNeedsDisplay:YES];
|
||||
}
|
||||
}
|
||||
@@ -135,6 +137,7 @@ static const CGFloat MASButtonFontSize = 11;
|
||||
[self resetToolTips];
|
||||
[self activateEventMonitoring:_recording];
|
||||
[self activateResignObserver:_recording];
|
||||
[self invalidateIntrinsicContentSize];
|
||||
[self setNeedsDisplay:YES];
|
||||
|
||||
// Give VoiceOver users feedback on the result. Requires at least 10.9 to run.
|
||||
@@ -161,6 +164,7 @@ static const CGFloat MASButtonFontSize = 11;
|
||||
{
|
||||
_shortcutValue = shortcutValue;
|
||||
[self resetToolTips];
|
||||
[self invalidateIntrinsicContentSize];
|
||||
[self setNeedsDisplay:YES];
|
||||
[self propagateValue:shortcutValue forBinding:MASShortcutBinding];
|
||||
|
||||
@@ -172,9 +176,17 @@ static const CGFloat MASButtonFontSize = 11;
|
||||
- (void)setShortcutPlaceholder:(NSString *)shortcutPlaceholder
|
||||
{
|
||||
_shortcutPlaceholder = shortcutPlaceholder.copy;
|
||||
[self invalidateIntrinsicContentSize];
|
||||
[self setNeedsDisplay:YES];
|
||||
}
|
||||
|
||||
#pragma mark - Appearance
|
||||
|
||||
- (BOOL)allowsVibrancy
|
||||
{
|
||||
return YES;
|
||||
}
|
||||
|
||||
#pragma mark - Drawing
|
||||
|
||||
- (BOOL)isFlipped
|
||||
@@ -254,6 +266,25 @@ static const CGFloat MASButtonFontSize = 11;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
- (NSSize)intrinsicContentSize
|
||||
{
|
||||
NSSize cellSize = _shortcutCell.cellSize;
|
||||
|
||||
// Use a "fake" value for width. Since determining the actual width requires information
|
||||
// that is not determined until drawRect: is called, it doesn't seem feasible to properly
|
||||
// calculate the intrinsic size without refactoring the code. That would give better results,
|
||||
// however.
|
||||
|
||||
// 120 is an arbitray number that seems to be wide enough for English localization. This
|
||||
// may need to be adjusted for other locales/languages.
|
||||
|
||||
// NOTE: Simply returning cellSize results in a display that is sometimes correct
|
||||
// and sometimes not, and changes based on whether the mouse is hovering or not.
|
||||
return NSMakeSize(120, cellSize.height);
|
||||
}
|
||||
|
||||
|
||||
#pragma mark - Mouse handling
|
||||
|
||||
- (void)getShortcutRect:(CGRect *)shortcutRectRef hintRect:(CGRect *)hintRectRef
|
||||
@@ -344,6 +375,7 @@ static const CGFloat MASButtonFontSize = 11;
|
||||
{
|
||||
if (_hinting != flag) {
|
||||
_hinting = flag;
|
||||
[self invalidateIntrinsicContentSize];
|
||||
[self setNeedsDisplay:YES];
|
||||
}
|
||||
}
|
||||
@@ -364,10 +396,12 @@ void *kUserDataHint = &kUserDataHint;
|
||||
- (void)resetToolTips
|
||||
{
|
||||
if (_shortcutToolTipTag) {
|
||||
[self removeToolTip:_shortcutToolTipTag], _shortcutToolTipTag = 0;
|
||||
[self removeToolTip:_shortcutToolTipTag];
|
||||
_shortcutToolTipTag = 0;
|
||||
}
|
||||
if (_hintToolTipTag) {
|
||||
[self removeToolTip:_hintToolTipTag], _hintToolTipTag = 0;
|
||||
[self removeToolTip:_hintToolTipTag];
|
||||
_hintToolTipTag = 0;
|
||||
}
|
||||
|
||||
if ((self.shortcutValue == nil) || self.recording || !self.enabled) return;
|
||||
@@ -386,7 +420,7 @@ void *kUserDataHint = &kUserDataHint;
|
||||
else if (data == kUserDataHint) {
|
||||
return MASLocalizedString(@"Delete shortcut", @"Tooltip for hint button near the non-empty shortcut");
|
||||
}
|
||||
return nil;
|
||||
return @"";
|
||||
}
|
||||
|
||||
#pragma mark - Event monitoring
|
||||
@@ -432,10 +466,10 @@ void *kUserDataHint = &kUserDataHint;
|
||||
else {
|
||||
// Verify possible shortcut
|
||||
if (shortcut.keyCodeString.length > 0) {
|
||||
if ([_shortcutValidator isShortcutValid:shortcut]) {
|
||||
if (!weakSelf.shortcutValidator || [weakSelf.shortcutValidator isShortcutValid:shortcut]) {
|
||||
// Verify that shortcut is not used
|
||||
NSString *explanation = nil;
|
||||
if ([_shortcutValidator isShortcutAlreadyTakenBySystem:shortcut explanation:&explanation]) {
|
||||
if ([weakSelf.shortcutValidator isShortcutAlreadyTakenBySystem:shortcut explanation:&explanation]) {
|
||||
// Prevent cancel of recording when Alert window is key
|
||||
[weakSelf activateResignObserver:NO];
|
||||
[weakSelf activateEventMonitoring:NO];
|
||||
@@ -545,11 +579,6 @@ void *kUserDataHint = &kUserDataHint;
|
||||
|
||||
#pragma mark - Accessibility
|
||||
|
||||
- (BOOL)accessibilityIsIgnored
|
||||
{
|
||||
return NO;
|
||||
}
|
||||
|
||||
- (NSString *)accessibilityHelp
|
||||
{
|
||||
return MASLocalizedString(@"To record a new shortcut, click this button, and then type the"
|
||||
@@ -582,22 +611,24 @@ void *kUserDataHint = &kUserDataHint;
|
||||
|
||||
- (BOOL)acceptsFirstResponder
|
||||
{
|
||||
return _acceptsFirstResponder;
|
||||
return _acceptsFirstResponder;
|
||||
}
|
||||
|
||||
- (void)setAcceptsFirstResponder:(BOOL)value
|
||||
{
|
||||
_acceptsFirstResponder = value;
|
||||
_acceptsFirstResponder = value;
|
||||
}
|
||||
|
||||
- (BOOL)becomeFirstResponder
|
||||
{
|
||||
[self invalidateIntrinsicContentSize];
|
||||
[self setNeedsDisplay:YES];
|
||||
return [super becomeFirstResponder];
|
||||
}
|
||||
|
||||
- (BOOL)resignFirstResponder
|
||||
{
|
||||
[self invalidateIntrinsicContentSize];
|
||||
[self setNeedsDisplay:YES];
|
||||
return [super resignFirstResponder];
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
source 'https://rubygems.org'
|
||||
gem 'cocoapods'
|
||||
gem 'fastlane'
|
||||
|
||||
plugins_path = File.join(File.dirname(__FILE__), 'fastlane', 'Pluginfile')
|
||||
eval_gemfile(plugins_path) if File.exist?(plugins_path)
|
||||
+214
@@ -0,0 +1,214 @@
|
||||
GEM
|
||||
remote: https://rubygems.org/
|
||||
specs:
|
||||
CFPropertyList (3.0.0)
|
||||
activesupport (4.2.11.1)
|
||||
i18n (~> 0.7)
|
||||
minitest (~> 5.1)
|
||||
thread_safe (~> 0.3, >= 0.3.4)
|
||||
tzinfo (~> 1.1)
|
||||
addressable (2.6.0)
|
||||
public_suffix (>= 2.0.2, < 4.0)
|
||||
atomos (0.1.3)
|
||||
babosa (1.0.2)
|
||||
claide (1.0.2)
|
||||
cocoapods (1.7.1)
|
||||
activesupport (>= 4.0.2, < 5)
|
||||
claide (>= 1.0.2, < 2.0)
|
||||
cocoapods-core (= 1.7.1)
|
||||
cocoapods-deintegrate (>= 1.0.3, < 2.0)
|
||||
cocoapods-downloader (>= 1.2.2, < 2.0)
|
||||
cocoapods-plugins (>= 1.0.0, < 2.0)
|
||||
cocoapods-search (>= 1.0.0, < 2.0)
|
||||
cocoapods-stats (>= 1.0.0, < 2.0)
|
||||
cocoapods-trunk (>= 1.3.1, < 2.0)
|
||||
cocoapods-try (>= 1.1.0, < 2.0)
|
||||
colored2 (~> 3.1)
|
||||
escape (~> 0.0.4)
|
||||
fourflusher (>= 2.2.0, < 3.0)
|
||||
gh_inspector (~> 1.0)
|
||||
molinillo (~> 0.6.6)
|
||||
nap (~> 1.0)
|
||||
ruby-macho (~> 1.4)
|
||||
xcodeproj (>= 1.8.2, < 2.0)
|
||||
cocoapods-core (1.7.1)
|
||||
activesupport (>= 4.0.2, < 6)
|
||||
fuzzy_match (~> 2.0.4)
|
||||
nap (~> 1.0)
|
||||
cocoapods-deintegrate (1.0.4)
|
||||
cocoapods-downloader (1.2.2)
|
||||
cocoapods-plugins (1.0.0)
|
||||
nap
|
||||
cocoapods-search (1.0.0)
|
||||
cocoapods-stats (1.1.0)
|
||||
cocoapods-trunk (1.3.1)
|
||||
nap (>= 0.8, < 2.0)
|
||||
netrc (~> 0.11)
|
||||
cocoapods-try (1.1.0)
|
||||
colored (1.2)
|
||||
colored2 (3.1.2)
|
||||
commander-fastlane (4.4.6)
|
||||
highline (~> 1.7.2)
|
||||
concurrent-ruby (1.1.5)
|
||||
declarative (0.0.10)
|
||||
declarative-option (0.1.0)
|
||||
digest-crc (0.4.1)
|
||||
domain_name (0.5.20180417)
|
||||
unf (>= 0.0.5, < 1.0.0)
|
||||
dotenv (2.7.2)
|
||||
emoji_regex (1.0.1)
|
||||
escape (0.0.4)
|
||||
excon (0.64.0)
|
||||
faraday (0.15.4)
|
||||
multipart-post (>= 1.2, < 3)
|
||||
faraday-cookie_jar (0.0.6)
|
||||
faraday (>= 0.7.4)
|
||||
http-cookie (~> 1.0.0)
|
||||
faraday_middleware (0.13.1)
|
||||
faraday (>= 0.7.4, < 1.0)
|
||||
fastimage (2.1.5)
|
||||
fastlane (2.125.0)
|
||||
CFPropertyList (>= 2.3, < 4.0.0)
|
||||
addressable (>= 2.3, < 3.0.0)
|
||||
babosa (>= 1.0.2, < 2.0.0)
|
||||
bundler (>= 1.12.0, < 3.0.0)
|
||||
colored
|
||||
commander-fastlane (>= 4.4.6, < 5.0.0)
|
||||
dotenv (>= 2.1.1, < 3.0.0)
|
||||
emoji_regex (>= 0.1, < 2.0)
|
||||
excon (>= 0.45.0, < 1.0.0)
|
||||
faraday (~> 0.9)
|
||||
faraday-cookie_jar (~> 0.0.6)
|
||||
faraday_middleware (~> 0.9)
|
||||
fastimage (>= 2.1.0, < 3.0.0)
|
||||
gh_inspector (>= 1.1.2, < 2.0.0)
|
||||
google-api-client (>= 0.21.2, < 0.24.0)
|
||||
google-cloud-storage (>= 1.15.0, < 2.0.0)
|
||||
highline (>= 1.7.2, < 2.0.0)
|
||||
json (< 3.0.0)
|
||||
jwt (~> 2.1.0)
|
||||
mini_magick (~> 4.5.1)
|
||||
multi_xml (~> 0.5)
|
||||
multipart-post (~> 2.0.0)
|
||||
plist (>= 3.1.0, < 4.0.0)
|
||||
public_suffix (~> 2.0.0)
|
||||
rubyzip (>= 1.2.2, < 2.0.0)
|
||||
security (= 0.1.3)
|
||||
simctl (~> 1.6.3)
|
||||
slack-notifier (>= 2.0.0, < 3.0.0)
|
||||
terminal-notifier (>= 2.0.0, < 3.0.0)
|
||||
terminal-table (>= 1.4.5, < 2.0.0)
|
||||
tty-screen (>= 0.6.3, < 1.0.0)
|
||||
tty-spinner (>= 0.8.0, < 1.0.0)
|
||||
word_wrap (~> 1.0.0)
|
||||
xcodeproj (>= 1.8.1, < 2.0.0)
|
||||
xcpretty (~> 0.3.0)
|
||||
xcpretty-travis-formatter (>= 0.0.3)
|
||||
fastlane-plugin-changelog (0.14.0)
|
||||
fourflusher (2.2.0)
|
||||
fuzzy_match (2.0.4)
|
||||
gh_inspector (1.1.3)
|
||||
google-api-client (0.23.9)
|
||||
addressable (~> 2.5, >= 2.5.1)
|
||||
googleauth (>= 0.5, < 0.7.0)
|
||||
httpclient (>= 2.8.1, < 3.0)
|
||||
mime-types (~> 3.0)
|
||||
representable (~> 3.0)
|
||||
retriable (>= 2.0, < 4.0)
|
||||
signet (~> 0.9)
|
||||
google-cloud-core (1.3.0)
|
||||
google-cloud-env (~> 1.0)
|
||||
google-cloud-env (1.0.5)
|
||||
faraday (~> 0.11)
|
||||
google-cloud-storage (1.16.0)
|
||||
digest-crc (~> 0.4)
|
||||
google-api-client (~> 0.23)
|
||||
google-cloud-core (~> 1.2)
|
||||
googleauth (>= 0.6.2, < 0.10.0)
|
||||
googleauth (0.6.7)
|
||||
faraday (~> 0.12)
|
||||
jwt (>= 1.4, < 3.0)
|
||||
memoist (~> 0.16)
|
||||
multi_json (~> 1.11)
|
||||
os (>= 0.9, < 2.0)
|
||||
signet (~> 0.7)
|
||||
highline (1.7.10)
|
||||
http-cookie (1.0.3)
|
||||
domain_name (~> 0.5)
|
||||
httpclient (2.8.3)
|
||||
i18n (0.9.5)
|
||||
concurrent-ruby (~> 1.0)
|
||||
json (2.2.0)
|
||||
jwt (2.1.0)
|
||||
memoist (0.16.0)
|
||||
mime-types (3.2.2)
|
||||
mime-types-data (~> 3.2015)
|
||||
mime-types-data (3.2019.0331)
|
||||
mini_magick (4.5.1)
|
||||
minitest (5.11.3)
|
||||
molinillo (0.6.6)
|
||||
multi_json (1.13.1)
|
||||
multi_xml (0.6.0)
|
||||
multipart-post (2.0.0)
|
||||
nanaimo (0.2.6)
|
||||
nap (1.1.0)
|
||||
naturally (2.2.0)
|
||||
netrc (0.11.0)
|
||||
os (1.0.1)
|
||||
plist (3.5.0)
|
||||
public_suffix (2.0.5)
|
||||
representable (3.0.4)
|
||||
declarative (< 0.1.0)
|
||||
declarative-option (< 0.2.0)
|
||||
uber (< 0.2.0)
|
||||
retriable (3.1.2)
|
||||
rouge (2.0.7)
|
||||
ruby-macho (1.4.0)
|
||||
rubyzip (1.2.3)
|
||||
security (0.1.3)
|
||||
signet (0.11.0)
|
||||
addressable (~> 2.3)
|
||||
faraday (~> 0.9)
|
||||
jwt (>= 1.5, < 3.0)
|
||||
multi_json (~> 1.10)
|
||||
simctl (1.6.5)
|
||||
CFPropertyList
|
||||
naturally
|
||||
slack-notifier (2.3.2)
|
||||
terminal-notifier (2.0.0)
|
||||
terminal-table (1.8.0)
|
||||
unicode-display_width (~> 1.1, >= 1.1.1)
|
||||
thread_safe (0.3.6)
|
||||
tty-cursor (0.7.0)
|
||||
tty-screen (0.7.0)
|
||||
tty-spinner (0.9.1)
|
||||
tty-cursor (~> 0.7)
|
||||
tzinfo (1.2.5)
|
||||
thread_safe (~> 0.1)
|
||||
uber (0.1.0)
|
||||
unf (0.1.4)
|
||||
unf_ext
|
||||
unf_ext (0.0.7.6)
|
||||
unicode-display_width (1.6.0)
|
||||
word_wrap (1.0.0)
|
||||
xcodeproj (1.9.0)
|
||||
CFPropertyList (>= 2.3.3, < 4.0)
|
||||
atomos (~> 0.1.3)
|
||||
claide (>= 1.0.2, < 2.0)
|
||||
colored2 (~> 3.1)
|
||||
nanaimo (~> 0.2.6)
|
||||
xcpretty (0.3.0)
|
||||
rouge (~> 2.0.7)
|
||||
xcpretty-travis-formatter (1.0.0)
|
||||
xcpretty (~> 0.2, >= 0.0.7)
|
||||
|
||||
PLATFORMS
|
||||
ruby
|
||||
|
||||
DEPENDENCIES
|
||||
cocoapods
|
||||
fastlane
|
||||
fastlane-plugin-changelog
|
||||
|
||||
BUNDLED WITH
|
||||
1.16.2
|
||||
+36
@@ -0,0 +1,36 @@
|
||||
# Backward Compatibility
|
||||
|
||||
Please note that this framework supports older OS X versions down to 10.10. When changing the code, be careful not to call any API functions not available in 10.10 or call them conditionally, only where supported.
|
||||
|
||||
# Commit Messages
|
||||
|
||||
Please use descriptive commit message. As an example, _Bug fix_ commit message doesn’t say much, while _Fix a memory-management bug in formatting code_ works much better. A [nice detailed article about writing commit messages](http://chris.beams.io/posts/git-commit/) is also available.
|
||||
|
||||
# How to Release a New Version
|
||||
|
||||
The release process is automated using [Fastlane](https://fastlane.tools). To install the tooling:
|
||||
|
||||
```bash
|
||||
bundle install
|
||||
```
|
||||
|
||||
To mint a new release:
|
||||
|
||||
```bash
|
||||
bundle exec fastlane release
|
||||
```
|
||||
|
||||
This will bump the version number, stamp the changelog, etc. By default, the command will produce a patch release. (MASShortcut uses [Semantic Versioning](http://semver.org/), so please read the docs if you’re not sure what the deal is.) If you want a minor or major bump:
|
||||
|
||||
```bash
|
||||
bundle exec fastlane release type:minor
|
||||
bundle exec fastlane release type:major
|
||||
```
|
||||
|
||||
After pushing the release including tags (`git push --follow-tags`), don’t forget to publish the release in CocoaPods:
|
||||
|
||||
```bash
|
||||
bundle exec fastlane trunk
|
||||
```
|
||||
|
||||
That’s it. Go have a beer or a cup of tea to celebrate.
|
||||
+6
-6
@@ -1,7 +1,7 @@
|
||||
# coding: utf-8
|
||||
Pod::Spec.new do |s|
|
||||
s.name = 'MASShortcut'
|
||||
s.version = '2.3.6'
|
||||
s.version = '2.4.0'
|
||||
s.summary = 'Modern framework for managing global keyboard shortcuts compatible with Mac App Store'
|
||||
s.homepage = 'https://github.com/shpakovski/MASShortcut'
|
||||
s.license = 'BSD 2-clause'
|
||||
@@ -9,11 +9,11 @@ Pod::Spec.new do |s|
|
||||
'Tomáš Znamenáček' => 'tomas.znamenacek@gmail.com' }
|
||||
|
||||
s.platform = :osx
|
||||
s.osx.deployment_target = "10.6"
|
||||
s.source = { :git => 'https://github.com/shpakovski/MASShortcut.git', :tag => '2.3.6' }
|
||||
s.source_files = 'Framework/*.{h,m}'
|
||||
s.exclude_files = 'Framework/*Tests.m'
|
||||
s.osx.deployment_target = "10.10"
|
||||
s.source = { :git => 'https://github.com/shpakovski/MASShortcut.git', :tag => s.version }
|
||||
s.source_files = 'Framework/**/*.{h,m}'
|
||||
s.exclude_files = 'Framework/**/*Tests.m'
|
||||
s.osx.frameworks = 'Carbon', 'AppKit'
|
||||
s.requires_arc = true
|
||||
s.osx.resource_bundles = { 'MASShortcut' => ['*.lproj'] }
|
||||
s.osx.resource_bundles = { 'MASShortcut' => ['Resources/*.lproj'] }
|
||||
end
|
||||
|
||||
@@ -73,14 +73,14 @@
|
||||
/* Begin PBXFileReference section */
|
||||
0D2CAB141B8332E5005431FC /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = "<group>"; };
|
||||
0D2CAB161B8332EE005431FC /* cs */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = cs; path = cs.lproj/Localizable.strings; sourceTree = "<group>"; };
|
||||
0D2CAB171B8339F4005431FC /* MASLocalization.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MASLocalization.h; path = Framework/MASLocalization.h; sourceTree = "<group>"; };
|
||||
0D2CAB181B8339F4005431FC /* MASLocalization.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MASLocalization.m; path = Framework/MASLocalization.m; sourceTree = "<group>"; };
|
||||
0D2CAB171B8339F4005431FC /* MASLocalization.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MASLocalization.h; sourceTree = "<group>"; };
|
||||
0D2CAB181B8339F4005431FC /* MASLocalization.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MASLocalization.m; sourceTree = "<group>"; };
|
||||
0D2CAB1C1B83409C005431FC /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = en.lproj/MainMenu.xib; sourceTree = "<group>"; };
|
||||
0D2CAB1E1B8340A4005431FC /* cs */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = cs; path = cs.lproj/MainMenu.xib; sourceTree = "<group>"; };
|
||||
0D2CAB221B834464005431FC /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = "<group>"; };
|
||||
0D2CAB241B834467005431FC /* cs */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = cs; path = cs.lproj/Localizable.strings; sourceTree = "<group>"; };
|
||||
0D39DCA11A668A4400639145 /* MASHotKeyTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MASHotKeyTests.m; path = Framework/MASHotKeyTests.m; sourceTree = "<group>"; };
|
||||
0D39DCA31A668E5500639145 /* MASShortcutMonitorTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MASShortcutMonitorTests.m; path = Framework/MASShortcutMonitorTests.m; sourceTree = "<group>"; };
|
||||
0D39DCA11A668A4400639145 /* MASHotKeyTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MASHotKeyTests.m; sourceTree = "<group>"; };
|
||||
0D39DCA31A668E5500639145 /* MASShortcutMonitorTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MASShortcutMonitorTests.m; sourceTree = "<group>"; };
|
||||
0D58DE521BA165FC0023BFBE /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/Localizable.strings; sourceTree = "<group>"; };
|
||||
0D58DE531BA166170023BFBE /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/Localizable.strings; sourceTree = "<group>"; };
|
||||
0D58DE541BA166270023BFBE /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = it.lproj/Localizable.strings; sourceTree = "<group>"; };
|
||||
@@ -91,48 +91,51 @@
|
||||
0D827CD91990D4420010B8EF /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
|
||||
0D827CDA1990D4420010B8EF /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = System/Library/Frameworks/CoreData.framework; sourceTree = SDKROOT; };
|
||||
0D827CDB1990D4420010B8EF /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = System/Library/Frameworks/AppKit.framework; sourceTree = SDKROOT; };
|
||||
0D827D1B1990D55E0010B8EF /* MASShortcut.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MASShortcut.h; path = Framework/MASShortcut.h; sourceTree = "<group>"; };
|
||||
0D827D1C1990D55E0010B8EF /* MASShortcut.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MASShortcut.m; path = Framework/MASShortcut.m; sourceTree = "<group>"; };
|
||||
0D827D211990D55E0010B8EF /* MASShortcutView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MASShortcutView.h; path = Framework/MASShortcutView.h; sourceTree = "<group>"; };
|
||||
0D827D221990D55E0010B8EF /* MASShortcutView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MASShortcutView.m; path = Framework/MASShortcutView.m; sourceTree = "<group>"; };
|
||||
0D827D2F1990D5640010B8EF /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = Framework/Info.plist; sourceTree = "<group>"; };
|
||||
0D827D1B1990D55E0010B8EF /* MASShortcut.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MASShortcut.h; sourceTree = "<group>"; };
|
||||
0D827D1C1990D55E0010B8EF /* MASShortcut.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MASShortcut.m; sourceTree = "<group>"; };
|
||||
0D827D211990D55E0010B8EF /* MASShortcutView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MASShortcutView.h; sourceTree = "<group>"; };
|
||||
0D827D221990D55E0010B8EF /* MASShortcutView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MASShortcutView.m; sourceTree = "<group>"; };
|
||||
0D827D2F1990D5640010B8EF /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
||||
0D827D371990D5E70010B8EF /* Demo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Demo.app; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
0D827D691990D6110010B8EF /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = "<group>"; };
|
||||
0D827D6A1990D6110010B8EF /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = "<group>"; };
|
||||
0D827D6B1990D6110010B8EF /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
||||
0D827D6C1990D6110010B8EF /* Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Prefix.pch; sourceTree = "<group>"; };
|
||||
0D827D6D1990D6110010B8EF /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
|
||||
0D827D761990F81E0010B8EF /* Shortcut.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Shortcut.h; path = Framework/Shortcut.h; sourceTree = "<group>"; };
|
||||
0D827D761990F81E0010B8EF /* Shortcut.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Shortcut.h; sourceTree = "<group>"; };
|
||||
0D827D8319910AFF0010B8EF /* MASShortcutTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = MASShortcutTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
0D827D8719910AFF0010B8EF /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
||||
0D827D8D19910AFF0010B8EF /* Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Prefix.pch; sourceTree = "<group>"; };
|
||||
0D827D9319910B740010B8EF /* MASShortcutTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MASShortcutTests.m; path = Framework/MASShortcutTests.m; sourceTree = "<group>"; };
|
||||
0D827D9619910FF70010B8EF /* MASKeyCodes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MASKeyCodes.h; path = Framework/MASKeyCodes.h; sourceTree = "<group>"; };
|
||||
0D827D98199110F60010B8EF /* Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Prefix.pch; path = Framework/Prefix.pch; sourceTree = "<group>"; };
|
||||
0D827D9C19911A190010B8EF /* MASShortcutValidator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MASShortcutValidator.h; path = Framework/MASShortcutValidator.h; sourceTree = "<group>"; };
|
||||
0D827D9D19911A190010B8EF /* MASShortcutValidator.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MASShortcutValidator.m; path = Framework/MASShortcutValidator.m; sourceTree = "<group>"; };
|
||||
0D827DA319912D240010B8EF /* MASShortcutMonitor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MASShortcutMonitor.h; path = Framework/MASShortcutMonitor.h; sourceTree = "<group>"; };
|
||||
0D827DA419912D240010B8EF /* MASShortcutMonitor.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MASShortcutMonitor.m; path = Framework/MASShortcutMonitor.m; sourceTree = "<group>"; };
|
||||
0D827DAB199132840010B8EF /* MASShortcutBinder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MASShortcutBinder.h; path = Framework/MASShortcutBinder.h; sourceTree = "<group>"; };
|
||||
0D827DAC199132840010B8EF /* MASShortcutBinder.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MASShortcutBinder.m; path = Framework/MASShortcutBinder.m; sourceTree = "<group>"; };
|
||||
0DA8BCFB1DC37D8000C96EB9 /* MASKeyMasks.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MASKeyMasks.h; path = Framework/MASKeyMasks.h; sourceTree = "<group>"; };
|
||||
0DC2F17419922798003A0131 /* MASHotKey.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MASHotKey.h; path = Framework/MASHotKey.h; sourceTree = "<group>"; };
|
||||
0DC2F17519922798003A0131 /* MASHotKey.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MASHotKey.m; path = Framework/MASHotKey.m; sourceTree = "<group>"; };
|
||||
0DC2F18819925F8F003A0131 /* MASShortcutBinderTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MASShortcutBinderTests.m; path = Framework/MASShortcutBinderTests.m; sourceTree = "<group>"; };
|
||||
0DC2F18B1993708A003A0131 /* MASDictionaryTransformer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MASDictionaryTransformer.h; path = Framework/MASDictionaryTransformer.h; sourceTree = "<group>"; };
|
||||
0DC2F18C1993708A003A0131 /* MASDictionaryTransformer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MASDictionaryTransformer.m; path = Framework/MASDictionaryTransformer.m; sourceTree = "<group>"; };
|
||||
0DC2F18F199372B4003A0131 /* MASDictionaryTransformerTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MASDictionaryTransformerTests.m; path = Framework/MASDictionaryTransformerTests.m; sourceTree = "<group>"; };
|
||||
0DC2F19619938EFA003A0131 /* MASShortcutView+Bindings.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "MASShortcutView+Bindings.h"; path = "Framework/MASShortcutView+Bindings.h"; sourceTree = "<group>"; };
|
||||
0DC2F19719938EFA003A0131 /* MASShortcutView+Bindings.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "MASShortcutView+Bindings.m"; path = "Framework/MASShortcutView+Bindings.m"; sourceTree = "<group>"; };
|
||||
0D827D9319910B740010B8EF /* MASShortcutTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MASShortcutTests.m; sourceTree = "<group>"; };
|
||||
0D827D9619910FF70010B8EF /* MASKeyCodes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MASKeyCodes.h; sourceTree = "<group>"; };
|
||||
0D827D98199110F60010B8EF /* Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Prefix.pch; sourceTree = "<group>"; };
|
||||
0D827D9C19911A190010B8EF /* MASShortcutValidator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MASShortcutValidator.h; sourceTree = "<group>"; };
|
||||
0D827D9D19911A190010B8EF /* MASShortcutValidator.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MASShortcutValidator.m; sourceTree = "<group>"; };
|
||||
0D827DA319912D240010B8EF /* MASShortcutMonitor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MASShortcutMonitor.h; sourceTree = "<group>"; };
|
||||
0D827DA419912D240010B8EF /* MASShortcutMonitor.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MASShortcutMonitor.m; sourceTree = "<group>"; };
|
||||
0D827DAB199132840010B8EF /* MASShortcutBinder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MASShortcutBinder.h; sourceTree = "<group>"; };
|
||||
0D827DAC199132840010B8EF /* MASShortcutBinder.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MASShortcutBinder.m; sourceTree = "<group>"; };
|
||||
0DA8BCFB1DC37D8000C96EB9 /* MASKeyMasks.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MASKeyMasks.h; sourceTree = "<group>"; };
|
||||
0DC2F17419922798003A0131 /* MASHotKey.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MASHotKey.h; sourceTree = "<group>"; };
|
||||
0DC2F17519922798003A0131 /* MASHotKey.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MASHotKey.m; sourceTree = "<group>"; };
|
||||
0DC2F18819925F8F003A0131 /* MASShortcutBinderTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MASShortcutBinderTests.m; sourceTree = "<group>"; };
|
||||
0DC2F18B1993708A003A0131 /* MASDictionaryTransformer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MASDictionaryTransformer.h; sourceTree = "<group>"; };
|
||||
0DC2F18C1993708A003A0131 /* MASDictionaryTransformer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MASDictionaryTransformer.m; sourceTree = "<group>"; };
|
||||
0DC2F18F199372B4003A0131 /* MASDictionaryTransformerTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MASDictionaryTransformerTests.m; sourceTree = "<group>"; };
|
||||
0DC2F19619938EFA003A0131 /* MASShortcutView+Bindings.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "MASShortcutView+Bindings.h"; sourceTree = "<group>"; };
|
||||
0DC2F19719938EFA003A0131 /* MASShortcutView+Bindings.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "MASShortcutView+Bindings.m"; sourceTree = "<group>"; };
|
||||
0DEDAA021C6BB479001605F5 /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/Localizable.strings; sourceTree = "<group>"; };
|
||||
57B25C2D1E78E06D0061A9EC /* pt */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pt; path = pt.lproj/Localizable.strings; sourceTree = "<group>"; };
|
||||
57B25C2E1E78E06D0061A9EC /* pt */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pt; path = pt.lproj/Localizable.strings; sourceTree = "<group>"; };
|
||||
6EA6034E1CBF822000A3ED9C /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/Localizable.strings; sourceTree = "<group>"; };
|
||||
6EA6034F1CBF822800A3ED9C /* ko */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ko; path = ko.lproj/Localizable.strings; sourceTree = "<group>"; };
|
||||
6EA603501CBF822D00A3ED9C /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/Localizable.strings; sourceTree = "<group>"; };
|
||||
6EA603511CBF823600A3ED9C /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nl; path = nl.lproj/Localizable.strings; sourceTree = "<group>"; };
|
||||
76A0597D1C51DC940014B271 /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/Localizable.strings"; sourceTree = "<group>"; };
|
||||
76A0597E1C51DC9F0014B271 /* zh-Hant */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hant"; path = "zh-Hant.lproj/Localizable.strings"; sourceTree = "<group>"; };
|
||||
EAFFDC811AACFF3300F38834 /* MASShortcut.modulemap */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = "sourcecode.module-map"; name = MASShortcut.modulemap; path = Framework/MASShortcut.modulemap; sourceTree = "<group>"; };
|
||||
EAFFDC811AACFF3300F38834 /* MASShortcut.modulemap */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = "sourcecode.module-map"; path = MASShortcut.modulemap; sourceTree = "<group>"; };
|
||||
ED8737791BCE459800BB1716 /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = ja.lproj/Localizable.strings; sourceTree = "<group>"; };
|
||||
FDFF016F20CB2FB400CC88F3 /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = sv.lproj/Localizable.strings; sourceTree = "<group>"; };
|
||||
/* End PBXFileReference section */
|
||||
|
||||
/* Begin PBXFrameworksBuildPhase section */
|
||||
@@ -167,8 +170,9 @@
|
||||
0D827CC91990D4420010B8EF = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
0D827D151990D4D70010B8EF /* Framework */,
|
||||
0DBA0B9E22A4FAC5008685CD /* Framework */,
|
||||
0D827D8519910AFF0010B8EF /* Test Support */,
|
||||
0DBA0B9C22A4F88C008685CD /* Resources */,
|
||||
0D827D681990D6110010B8EF /* Demo */,
|
||||
0D827CD51990D4420010B8EF /* Frameworks */,
|
||||
0D827CD41990D4420010B8EF /* Products */,
|
||||
@@ -196,22 +200,6 @@
|
||||
name = Frameworks;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
0D827D151990D4D70010B8EF /* Framework */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
0D827DA019912A660010B8EF /* Model */,
|
||||
0D827DA219912A870010B8EF /* Monitoring */,
|
||||
0DC2F18A19937060003A0131 /* User Defaults Storage */,
|
||||
0D827DA119912A6D0010B8EF /* UI */,
|
||||
0D827D2F1990D5640010B8EF /* Info.plist */,
|
||||
EAFFDC811AACFF3300F38834 /* MASShortcut.modulemap */,
|
||||
0D2CAB151B8332E5005431FC /* Localizable.strings */,
|
||||
0D827D98199110F60010B8EF /* Prefix.pch */,
|
||||
0D827D761990F81E0010B8EF /* Shortcut.h */,
|
||||
);
|
||||
name = Framework;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
0D827D681990D6110010B8EF /* Demo */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
@@ -236,7 +224,30 @@
|
||||
path = Tests;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
0D827DA019912A660010B8EF /* Model */ = {
|
||||
0DBA0B9C22A4F88C008685CD /* Resources */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
0D2CAB151B8332E5005431FC /* Localizable.strings */,
|
||||
);
|
||||
path = Resources;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
0DBA0B9E22A4FAC5008685CD /* Framework */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
0DBA0B9F22A4FACE008685CD /* Model */,
|
||||
0DBA0BA022A4FAE0008685CD /* Monitoring */,
|
||||
0DBA0BA122A4FAF6008685CD /* User Defaults Storage */,
|
||||
0DBA0BA222A4FB15008685CD /* UI */,
|
||||
0D827D2F1990D5640010B8EF /* Info.plist */,
|
||||
EAFFDC811AACFF3300F38834 /* MASShortcut.modulemap */,
|
||||
0D827D98199110F60010B8EF /* Prefix.pch */,
|
||||
0D827D761990F81E0010B8EF /* Shortcut.h */,
|
||||
);
|
||||
path = Framework;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
0DBA0B9F22A4FACE008685CD /* Model */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
0DA8BCFB1DC37D8000C96EB9 /* MASKeyMasks.h */,
|
||||
@@ -247,23 +258,10 @@
|
||||
0D827D9C19911A190010B8EF /* MASShortcutValidator.h */,
|
||||
0D827D9D19911A190010B8EF /* MASShortcutValidator.m */,
|
||||
);
|
||||
name = Model;
|
||||
path = Model;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
0D827DA119912A6D0010B8EF /* UI */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
0D2CAB171B8339F4005431FC /* MASLocalization.h */,
|
||||
0D2CAB181B8339F4005431FC /* MASLocalization.m */,
|
||||
0D827D211990D55E0010B8EF /* MASShortcutView.h */,
|
||||
0D827D221990D55E0010B8EF /* MASShortcutView.m */,
|
||||
0DC2F19619938EFA003A0131 /* MASShortcutView+Bindings.h */,
|
||||
0DC2F19719938EFA003A0131 /* MASShortcutView+Bindings.m */,
|
||||
);
|
||||
name = UI;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
0D827DA219912A870010B8EF /* Monitoring */ = {
|
||||
0DBA0BA022A4FAE0008685CD /* Monitoring */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
0DC2F17419922798003A0131 /* MASHotKey.h */,
|
||||
@@ -273,10 +271,10 @@
|
||||
0D827DA419912D240010B8EF /* MASShortcutMonitor.m */,
|
||||
0D39DCA31A668E5500639145 /* MASShortcutMonitorTests.m */,
|
||||
);
|
||||
name = Monitoring;
|
||||
path = Monitoring;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
0DC2F18A19937060003A0131 /* User Defaults Storage */ = {
|
||||
0DBA0BA122A4FAF6008685CD /* User Defaults Storage */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
0DC2F18B1993708A003A0131 /* MASDictionaryTransformer.h */,
|
||||
@@ -286,7 +284,20 @@
|
||||
0D827DAC199132840010B8EF /* MASShortcutBinder.m */,
|
||||
0DC2F18819925F8F003A0131 /* MASShortcutBinderTests.m */,
|
||||
);
|
||||
name = "User Defaults Storage";
|
||||
path = "User Defaults Storage";
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
0DBA0BA222A4FB15008685CD /* UI */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
0D2CAB171B8339F4005431FC /* MASLocalization.h */,
|
||||
0D2CAB181B8339F4005431FC /* MASLocalization.m */,
|
||||
0D827D211990D55E0010B8EF /* MASShortcutView.h */,
|
||||
0D827D221990D55E0010B8EF /* MASShortcutView.m */,
|
||||
0DC2F19619938EFA003A0131 /* MASShortcutView+Bindings.h */,
|
||||
0DC2F19719938EFA003A0131 /* MASShortcutView+Bindings.m */,
|
||||
);
|
||||
path = UI;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
/* End PBXGroup section */
|
||||
@@ -375,7 +386,7 @@
|
||||
0D827CCA1990D4420010B8EF /* Project object */ = {
|
||||
isa = PBXProject;
|
||||
attributes = {
|
||||
LastUpgradeCheck = 0800;
|
||||
LastUpgradeCheck = 1010;
|
||||
ORGANIZATIONNAME = "Vadim Shpakovski";
|
||||
TargetAttributes = {
|
||||
0D827D8219910AFF0010B8EF = {
|
||||
@@ -388,6 +399,7 @@
|
||||
developmentRegion = English;
|
||||
hasScannedForEncodings = 0;
|
||||
knownRegions = (
|
||||
English,
|
||||
en,
|
||||
cs,
|
||||
de,
|
||||
@@ -401,6 +413,8 @@
|
||||
ko,
|
||||
ru,
|
||||
nl,
|
||||
pt,
|
||||
sv,
|
||||
);
|
||||
mainGroup = 0D827CC91990D4420010B8EF;
|
||||
productRefGroup = 0D827CD41990D4420010B8EF /* Products */;
|
||||
@@ -506,6 +520,8 @@
|
||||
6EA6034F1CBF822800A3ED9C /* ko */,
|
||||
6EA603501CBF822D00A3ED9C /* ru */,
|
||||
6EA603511CBF823600A3ED9C /* nl */,
|
||||
57B25C2D1E78E06D0061A9EC /* pt */,
|
||||
FDFF016F20CB2FB400CC88F3 /* sv */,
|
||||
);
|
||||
name = Localizable.strings;
|
||||
sourceTree = "<group>";
|
||||
@@ -526,6 +542,7 @@
|
||||
0D2CAB241B834467005431FC /* cs */,
|
||||
ED8737791BCE459800BB1716 /* ja */,
|
||||
0DEDAA021C6BB479001605F5 /* de */,
|
||||
57B25C2E1E78E06D0061A9EC /* pt */,
|
||||
);
|
||||
name = Localizable.strings;
|
||||
sourceTree = "<group>";
|
||||
@@ -542,14 +559,22 @@
|
||||
CLANG_CXX_LIBRARY = "libc++";
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CLANG_ENABLE_OBJC_ARC = YES;
|
||||
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
|
||||
CLANG_WARN_BOOL_CONVERSION = YES;
|
||||
CLANG_WARN_COMMA = YES;
|
||||
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
||||
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
|
||||
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
||||
CLANG_WARN_EMPTY_BODY = YES;
|
||||
CLANG_WARN_ENUM_CONVERSION = YES;
|
||||
CLANG_WARN_INFINITE_RECURSION = YES;
|
||||
CLANG_WARN_INT_CONVERSION = YES;
|
||||
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
|
||||
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
||||
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
||||
CLANG_WARN_STRICT_PROTOTYPES = YES;
|
||||
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
||||
CLANG_WARN_UNREACHABLE_CODE = YES;
|
||||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||
@@ -573,7 +598,7 @@
|
||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
MACOSX_DEPLOYMENT_TARGET = 10.9;
|
||||
MACOSX_DEPLOYMENT_TARGET = 10.10;
|
||||
ONLY_ACTIVE_ARCH = YES;
|
||||
SDKROOT = macosx;
|
||||
};
|
||||
@@ -588,14 +613,22 @@
|
||||
CLANG_CXX_LIBRARY = "libc++";
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CLANG_ENABLE_OBJC_ARC = YES;
|
||||
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
|
||||
CLANG_WARN_BOOL_CONVERSION = YES;
|
||||
CLANG_WARN_COMMA = YES;
|
||||
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
||||
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
|
||||
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
||||
CLANG_WARN_EMPTY_BODY = YES;
|
||||
CLANG_WARN_ENUM_CONVERSION = YES;
|
||||
CLANG_WARN_INFINITE_RECURSION = YES;
|
||||
CLANG_WARN_INT_CONVERSION = YES;
|
||||
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
|
||||
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
||||
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
||||
CLANG_WARN_STRICT_PROTOTYPES = YES;
|
||||
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
||||
CLANG_WARN_UNREACHABLE_CODE = YES;
|
||||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||
@@ -613,7 +646,7 @@
|
||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
MACOSX_DEPLOYMENT_TARGET = 10.9;
|
||||
MACOSX_DEPLOYMENT_TARGET = 10.10;
|
||||
SDKROOT = macosx;
|
||||
};
|
||||
name = Release;
|
||||
@@ -621,16 +654,17 @@
|
||||
0D827CFC1990D4420010B8EF /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
APPLICATION_EXTENSION_API_ONLY = YES;
|
||||
COMBINE_HIDPI_IMAGES = YES;
|
||||
DEFINES_MODULE = YES;
|
||||
DYLIB_COMPATIBILITY_VERSION = 1;
|
||||
DYLIB_CURRENT_VERSION = 1;
|
||||
DYLIB_CURRENT_VERSION = 2.4.0;
|
||||
DYLIB_INSTALL_NAME_BASE = "@rpath";
|
||||
FRAMEWORK_VERSION = A;
|
||||
GCC_PRECOMPILE_PREFIX_HEADER = YES;
|
||||
GCC_PREFIX_HEADER = Framework/Prefix.pch;
|
||||
INFOPLIST_FILE = Framework/Info.plist;
|
||||
INSTALL_PATH = "@executable_path/../Frameworks";
|
||||
MACOSX_DEPLOYMENT_TARGET = 10.6;
|
||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks";
|
||||
MODULEMAP_FILE = Framework/MASShortcut.modulemap;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = "com.github.shpakovski.${PRODUCT_NAME:rfc1034identifier}";
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
@@ -642,16 +676,17 @@
|
||||
0D827CFD1990D4420010B8EF /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
APPLICATION_EXTENSION_API_ONLY = YES;
|
||||
COMBINE_HIDPI_IMAGES = YES;
|
||||
DEFINES_MODULE = YES;
|
||||
DYLIB_COMPATIBILITY_VERSION = 1;
|
||||
DYLIB_CURRENT_VERSION = 1;
|
||||
DYLIB_CURRENT_VERSION = 2.4.0;
|
||||
DYLIB_INSTALL_NAME_BASE = "@rpath";
|
||||
FRAMEWORK_VERSION = A;
|
||||
GCC_PRECOMPILE_PREFIX_HEADER = YES;
|
||||
GCC_PREFIX_HEADER = Framework/Prefix.pch;
|
||||
INFOPLIST_FILE = Framework/Info.plist;
|
||||
INSTALL_PATH = "@executable_path/../Frameworks";
|
||||
MACOSX_DEPLOYMENT_TARGET = 10.6;
|
||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks";
|
||||
MODULEMAP_FILE = Framework/MASShortcut.modulemap;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = "com.github.shpakovski.${PRODUCT_NAME:rfc1034identifier}";
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
@@ -672,7 +707,7 @@
|
||||
"$(inherited)",
|
||||
);
|
||||
INFOPLIST_FILE = Demo/Info.plist;
|
||||
MACOSX_DEPLOYMENT_TARGET = 10.6;
|
||||
MACOSX_DEPLOYMENT_TARGET = 10.11;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = "com.shpakovski.mac.${PRODUCT_NAME:rfc1034identifier}";
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
WRAPPER_EXTENSION = app;
|
||||
@@ -687,7 +722,7 @@
|
||||
GCC_PRECOMPILE_PREFIX_HEADER = YES;
|
||||
GCC_PREFIX_HEADER = Demo/Prefix.pch;
|
||||
INFOPLIST_FILE = Demo/Info.plist;
|
||||
MACOSX_DEPLOYMENT_TARGET = 10.6;
|
||||
MACOSX_DEPLOYMENT_TARGET = 10.11;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = "com.shpakovski.mac.${PRODUCT_NAME:rfc1034identifier}";
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
WRAPPER_EXTENSION = app;
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Scheme
|
||||
LastUpgradeVersion = "0800"
|
||||
LastUpgradeVersion = "1010"
|
||||
version = "1.3">
|
||||
<BuildAction
|
||||
parallelizeBuildables = "YES"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Scheme
|
||||
LastUpgradeVersion = "0800"
|
||||
LastUpgradeVersion = "1010"
|
||||
version = "1.3">
|
||||
<BuildAction
|
||||
parallelizeBuildables = "YES"
|
||||
|
||||
@@ -17,7 +17,7 @@ Features:
|
||||
* Can be configured to be compatible with Shortcut Recorder
|
||||
* Can be installed both through CocoaPods and as a Git submodule
|
||||
* Mac App Store friendly
|
||||
* Works on OS X 10.6 and up
|
||||
* Works on OS X 10.10 and up
|
||||
* Hacking-friendly codebase covered with tests
|
||||
|
||||
Partially done:
|
||||
|
||||
@@ -0,0 +1,47 @@
|
||||
/* Cancel action button in recording state */
|
||||
"Cancel" = "Cancelar";
|
||||
|
||||
/* Tooltip for non-empty shortcut button */
|
||||
"Click to record new shortcut" ="Clique para gravar o atalho";
|
||||
|
||||
/* Tooltip for hint button near the non-empty shortcut */
|
||||
"Delete shortcut" = "Apagar atalho";
|
||||
|
||||
/* VoiceOver title */
|
||||
"keyboard shortcut" = "atalho de teclado";
|
||||
|
||||
/* Alert button when shortcut is already used */
|
||||
"OK" = "OK";
|
||||
|
||||
/* Empty shortcut button in normal state */
|
||||
"Record Shortcut" = "Gravar Atalho";
|
||||
|
||||
/* VoiceOver: Shortcut cleared */
|
||||
"Shortcut cleared" = "Atalho limpo";
|
||||
|
||||
/* VoiceOver: Shortcut set */
|
||||
"Shortcut set" = "Atalho definido";
|
||||
|
||||
/* Shortcut glyph name for SPACE key */
|
||||
"Space" = "Espaço";
|
||||
|
||||
/* Title for alert when shortcut is already used */
|
||||
"The key combination %@ cannot be used" = "A combinação de teclas “%@” não pode ser usada";
|
||||
|
||||
/* Message for alert when shortcut is already used by the system */
|
||||
"This combination cannot be used because it is already used by a system-wide keyboard shortcut.\nIf you really want to use this key combination, most shortcuts can be changed in the Keyboard & Mouse panel in System Preferences." = "Esta combinação não pode ser usada porque ela já é usada por um atalho global do sistema.\nA maioria dos atalhos pode ser alterada no painel Teclado das Preferências do Sistema, caso realmente deseje usar esta combinação.";
|
||||
|
||||
/* Message for alert when shortcut is already used */
|
||||
"This shortcut cannot be used because it is already used by the menu item ‘%@’." = "Este atalho não pode ser usado porque ele já é usado pelo item de menu “%@”.";
|
||||
|
||||
/* VoiceOver shortcut help */
|
||||
"To record a new shortcut, click this button, and then type the new shortcut, or press delete to clear an existing shortcut." = "Para gravar um atalho novo, clique neste botão e digite o novo atalho ou pressione apagar para limpar um atalho existente.";
|
||||
|
||||
/* Non-empty shortcut button in recording state */
|
||||
"Type New Shortcut" = "Digite o atalho";
|
||||
|
||||
/* Empty shortcut button in recording state */
|
||||
"Type Shortcut" = "Digite o atalho";
|
||||
|
||||
/* Cancel action button for non-empty shortcut in recording state */
|
||||
"Use Old Shortcut" = "Usar atalho antigo";
|
||||
@@ -0,0 +1,47 @@
|
||||
/* Cancel action button in recording state */
|
||||
"Cancel" = "Avbryt";
|
||||
|
||||
/* Tooltip for non-empty shortcut button */
|
||||
"Click to record new shortcut" = "Klicka för att registrera ny kortkommando";
|
||||
|
||||
/* Tooltip for hint button near the non-empty shortcut */
|
||||
"Delete shortcut" = "Ta bort en kortkommando";
|
||||
|
||||
/* VoiceOver title */
|
||||
"keyboard shortcut" = "Tangentbordskortkommando";
|
||||
|
||||
/* Alert button when shortcut is already used */
|
||||
"OK" = "OK";
|
||||
|
||||
/* Empty shortcut button in normal state */
|
||||
"Record Shortcut" = "Registrera kortkommando";
|
||||
|
||||
/* VoiceOver: Shortcut cleared */
|
||||
"Shortcut cleared" = "Kortkommando rensas";
|
||||
|
||||
/* VoiceOver: Shortcut set */
|
||||
"Shortcut set" = "Kortkommando uppsättning";
|
||||
|
||||
/* Shortcut glyph name for SPACE key */
|
||||
"Space" = "Utrymme";
|
||||
|
||||
/* Title for alert when shortcut is already used */
|
||||
"The key combination %@ cannot be used" = "Tangentkombinationen %@ kan inte användas";
|
||||
|
||||
/* Message for alert when shortcut is already used by the system */
|
||||
"This combination cannot be used because it is already used by a system-wide keyboard shortcut.\nIf you really want to use this key combination, most shortcuts can be changed in the Keyboard & Mouse panel in System Preferences." = "Den här kombinationen kan inte användas eftersom den redan används som en tangentbordskortkommando. Om du verkligen vill använda den här tangentkombinationen kan de flesta genvägar ändras under Tangentbord & Mus i Systeminställningar.";
|
||||
|
||||
/* Message for alert when shortcut is already used */
|
||||
"This shortcut cannot be used because it is already used by the menu item ‘%@’." = "Denna kortkommando kan inte användas eftersom det redan används av ett menyalternativ ‘%@’.";
|
||||
|
||||
/* VoiceOver shortcut help */
|
||||
"To record a new shortcut, click this button, and then type the new shortcut, or press delete to clear an existing shortcut." = "För att registrera en ny kortkommando, klicka på den här knappen och skriv sedan in den nya kortkommando, eller tryck på radera för att rensa en befintlig kortkommando.";
|
||||
|
||||
/* Non-empty shortcut button in recording state */
|
||||
"Type New Shortcut" = "Skriv Ny Kortkommando";
|
||||
|
||||
/* Empty shortcut button in recording state */
|
||||
"Type Shortcut" = "Skriv Kortkommando";
|
||||
|
||||
/* Cancel action button for non-empty shortcut in recording state */
|
||||
"Use Old Shortcut" = "Använd Gammal Kortkommando";
|
||||
+2
-2
@@ -13,10 +13,10 @@
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>BNDL</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>1.0</string>
|
||||
<string>2.4.0</string>
|
||||
<key>CFBundleSignature</key>
|
||||
<string>????</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>1</string>
|
||||
<string>2.4.0</string>
|
||||
</dict>
|
||||
</plist>
|
||||
|
||||
Reference in New Issue
Block a user