From 96ac6cd7b2712ee1771863002883e866de760b38 Mon Sep 17 00:00:00 2001 From: skandocious Date: Thu, 7 Oct 2010 13:25:52 -0700 Subject: [PATCH 1/3] Revamped code to utilize ShortcutRecorder. Reflected changes in README.md --- README.md | 52 +- ShiftIt/PrefWindow.xib | 1581 ++++++++++++--------- ShiftIt/PrefWindowController.h | 59 +- ShiftIt/PrefWindowController.m | 226 +-- ShiftIt/Preferences.h | 2 +- ShiftIt/Preferences.m | 12 +- ShiftIt/ShiftIt-Info.plist | 4 +- ShiftIt/ShiftIt.xcodeproj/project.pbxproj | 19 + ShiftIt/ShiftItAppDelegate.h | 2 +- ShiftIt/ShiftItAppDelegate.m | 50 +- 10 files changed, 1062 insertions(+), 945 deletions(-) diff --git a/README.md b/README.md index 4c4a515e..902a630f 100644 --- a/README.md +++ b/README.md @@ -1,29 +1,69 @@

ShiftIt

-*Managing windows size and position in OSX* +*Managing window size and position in OSX* Overview -------- -ShiftIt is an application for OSX that allows you to quickly manipulate window's position and size using a predefined ket keys. +ShiftIt is an application for OSX that allows you to quickly manipulate window position and size using keyboard shortcuts. This is a fork from the original [ShiftIt][2] by [Aravindkumar Rajendiran][3] which is not longer under development. License: [GNU General Public License v3][4] -The idea is to add just a few features that are currently missing like keyboard configuration, menu icon, etc., make it a solid production ready app. -Actually menu icon is done - thanks to free icons available at [mysitemyway][5] +Changes since initial fork: +--------------------------- + +v1.3: +Added application & status menu icons - thanks to free icons available at [mysitemyway][5] - credit: fikovnik +Added ability to reconfigure hotkeys in Preferences - credit: Skandocious + +v1.4: +Large code revamp to utilize ShortcutRecorder framework[8] capturing key bindings + + +ShortcutRecorder +---------------- + +Version 1.4 of ShiftIt employs the ShortcutRecorder framework for capturing key bindings during hotkey reconfiguration. + +Copyright (c) 2006, contributors to ShortcutRecorder. (See the contributors listed in detail later in the file, or see .) + +All rights reserved. +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + * The name of the contributors may not be used to endorse or promote + products derived from this software without specific prior written + permission. + +THIS SOFTWARE IS PROVIDED BY THE CONTRIBUTORS "AS IS" AND ANY +EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. Related Work ------------ -There is a feature full comertial application called [SizeUp][6] that I guess was an inspiration for the original ShitIt. If you are looking for a ready application with lot of features, [SizeUp][7] is way to go. +There is a feature full commerical application called [SizeUp][6] that seems to be an inspiration for the original ShiftIt. If you are looking for a full-featured, paid application similar to ShiftIt then [SizeUp][7] is way to go. [2]: http://code.google.com/p/shiftit/ [3]: http://ca.linkedin.com/in/aravind88 [4]: http://www.gnu.org/licenses/gpl.html [5]: http://icons.mysitemyway.com/free-clipart-icons/1/stick-shift-vehicle-icon--id/128009/style-id/924/simple-black-square-icons/transport-travel/ [6]: http://www.irradiatedsoftware.com/sizeup/ - [7]: http://www.irradiatedsoftware.com/sizeup/ \ No newline at end of file + [7]: http://www.irradiatedsoftware.com/sizeup/ + [8]: http://code.google.com/p/shortcutrecorder/ diff --git a/ShiftIt/PrefWindow.xib b/ShiftIt/PrefWindow.xib index 0c5fd54d..f8f6b0eb 100644 --- a/ShiftIt/PrefWindow.xib +++ b/ShiftIt/PrefWindow.xib @@ -7,16 +7,26 @@ 1038.29 461.00 - com.apple.InterfaceBuilder.CocoaPlugin - 788 + YES + + YES + com.apple.InterfaceBuilder.CocoaPlugin + net.wafflesoftware.ShortcutRecorder.IB.Leopard + + + YES + 788 + 1 + YES - + YES com.apple.InterfaceBuilder.CocoaPlugin + net.wafflesoftware.ShortcutRecorder.IB.Leopard YES @@ -41,7 +51,7 @@ 3 2 - {{196, 182}, {303, 328}} + {{488, 216}, {304, 328}} 544735232 Preferences NSWindow @@ -55,21 +65,21 @@ 12 - {{13, 10}, {277, 312}} + {{13, 11}, {277, 311}} YES 2 - + 256 YES 268 - {{16, 143}, {113, 18}} + {{16, 142}, {113, 18}} YES @@ -100,7 +110,7 @@ 268 - {{16, 117}, {225, 18}} + {{16, 116}, {225, 18}} YES @@ -122,7 +132,7 @@ 268 - {{35, 71}, {186, 32}} + {{35, 70}, {186, 32}} YES @@ -142,7 +152,7 @@ 268 - {{16, 170}, {165, 18}} + {{16, 169}, {165, 18}} YES @@ -161,53 +171,35 @@ 25 - - {{10, 33}, {257, 266}} - - General - - 6 - System - controlColor - - 3 - MC42NjY2NjY2NjY3AA - - - - - - Item 1 - - - 256 - - YES - - + + 268 - {{140, 180}, {78, 22}} - + {{91, 233}, {73, 29}} + YES - - -2079195584 - 71308288 - top_hotkey - - - + + 68288064 + 272630784 + ShiftIt + + LucidaGrande + 24 + 16 + + + 6 System - textBackgroundColor - + controlColor + 3 - MQA + MC42NjY2NjY2NjY3AA - + 6 System - textColor + controlTextColor 3 MAA @@ -215,348 +207,430 @@ - - + + 268 - {{140, 156}, {78, 22}} - + {{91, 221}, {73, 17}} + YES - - -2079195584 - 71308288 - bot_hotkey + + 68288064 + 138413056 + version - - - + + + - + + {{10, 33}, {257, 265}} + + + General + + + + + Item 1 + + + 256 + + YES + + + 298 + {{99, 240}, {147, 22}} + + YES + + 130560 + 0 + + + + + + + + + + + + + + + 298 + {{99, 216}, {147, 22}} + + YES + + 130560 + 0 + + + + + + + + + + + + + + + 298 + {{99, 192}, {147, 22}} + + YES + + 130560 + 0 + + + + + + + + + + + + + + + 298 + {{99, 168}, {147, 22}} + + YES + + 130560 + 0 + + + + + + + + + + + + + 268 - {{140, 228}, {78, 22}} + {{28, 242}, {65, 17}} YES - - -2079195584 - 71308288 - left_hotkey + + 68288064 + 71304192 + Left - - - + + + - + 268 - {{140, 204}, {78, 22}} + {{29, 218}, {65, 17}} YES - - -2079195584 - 71308288 - rght_hotkey + + 68288064 + 71304192 + Right - - - + + + - + 268 - {{140, 84}, {78, 22}} + {{29, 194}, {65, 17}} YES - - -2079195584 - 71308288 - BL_hotkey + + 68288064 + 71304192 + Top - - - + + + - + 268 - {{140, 60}, {78, 22}} + {{29, 170}, {65, 17}} YES - - -2079195584 - 71308288 - BR_hotkey + + 68288064 + 71304192 + Bottom - - - + + + + + + + + 298 + {{99, 138}, {147, 22}} + + YES + + 130560 + 0 + + + + + + + + + + + + + + + 298 + {{99, 114}, {147, 22}} + + YES + + 130560 + 0 + + + + + + + + + + + + + + + 298 + {{99, 90}, {147, 22}} + + YES + + 130560 + 0 + + + + + + + + + + + + + + + 298 + {{99, 66}, {147, 22}} + + YES + + 130560 + 0 + + + + + + + + + + - + 268 - {{140, 36}, {78, 22}} + {{28, 140}, {65, 17}} YES - - -2079195584 - 71308288 - FS_hotkey + + 68288064 + 71304192 + Top Left - - - + + + - + 268 - {{140, 12}, {78, 22}} + {{28, 116}, {66, 17}} YES - - -2079195584 - 71308288 - cnt_hotkey + + 68288064 + 71304192 + Top Right - - - + + + - + 268 - {{140, 108}, {78, 22}} + {{16, 92}, {78, 17}} YES - - -2079195584 - 71308288 - TR_hotkey + + 68288064 + 71304192 + Bottom Left - - - + + + - + 268 - {{140, 132}, {78, 22}} + {{7, 68}, {87, 17}} YES - - -2079195584 - 71308288 - TL_hotkey + + 68288064 + 71304192 + Bottom Right - - - + + + - + - 268 - {{41, 16}, {94, 238}} + 298 + {{99, 36}, {147, 22}} YES - 10 - 1 - - YES - - 67239424 - 134348800 - Left - - LucidaGrande - 12 - 16 - - - 1 - -2034876161 - 2 - - - - 200 - 25 - - - 67239424 - 134348800 - Right - - - -2034876161 - 2 - - 400 - 75 - - - 67239424 - 134348800 - Top - - - -2035007233 - 2 - 400 - 75 - - - -2080244224 - 134348800 - Bottom - - - -2035007233 - 2 - 400 - 75 - - - 67239424 - 134348800 - Top Left - - - -2035007233 - 2 - 400 - 75 - - - 67239424 - 134348800 - Top Right - - - -2035007233 - 2 - 400 - 75 - - - 67239424 - 134348800 - Bottom Left - - - -2035007233 - 2 - 400 - 75 - - - 67239424 - 134348800 - Bottom Right - - LucidaGrande - 11 - 16 - - - -2035007233 - 2 - 400 - 75 - - - 67239424 - 134348800 - Full Screen - - - -2035007233 - 2 - 400 - 75 - - - 67239424 - 134348800 - Center - - - -2035007233 - 2 - 400 - 75 - + + 130560 + 0 + + + + + + + + + + - {94, 22} - {4, 2} - 1084760064 - NSActionCell - - 67239424 - 134217728 - Radio + + + + 298 + {{99, 12}, {147, 22}} + + YES + + 130560 + 0 + + + + + + + + + + + + + + + 268 + {{20, 38}, {73, 17}} + + YES + + 68288064 + 71304192 + Full Screen - -2035007233 - 2 - 400 - 75 + + + - 3 - - - - - + 268 - {{63, -3}, {130, 18}} + {{29, 14}, {65, 17}} YES - - 67239424 - 134217728 - Esc to Cancel - - - -2046639873 - 129 - - Gw - 200 - 25 + + 68288064 + 71304192 + Center + + + + - {{10, 33}, {257, 266}} - + {{10, 33}, {257, 265}} Hotkeys - + 0 YES YES YES - + - {303, 328} + {304, 328} - {{0, 0}, {1680, 1028}} + {{0, 0}, {1280, 778}} {1.79769e+308, 1.79769e+308} @@ -682,116 +756,172 @@ 327 - - changeHotkey: + + leftRecorderCtrl - + - 495 + 530 - blField + rightRecorderCtrl - + - 496 + 531 - bottomField + topRecorderCtrl - + - 497 + 532 - brField + bottomRecorderCtrl - + - 498 + 533 - centerField + blRecorderCtrl - + - 499 + 566 - fullScreenField + brRecorderCtrl - + - 500 + 567 - hotKeyButtonMatrix + centerRecorderCtrl - + - 501 + 568 - leftField + fullScreenRecorderCtrl - + - 502 + 569 - rightField + tlRecorderCtrl - + - 503 + 570 - tlField + trRecorderCtrl - + - 504 + 571 - topField - - + delegate + + - 505 + 572 - trField - - + delegate + + - 506 + 573 - - cancelHotkey: - - + + delegate + + + + 574 + + + + delegate + + + + 575 + + + + delegate + + + + 576 + + + + delegate + + + + 577 + + + + delegate + + + + 578 + + + + delegate + + - 511 + 579 - cancelHotkeyButton + delegate + + + + 580 + + + + delegate + + + + 581 + + + + versionLabel - + - 512 + 586 @@ -839,359 +969,449 @@ + + 69 + + + + + 191 + + + 3 YES - + - 5 - + 394 + YES - + - 6 - + 395 + YES - - - - + + + + + + + + + + + + + + + + + + + + - + - 62 - + 541 + YES - + - + - 63 - - + 542 + + - 64 - + 540 + YES - + - + - 65 - - + 543 + + - 66 - + 539 + YES - + - + - 67 - - + 544 + + - 69 - - - - - 191 - - - - - 256 - + 538 + YES - + - + - 257 - - + 545 + + - 394 - + 537 + YES - + - + - 395 - - - YES - - - - - - - - - - - - - - + 546 + + - 463 - + 536 + YES - + - 464 - + 547 + + + + + 535 + YES - + - 465 - + 548 + + + + + 534 + YES - + - 466 - + 549 + + + + + 513 + YES - + - 467 - + 526 + + + + + 514 + YES - + - 468 - + 527 + + + + + 515 + YES - + - 469 - + 528 + + + + + 516 + YES - + - 470 - + 529 + + + + + 517 + YES - + - 471 - + 518 + + + + + 519 + YES - + - 472 - + 520 + + + + + 521 + YES - + - 473 - + 524 + + + + + 522 + YES - - - - - - - - - - - + - 474 - - + 523 + + - 475 - - + 5 + + + YES + + + - 476 - - + 6 + + + YES + + + + + + + + - 477 - - + 256 + + + YES + + + - 478 - - + 257 + + - 479 - - + 66 + + + YES + + + - 480 - - + 67 + + - 481 - - + 64 + + + YES + + + - 482 - - + 65 + + - 483 - - + 62 + + + YES + + + - 484 - - + 63 + + - 485 - - + 550 + + + YES + + + - 486 - - + 565 + + - 487 - - + 551 + + + YES + + + - 488 - - + 564 + + - 489 - - + 554 + + + YES + + + - 490 - - + 561 + + - 491 - - + 555 + + + YES + + + - 492 - - + 560 + + - 493 - - + 582 + + + YES + + + - 494 - - + 583 + + - 509 - + 584 + YES - + - + - 510 - - + 585 + + @@ -1209,33 +1429,41 @@ 256.IBPluginDependency 257.IBPluginDependency 3.IBPluginDependency - 463.IBPluginDependency - 464.IBPluginDependency - 465.IBPluginDependency - 466.IBPluginDependency - 467.IBPluginDependency - 468.IBPluginDependency - 469.IBPluginDependency - 470.IBPluginDependency - 471.IBPluginDependency - 472.IBPluginDependency - 473.IBPluginDependency - 474.IBPluginDependency - 475.IBPluginDependency - 476.IBPluginDependency - 485.IBPluginDependency - 486.IBPluginDependency - 487.IBPluginDependency - 488.IBPluginDependency - 489.IBPluginDependency - 490.IBPluginDependency - 491.IBPluginDependency - 492.IBPluginDependency - 493.IBPluginDependency - 494.IBPluginDependency 5.IBPluginDependency - 509.IBPluginDependency - 510.IBPluginDependency + 513.IBPluginDependency + 514.IBPluginDependency + 515.IBPluginDependency + 516.IBPluginDependency + 517.IBPluginDependency + 518.IBPluginDependency + 519.IBPluginDependency + 520.IBPluginDependency + 521.IBPluginDependency + 522.IBPluginDependency + 523.IBPluginDependency + 524.IBPluginDependency + 534.IBPluginDependency + 535.IBPluginDependency + 536.IBPluginDependency + 537.IBPluginDependency + 538.IBPluginDependency + 539.IBPluginDependency + 540.IBPluginDependency + 541.IBPluginDependency + 542.IBPluginDependency + 543.IBPluginDependency + 544.IBPluginDependency + 545.IBPluginDependency + 550.IBPluginDependency + 551.IBPluginDependency + 554.IBPluginDependency + 555.IBPluginDependency + 560.IBPluginDependency + 561.IBPluginDependency + 582.IBPluginDependency + 583.IBPluginDependency + 584.IBPluginDependency + 585.IBPluginDependency 6.IBPluginDependency 62.IBPluginDependency 63.IBPluginDependency @@ -1247,9 +1475,9 @@ YES - {{235, 394}, {303, 328}} + {{270, 332}, {304, 328}} com.apple.InterfaceBuilder.CocoaPlugin - {{235, 394}, {303, 328}} + {{270, 332}, {304, 328}} {196, 240} {{202, 428}, {480, 270}} @@ -1258,6 +1486,10 @@ com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin + net.wafflesoftware.ShortcutRecorder.IB.Leopard + net.wafflesoftware.ShortcutRecorder.IB.Leopard + net.wafflesoftware.ShortcutRecorder.IB.Leopard + net.wafflesoftware.ShortcutRecorder.IB.Leopard com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -1266,6 +1498,10 @@ com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin + net.wafflesoftware.ShortcutRecorder.IB.Leopard + net.wafflesoftware.ShortcutRecorder.IB.Leopard + net.wafflesoftware.ShortcutRecorder.IB.Leopard + net.wafflesoftware.ShortcutRecorder.IB.Leopard com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -1274,8 +1510,8 @@ com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin + net.wafflesoftware.ShortcutRecorder.IB.Leopard + net.wafflesoftware.ShortcutRecorder.IB.Leopard com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -1310,7 +1546,7 @@ - 512 + 586 @@ -1319,49 +1555,14 @@ PrefWindowController NSWindowController - YES - - YES - cancelHotkey: - changeHotkey: - savePreferences: - showPreferences: - - - YES - id - id - id - id - + showPreferences: + id - YES - - YES - cancelHotkey: - changeHotkey: - savePreferences: - showPreferences: - - - YES - - cancelHotkey: - id - - - changeHotkey: - id - - - savePreferences: - id - - - showPreferences: - id - + showPreferences: + + showPreferences: + id @@ -1369,35 +1570,33 @@ YES _openAtLogin - blField - bottomField - brField - cancelHotkeyButton - centerField - fullScreenField - hotKeyButtonMatrix - leftField - rightField + blRecorderCtrl + bottomRecorderCtrl + brRecorderCtrl + centerRecorderCtrl + fullScreenRecorderCtrl + leftRecorderCtrl + rightRecorderCtrl tabView - tlField - topField - trField + tlRecorderCtrl + topRecorderCtrl + trRecorderCtrl + versionLabel YES NSButton - NSTextField - NSTextField - NSTextField - NSButton - NSTextField - NSTextField - NSMatrix - NSTextField - NSTextField + SRRecorderControl + SRRecorderControl + SRRecorderControl + SRRecorderControl + SRRecorderControl + SRRecorderControl + SRRecorderControl NSTabView - NSTextField - NSTextField + SRRecorderControl + SRRecorderControl + SRRecorderControl NSTextField @@ -1406,19 +1605,18 @@ YES _openAtLogin - blField - bottomField - brField - cancelHotkeyButton - centerField - fullScreenField - hotKeyButtonMatrix - leftField - rightField + blRecorderCtrl + bottomRecorderCtrl + brRecorderCtrl + centerRecorderCtrl + fullScreenRecorderCtrl + leftRecorderCtrl + rightRecorderCtrl tabView - tlField - topField - trField + tlRecorderCtrl + topRecorderCtrl + trRecorderCtrl + versionLabel YES @@ -1427,55 +1625,51 @@ NSButton - blField - NSTextField - - - bottomField - NSTextField + blRecorderCtrl + SRRecorderControl - brField - NSTextField - - - cancelHotkeyButton - NSButton + bottomRecorderCtrl + SRRecorderControl - centerField - NSTextField + brRecorderCtrl + SRRecorderControl - fullScreenField - NSTextField + centerRecorderCtrl + SRRecorderControl - hotKeyButtonMatrix - NSMatrix + fullScreenRecorderCtrl + SRRecorderControl - leftField - NSTextField + leftRecorderCtrl + SRRecorderControl - rightField - NSTextField + rightRecorderCtrl + SRRecorderControl tabView NSTabView - tlField - NSTextField + tlRecorderCtrl + SRRecorderControl - topField - NSTextField + topRecorderCtrl + SRRecorderControl + + + trRecorderCtrl + SRRecorderControl - trField + versionLabel NSTextField @@ -1579,14 +1773,6 @@ AppKit.framework/Headers/NSController.h - - NSMatrix - NSControl - - IBFrameworkSource - AppKit.framework/Headers/NSMatrix.h - - NSMenu NSObject @@ -1713,6 +1899,27 @@ Print.framework/Headers/PDEPluginInterface.h + + NSObject + + IBFrameworkSource + ShortcutRecorder.framework/Headers/SRRecorderCell.h + + + + NSObject + + IBFrameworkSource + ShortcutRecorder.framework/Headers/SRRecorderControl.h + + + + NSObject + + IBFrameworkSource + ShortcutRecorder.framework/Headers/SRValidator.h + + NSObject @@ -1849,6 +2056,38 @@ AppKit.framework/Headers/NSWindowController.h + + SRRecorderCell + NSActionCell + + delegate + id + + + delegate + + delegate + id + + + + + + SRRecorderControl + NSControl + + delegate + id + + + delegate + + delegate + id + + + + SUUpdater NSObject diff --git a/ShiftIt/PrefWindowController.h b/ShiftIt/PrefWindowController.h index b08fe6e7..6c231ad2 100644 --- a/ShiftIt/PrefWindowController.h +++ b/ShiftIt/PrefWindowController.h @@ -19,6 +19,7 @@ #import +#import #include "Preferences.h" #include "SIHotKey.h" @@ -28,56 +29,32 @@ hKController *hkContObject; IBOutlet NSButton * _openAtLogin; IBOutlet NSTabView * tabView; + IBOutlet NSTextField * versionLabel; - NSTextField * topField; - NSTextField * bottomField; - NSTextField * leftField; - NSTextField * rightField; - NSTextField * tlField; - NSTextField * trField; - NSTextField * blField; - NSTextField * brField; - NSTextField * fullScreenField; - NSTextField * centerField; - NSButton *cancelHotkeyButton; - NSArray *textFieldArray; + IBOutlet SRRecorderControl *leftRecorderCtrl; + IBOutlet SRRecorderControl *rightRecorderCtrl; + IBOutlet SRRecorderControl *topRecorderCtrl; + IBOutlet SRRecorderControl *bottomRecorderCtrl; + + IBOutlet SRRecorderControl *tlRecorderCtrl; + IBOutlet SRRecorderControl *trRecorderCtrl; + IBOutlet SRRecorderControl *blRecorderCtrl; + IBOutlet SRRecorderControl *brRecorderCtrl; + + IBOutlet SRRecorderControl *fullScreenRecorderCtrl; + IBOutlet SRRecorderControl *centerRecorderCtrl; + + NSArray *recorderCtlArray; - IBOutlet NSMatrix *hotKeyButtonMatrix; - NSMutableString *modifiersString; NSInteger buttonPressed; NSMenu *statusMenu; - NSString *oldHotkeyString; - } --(IBAction)savePreferences:(id)sender; -(IBAction)showPreferences:(id)sender; +-(void)updateRecorderCombos; --(IBAction)changeHotkey:(id)sender; -- (IBAction)cancelHotkey:(id)sender; - --(NSMutableString *)modifierKeysStringForFlags:(NSUInteger)modifierFlags; --(void)disableButtons; --(void)enableButtons; --(void)updateTextFields; - -@property (assign) IBOutlet NSTextField * topField; -@property (assign) IBOutlet NSTextField * bottomField; -@property (assign) IBOutlet NSTextField * leftField; -@property (assign) IBOutlet NSTextField * rightField; -@property (assign) IBOutlet NSTextField * tlField; -@property (assign) IBOutlet NSTextField * trField; -@property (assign) IBOutlet NSTextField * blField; -@property (assign) IBOutlet NSTextField * brField; -@property (assign) IBOutlet NSTextField * fullScreenField; -@property (assign) IBOutlet NSTextField * centerField; -@property (assign) IBOutlet NSButton *cancelHotkeyButton; -@property (nonatomic, retain) NSArray *textFieldArray; - -@property (nonatomic, retain) NSMatrix *hotKeyButtonMatrix; -@property (nonatomic, retain) NSMutableString *modifiersString; +@property (nonatomic, retain) NSArray *recorderCtlArray; @property (nonatomic) NSInteger buttonPressed; @property (nonatomic, retain) NSMenu *statusMenu; -@property (nonatomic, retain) NSString *oldHotkeyString; @end diff --git a/ShiftIt/PrefWindowController.m b/ShiftIt/PrefWindowController.m index f11a7032..2c713de3 100644 --- a/ShiftIt/PrefWindowController.m +++ b/ShiftIt/PrefWindowController.m @@ -19,14 +19,8 @@ #import "PrefWindowController.h" - @implementation PrefWindowController - -@synthesize hotKeyButtonMatrix, modifiersString, textFieldArray, buttonPressed; -@synthesize topField,bottomField,leftField,rightField; -@synthesize tlField,trField,blField,brField,fullScreenField,centerField,cancelHotkeyButton; -@synthesize statusMenu, oldHotkeyString; - +@synthesize recorderCtlArray, buttonPressed, statusMenu; -(id)init{ @@ -39,21 +33,24 @@ -(id)init{ } -(void)windowDidLoad{ - self.textFieldArray = [[NSArray alloc] initWithObjects: - self.leftField, - self.rightField, - self.topField, - self.bottomField, - self.tlField, - self.trField, - self.blField, - self.brField, - self.fullScreenField, - self.centerField, - nil]; + self.recorderCtlArray = [[NSArray alloc] initWithObjects: + leftRecorderCtrl, + rightRecorderCtrl, + topRecorderCtrl, + bottomRecorderCtrl, + tlRecorderCtrl, + trRecorderCtrl, + blRecorderCtrl, + brRecorderCtrl, + fullScreenRecorderCtrl, + centerRecorderCtrl, + nil]; buttonPressed = -1; - [self updateTextFields]; + [self updateRecorderCombos]; + + NSString *versionString = [NSString stringWithFormat:@"v%@",[[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleShortVersionString"]]; + [versionLabel setStringValue:versionString]; } -(BOOL)acceptsFirstResponder{ @@ -64,201 +61,76 @@ -(void)awakeFromNib{ [tabView selectTabViewItemAtIndex:0]; } --(IBAction)savePreferences:(id)sender{ - -} - -(IBAction)showPreferences:(id)sender{ [[self window] center]; [NSApp activateIgnoringOtherApps:YES]; - [[self window] makeKeyAndOrderFront:sender]; - - + [[self window] makeKeyAndOrderFront:sender]; } -- (void)flagsChanged:(NSEvent *)theEvent{ - if(buttonPressed == -1) - return; +#pragma mark - +#pragma mark Shortcut Recorder methods +//-(BOOL)shortcutRecorder:(SRRecorderControl *)aRecorder isKeyCode:(NSInteger)keyCode andFlagsTaken:(NSUInteger)flags reason:(NSString **)aReason{ +// +// return YES; +//} - self.modifiersString = [self modifierKeysStringForFlags:[theEvent modifierFlags]]; - - if(buttonPressed >= 0) - [[textFieldArray objectAtIndex:buttonPressed] setStringValue:self.modifiersString]; -} - -- (void)keyDown:(NSEvent *)theEvent { - NSUInteger modifiers = [theEvent modifierFlags]; - if(modifiers == 0 || buttonPressed == -1) - return; - - NSMutableString *hotKeyString = [[NSMutableString alloc] initWithString:self.modifiersString]; - - unichar keyChar = [[theEvent charactersIgnoringModifiers] characterAtIndex:0]; - if (modifiers & NSNumericPadKeyMask && keyChar == NSLeftArrowFunctionKey ) - [hotKeyString appendString:@"←"]; - else if (modifiers & NSNumericPadKeyMask && keyChar == NSRightArrowFunctionKey ) - [hotKeyString appendString:@"→"]; - else if (modifiers & NSNumericPadKeyMask && keyChar == NSUpArrowFunctionKey ) - [hotKeyString appendString:@"↑"]; - else if (modifiers & NSNumericPadKeyMask && keyChar == NSDownArrowFunctionKey ) - [hotKeyString appendString:@"↓"]; - else - [hotKeyString appendString:[theEvent charactersIgnoringModifiers]]; +- (void)shortcutRecorder:(SRRecorderControl *)aRecorder keyComboDidChange:(KeyCombo)newKeyCombo{ + NSLog(@"%@", SRStringForCocoaModifierFlagsAndKeyCode(newKeyCombo.flags, newKeyCombo.code)); + buttonPressed = [recorderCtlArray indexOfObject:aRecorder]; if(buttonPressed >= 0){ - [[textFieldArray objectAtIndex:buttonPressed] setStringValue:[hotKeyString uppercaseString]]; - + //change the hotkey in NSUserDefaults NSString* modifiersPath = [[NSBundle mainBundle] pathForResource:@"ModifierDictStrings" ofType:@"plist"]; NSArray *modifierKeys = [NSArray arrayWithContentsOfFile:modifiersPath]; NSString* keycodesPath = [[NSBundle mainBundle] pathForResource:@"KeycodeDictKeys" ofType:@"plist"]; NSArray *keycodeKeys = [NSArray arrayWithContentsOfFile:keycodesPath]; - [[NSUserDefaults standardUserDefaults] setInteger:modifiers forKey:[modifierKeys objectAtIndex:buttonPressed]]; - [[NSUserDefaults standardUserDefaults] setInteger:theEvent.keyCode forKey:[keycodeKeys objectAtIndex:buttonPressed]]; + [[NSUserDefaults standardUserDefaults] setInteger:newKeyCombo.flags forKey:[modifierKeys objectAtIndex:buttonPressed]]; + [[NSUserDefaults standardUserDefaults] setInteger:newKeyCombo.code forKey:[keycodeKeys objectAtIndex:buttonPressed]]; [[NSUserDefaults standardUserDefaults] synchronize]; - //register the new hotkey + //modify the hotkey SIHotKey *newHotKey = [[SIHotKey alloc] initWithIdentifier:buttonPressed - keyCode:theEvent.keyCode - modCombo:modifiers]; + keyCode:newKeyCombo.code + modCombo:newKeyCombo.flags]; - [hkContObject registerHotKey:newHotKey]; + [hkContObject modifyHotKey:newHotKey]; [newHotKey release]; //set the key equivalent on the status menu item //must account for the horizontal lines in menu - if(buttonPressed > 3) - buttonPressed++; - if(buttonPressed > 7) - buttonPressed++; + int menuIndex = buttonPressed; + if(menuIndex > 3) + menuIndex++; + if(menuIndex > 8) + menuIndex++; - [[statusMenu itemAtIndex:buttonPressed] setKeyEquivalent:[hotKeyString substringWithRange:NSMakeRange([hotKeyString length]-1, 1)] ]; - [[statusMenu itemAtIndex:buttonPressed] setKeyEquivalentModifierMask:modifiers]; + [[statusMenu itemAtIndex:menuIndex] setKeyEquivalent:[SRStringForKeyCode(newKeyCombo.code) lowercaseString]]; + [[statusMenu itemAtIndex:menuIndex] setKeyEquivalentModifierMask:newKeyCombo.flags]; buttonPressed = -1; } - - [self enableButtons]; - [hotKeyString release]; -} - --(IBAction)changeHotkey:(id)sender{ - [cancelHotkeyButton setTransparent:NO]; - buttonPressed = [hotKeyButtonMatrix selectedRow]; - self.oldHotkeyString = [[textFieldArray objectAtIndex:buttonPressed] stringValue]; - - //Unregister old hotkey incase user wants to use the same one - //[hkContObject unregisterHotKey:[[hkContObject _hotKeys] objectForKey:[NSNumber numberWithInt:buttonPressed]]]; - - [[textFieldArray objectAtIndex:buttonPressed] setStringValue:@"Press Keys..."]; - [self disableButtons]; } -- (IBAction)cancelHotkey:(id)sender { - if(buttonPressed == -1) - return; - else { - [[textFieldArray objectAtIndex:buttonPressed] setStringValue:oldHotkeyString]; - [self enableButtons]; - buttonPressed = -1; - [cancelHotkeyButton setTransparent:YES]; - return; - } - -} - - --(NSMutableString *)modifierKeysStringForFlags:(NSUInteger)modifierFlags{ - NSMutableString *modifierKeysString = [[[NSMutableString alloc] initWithString:@""] autorelease]; - - if(modifierFlags & NSControlKeyMask) - [modifierKeysString appendString:@"⌃"]; - - if(modifierFlags & NSAlternateKeyMask) - [modifierKeysString appendString:@"⌥"]; - - if(modifierFlags & NSShiftKeyMask) - [modifierKeysString appendString:@"⇧"]; - - if(modifierFlags & NSCommandKeyMask) - [modifierKeysString appendString:@"⌘"]; - - return modifierKeysString; -} - --(void)disableButtons{ - [hotKeyButtonMatrix setEnabled:NO]; - [hotKeyButtonMatrix setAlphaValue:0.5]; -} - --(void)enableButtons{ - [hotKeyButtonMatrix setEnabled:YES]; - [hotKeyButtonMatrix setAlphaValue:1.0]; -} - --(void)updateTextFields{ +-(void)updateRecorderCombos{ NSString* modifiersPath = [[NSBundle mainBundle] pathForResource:@"ModifierDictStrings" ofType:@"plist"]; NSArray *modifierKeys = [NSArray arrayWithContentsOfFile:modifiersPath]; - NSString* keycodesPath = [[NSBundle mainBundle] pathForResource:@"KeycodeDictKeys" ofType:@"plist"]; NSArray *keycodeKeys = [NSArray arrayWithContentsOfFile:keycodesPath]; + NSUserDefaults *storage = [NSUserDefaults standardUserDefaults]; - for(int i=0; i < [modifierKeys count]; i++){ - NSString *modifierKey = [modifierKeys objectAtIndex:i]; - NSString *keycodeKey = [keycodeKeys objectAtIndex:i]; - - //start off with the string of modifiers - NSInteger modifiers = [[NSUserDefaults standardUserDefaults] integerForKey:modifierKey]; - NSMutableString *hotKeyString = [self modifierKeysStringForFlags:modifiers]; - - //convert virtual keycode to character-- - // strange code but I can't seem to find any other way to do it - UInt32 deadKeyState = 0; - UniCharCount actualCount = 0; - UniChar baseChar; - TISInputSourceRef sourceRef = TISCopyCurrentKeyboardLayoutInputSource(); - CFDataRef keyLayoutPtr = (CFDataRef)TISGetInputSourceProperty( sourceRef, kTISPropertyUnicodeKeyLayoutData); - CFRelease( sourceRef); - UCKeyTranslate( (UCKeyboardLayout*)CFDataGetBytePtr(keyLayoutPtr), - [[NSUserDefaults standardUserDefaults] integerForKey:keycodeKey], //<--virtual keycode - kUCKeyActionDown, - 0, - LMGetKbdLast(), - kUCKeyTranslateNoDeadKeysBit, - &deadKeyState, - 1, - &actualCount, - &baseChar); - - //arrows don't count as characters-- they're technically modifiers - // --must check the modifiers flags for the arrow keys - [[NSUserDefaults standardUserDefaults] synchronize]; - if (modifiers & NSNumericPadKeyMask) { - NSInteger keyCode = [[NSUserDefaults standardUserDefaults] integerForKey:keycodeKey]; - - if (keyCode == kVK_LeftArrow ) - [hotKeyString appendString:@"←"]; - else if (keyCode == kVK_RightArrow ) - [hotKeyString appendString:@"→"]; - else if (keyCode == kVK_UpArrow ) - [hotKeyString appendString:@"↑"]; - else if (keyCode == kVK_DownArrow ) - [hotKeyString appendString:@"↓"]; - }else - [hotKeyString appendFormat:@"%c",baseChar]; - - //append key equivalent character - [[textFieldArray objectAtIndex:i] setStringValue:[hotKeyString uppercaseString]]; + for(int i=0; i<[recorderCtlArray count]; i++){ + KeyCombo combo; + combo.code = [storage integerForKey:[keycodeKeys objectAtIndex:i]]; + combo.flags = [storage integerForKey:[modifierKeys objectAtIndex:i]]; + [[recorderCtlArray objectAtIndex:i] setKeyCombo:combo]; } } -(void)dealloc{ - [hotKeyButtonMatrix release]; - [modifiersString release]; - [textFieldArray release]; + [recorderCtlArray release]; [statusMenu release]; - [oldHotkeyString release]; [super dealloc]; } diff --git a/ShiftIt/Preferences.h b/ShiftIt/Preferences.h index 3546bd7b..4506b831 100644 --- a/ShiftIt/Preferences.h +++ b/ShiftIt/Preferences.h @@ -29,7 +29,7 @@ WindowSizer * _winSizer; EventTypeSpec _eventType; } --(void)modifyHotKey:(NSInteger)newKey modiferKeys:(NSInteger)modKeys key:(NSString*)keyCode; + -(void)registerHotKeys; -(void)clearUserDefaults; diff --git a/ShiftIt/Preferences.m b/ShiftIt/Preferences.m index cd4be6f7..7f1ebcdf 100644 --- a/ShiftIt/Preferences.m +++ b/ShiftIt/Preferences.m @@ -87,7 +87,7 @@ -(id)init{ -(void)registerHotKeys{ NSUserDefaults *storage = [NSUserDefaults standardUserDefaults]; - + if (![storage boolForKey:@"defaultsRegistered"]) { [NSUserDefaults resetStandardUserDefaults]; NSLog(@"Registering default"); @@ -123,7 +123,7 @@ -(void)registerHotKeys{ [storage setInteger:kVK_ANSI_C forKey:@"centerKeyCode"]; [storage setInteger:(NSCommandKeyMask+NSAlternateKeyMask+NSControlKeyMask) forKey:@"centerModifiers"]; - + [storage setBool:YES forKey:@"shiftItstartLogin"]; [storage setBool:YES forKey:@"shiftItshowMenu"]; @@ -146,15 +146,7 @@ -(void)registerHotKeys{ } --(void)modifyHotKey:(NSInteger)newKey modiferKeys:(NSInteger)modKeys key:(NSString*)keyCode{ - [[NSUserDefaults standardUserDefaults] setInteger:newKey forKey:[@"hkc" stringByAppendingString:keyCode]]; - [[NSUserDefaults standardUserDefaults] setInteger:modKeys forKey:[@"hkm" stringByAppendingString:keyCode]]; - [_hKeyController modifyHotKey:[[SIHotKey alloc]initWithIdentifier:[[_userDefaultsValuesDict objectForKey:keyCode] intValue] keyCode:newKey modCombo:modKeys]]; - [[NSUserDefaults standardUserDefaults] synchronize]; -} - -(void)clearUserDefaults{ - //Uncomment these lines to clear out the NSUserDefaults [[NSUserDefaults standardUserDefaults] removePersistentDomainForName:[[NSBundle mainBundle] bundleIdentifier]]; [[NSUserDefaults standardUserDefaults] synchronize]; } diff --git a/ShiftIt/ShiftIt-Info.plist b/ShiftIt/ShiftIt-Info.plist index de827676..b6414bc4 100644 --- a/ShiftIt/ShiftIt-Info.plist +++ b/ShiftIt/ShiftIt-Info.plist @@ -19,11 +19,11 @@ CFBundleSignature ???? CFBundleShortVersionString - 1.3 + 1.4 LSMinimumSystemVersion ${MACOSX_DEPLOYMENT_TARGET} CFBundleVersion - 1.3 + 1.4 NSMainNibFile MainMenu NSPrincipalClass diff --git a/ShiftIt/ShiftIt.xcodeproj/project.pbxproj b/ShiftIt/ShiftIt.xcodeproj/project.pbxproj index 28101c0d..49f1c5d2 100644 --- a/ShiftIt/ShiftIt.xcodeproj/project.pbxproj +++ b/ShiftIt/ShiftIt.xcodeproj/project.pbxproj @@ -9,6 +9,9 @@ /* Begin PBXBuildFile section */ 1DDD58160DA1D0A300B32029 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 1DDD58140DA1D0A300B32029 /* MainMenu.xib */; }; 256AC3DA0F4B6AC300CF3369 /* ShiftItAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 256AC3D90F4B6AC300CF3369 /* ShiftItAppDelegate.m */; }; + 835AA0D5125D3D8D00F11A69 /* ShortcutRecorder.strings in Resources */ = {isa = PBXBuildFile; fileRef = 835AA0D3125D3D8D00F11A69 /* ShortcutRecorder.strings */; }; + 835AA46E125D4D1300F11A69 /* ShortcutRecorder.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 835AA46D125D4D1300F11A69 /* ShortcutRecorder.framework */; }; + 835AA49C125D4E0200F11A69 /* ShortcutRecorder.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 835AA46D125D4D1300F11A69 /* ShortcutRecorder.framework */; }; 83854AEF12596871008C7C0B /* ModifierDictStrings.plist in Resources */ = {isa = PBXBuildFile; fileRef = 83854AEE12596871008C7C0B /* ModifierDictStrings.plist */; }; 83854AF2125968DA008C7C0B /* KeycodeDictKeys.plist in Resources */ = {isa = PBXBuildFile; fileRef = 83854AF1125968DA008C7C0B /* KeycodeDictKeys.plist */; }; 83E55ED5125A5FCF00FC49BF /* shift-it-menu-icon.png in Resources */ = {isa = PBXBuildFile; fileRef = 83E55ED3125A5FCF00FC49BF /* shift-it-menu-icon.png */; }; @@ -34,6 +37,7 @@ dstPath = ""; dstSubfolderSpec = 10; files = ( + 835AA49C125D4E0200F11A69 /* ShortcutRecorder.framework in CopyFiles */, F2708277117FE51100C0A04C /* Sparkle.framework in CopyFiles */, ); runOnlyForDeploymentPostprocessing = 0; @@ -49,6 +53,8 @@ 256AC3F00F4B6AF500CF3369 /* ShiftIt_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ShiftIt_Prefix.pch; sourceTree = ""; }; 29B97316FDCFA39411CA2CEA /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 29B97324FDCFA39411CA2CEA /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = ""; }; + 835AA0D4125D3D8D00F11A69 /* English */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/ShortcutRecorder.strings; sourceTree = ""; }; + 835AA46D125D4D1300F11A69 /* ShortcutRecorder.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = ShortcutRecorder.framework; sourceTree = ""; }; 83854AEE12596871008C7C0B /* ModifierDictStrings.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = ModifierDictStrings.plist; sourceTree = ""; }; 83854AF1125968DA008C7C0B /* KeycodeDictKeys.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = KeycodeDictKeys.plist; sourceTree = ""; }; 83E55ED3125A5FCF00FC49BF /* shift-it-menu-icon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "shift-it-menu-icon.png"; sourceTree = ""; }; @@ -78,6 +84,7 @@ F2708252117FCFEA00C0A04C /* Sparkle.framework in Frameworks */, 8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */, F2DC61EF1127C862000E1A5B /* Carbon.framework in Frameworks */, + 835AA46E125D4D1300F11A69 /* ShortcutRecorder.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -100,6 +107,7 @@ 1058C7A0FEA54F0111CA2CBB /* Linked Frameworks */ = { isa = PBXGroup; children = ( + 835AA46D125D4D1300F11A69 /* ShortcutRecorder.framework */, F2708222117FCF9400C0A04C /* Sparkle.framework */, 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */, ); @@ -147,6 +155,7 @@ 29B97317FDCFA39411CA2CEA /* Resources */ = { isa = PBXGroup; children = ( + 835AA0D3125D3D8D00F11A69 /* ShortcutRecorder.strings */, 83E55ED3125A5FCF00FC49BF /* shift-it-menu-icon.png */, 83E55ED4125A5FCF00FC49BF /* ShiftIt.icns */, 8D1107310486CEB800E47090 /* ShiftIt-Info.plist */, @@ -241,6 +250,7 @@ 83854AF2125968DA008C7C0B /* KeycodeDictKeys.plist in Resources */, 83E55ED5125A5FCF00FC49BF /* shift-it-menu-icon.png in Resources */, 83E55ED6125A5FCF00FC49BF /* ShiftIt.icns in Resources */, + 835AA0D5125D3D8D00F11A69 /* ShortcutRecorder.strings in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -280,6 +290,14 @@ name = MainMenu.xib; sourceTree = ""; }; + 835AA0D3125D3D8D00F11A69 /* ShortcutRecorder.strings */ = { + isa = PBXVariantGroup; + children = ( + 835AA0D4125D3D8D00F11A69 /* English */, + ); + name = ShortcutRecorder.strings; + sourceTree = ""; + }; /* End PBXVariantGroup section */ /* Begin XCBuildConfiguration section */ @@ -348,6 +366,7 @@ isa = XCBuildConfiguration; buildSettings = { ARCHS = "$(ARCHS_STANDARD_32_64_BIT)"; + FRAMEWORK_SEARCH_PATHS = .; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_UNUSED_VARIABLE = YES; diff --git a/ShiftIt/ShiftItAppDelegate.h b/ShiftIt/ShiftItAppDelegate.h index f381c0c8..9004bd58 100644 --- a/ShiftIt/ShiftItAppDelegate.h +++ b/ShiftIt/ShiftItAppDelegate.h @@ -34,7 +34,7 @@ -(void)registerForLogin; -(void)updateStatusMenuShortcuts; -@property (assign) IBOutlet NSMenu *statusMenu; +@property (nonatomic, retain) IBOutlet NSMenu *statusMenu; @end diff --git a/ShiftIt/ShiftItAppDelegate.m b/ShiftIt/ShiftItAppDelegate.m index 62ed021e..a3cd2ada 100644 --- a/ShiftIt/ShiftItAppDelegate.m +++ b/ShiftIt/ShiftItAppDelegate.m @@ -171,48 +171,26 @@ -(IBAction)showPreferences:(id)sender{ [NSApp activateIgnoringOtherApps:YES]; } --(void)updateStatusMenuShortcuts{ - NSString* modifiersPath = [[NSBundle mainBundle] pathForResource:@"ModifierDictStrings" ofType:@"plist"]; - NSArray *modifierKeys = [NSArray arrayWithContentsOfFile:modifiersPath]; +//new version after adding shortcut recorder +-(void)updateStatusMenuShortcuts{ + NSUserDefaults *storage = [NSUserDefaults standardUserDefaults]; NSString* keycodesPath = [[NSBundle mainBundle] pathForResource:@"KeycodeDictKeys" ofType:@"plist"]; NSArray *keycodeKeys = [NSArray arrayWithContentsOfFile:keycodesPath]; + NSString* modifiersPath = [[NSBundle mainBundle] pathForResource:@"ModifierDictStrings" ofType:@"plist"]; + NSArray *modifierKeys = [NSArray arrayWithContentsOfFile:modifiersPath]; + NSString *keycodeString; for(int i=0; i < [modifierKeys count]; i++){ - NSString *modifierKey = [modifierKeys objectAtIndex:i]; - NSString *keycodeKey = [keycodeKeys objectAtIndex:i]; + int menuIndex = i; + if(menuIndex > 3) + menuIndex++; + if(menuIndex > 8) + menuIndex++; - //convert virtual keycode to character-- - // strange code but I can't seem to find any other way to do it - UInt32 deadKeyState = 0; - UniCharCount actualCount = 0; - UniChar baseChar; - TISInputSourceRef sourceRef = TISCopyCurrentKeyboardLayoutInputSource(); - CFDataRef keyLayoutPtr = (CFDataRef)TISGetInputSourceProperty( sourceRef, kTISPropertyUnicodeKeyLayoutData); - CFRelease( sourceRef); - UCKeyTranslate( (UCKeyboardLayout*)CFDataGetBytePtr(keyLayoutPtr), - [[NSUserDefaults standardUserDefaults] integerForKey:keycodeKey], //<--virtual keycode - kUCKeyActionDown, - 0, - LMGetKbdLast(), - kUCKeyTranslateNoDeadKeysBit, - &deadKeyState, - 1, - &actualCount, - &baseChar); - - NSString *keyEq = [NSString stringWithFormat:@"%c",baseChar]; - - //we have to account for the horizonal breaks in the status menu - int j = i; - if(j>3) - j++; - if(j>7) - j++; - - [[statusMenu itemAtIndex:j] setKeyEquivalent:keyEq]; - [[statusMenu itemAtIndex:j] setKeyEquivalentModifierMask:[[NSUserDefaults standardUserDefaults] integerForKey:modifierKey]]; + keycodeString = SRStringForKeyCode([storage integerForKey:[keycodeKeys objectAtIndex:i]]); + [[statusMenu itemAtIndex:menuIndex] setKeyEquivalent:[keycodeString lowercaseString]]; + [[statusMenu itemAtIndex:menuIndex] setKeyEquivalentModifierMask:[storage integerForKey:[modifierKeys objectAtIndex:i]]]; } - } @end From 8204ba27df7caf69bcfab408bb4a1c660841b043 Mon Sep 17 00:00:00 2001 From: skandocious Date: Thu, 7 Oct 2010 13:29:55 -0700 Subject: [PATCH 2/3] Adding ShortcutRecorder framework to bundle --- .../English.lproj/ShortcutRecorder.strings | Bin 0 -> 2298 bytes ShiftIt/ShortcutRecorder.framework/Headers | 1 + ShiftIt/ShortcutRecorder.framework/Resources | 1 + .../ShortcutRecorder | 1 + .../Versions/A/Headers/SRCommon.h | 185 ++++++++++++++++++ .../Versions/A/Headers/SRKeyCodeTransformer.h | 16 ++ .../Versions/A/Headers/SRRecorderCell.h | 137 +++++++++++++ .../Versions/A/Headers/SRRecorderControl.h | 79 ++++++++ .../Versions/A/Headers/SRValidator.h | 34 ++++ .../Versions/A/Headers/SR_LeopardView.h | 15 ++ .../Versions/A/Headers/ShortcutRecorder.h | 17 ++ .../Versions/A/Resources/Info.plist | 20 ++ .../Versions/A/ShortcutRecorder | Bin 0 -> 333468 bytes .../Versions/Current | 1 + 14 files changed, 507 insertions(+) create mode 100644 ShiftIt/English.lproj/ShortcutRecorder.strings create mode 120000 ShiftIt/ShortcutRecorder.framework/Headers create mode 120000 ShiftIt/ShortcutRecorder.framework/Resources create mode 120000 ShiftIt/ShortcutRecorder.framework/ShortcutRecorder create mode 100644 ShiftIt/ShortcutRecorder.framework/Versions/A/Headers/SRCommon.h create mode 100644 ShiftIt/ShortcutRecorder.framework/Versions/A/Headers/SRKeyCodeTransformer.h create mode 100644 ShiftIt/ShortcutRecorder.framework/Versions/A/Headers/SRRecorderCell.h create mode 100644 ShiftIt/ShortcutRecorder.framework/Versions/A/Headers/SRRecorderControl.h create mode 100644 ShiftIt/ShortcutRecorder.framework/Versions/A/Headers/SRValidator.h create mode 100644 ShiftIt/ShortcutRecorder.framework/Versions/A/Headers/SR_LeopardView.h create mode 100644 ShiftIt/ShortcutRecorder.framework/Versions/A/Headers/ShortcutRecorder.h create mode 100644 ShiftIt/ShortcutRecorder.framework/Versions/A/Resources/Info.plist create mode 100755 ShiftIt/ShortcutRecorder.framework/Versions/A/ShortcutRecorder create mode 120000 ShiftIt/ShortcutRecorder.framework/Versions/Current diff --git a/ShiftIt/English.lproj/ShortcutRecorder.strings b/ShiftIt/English.lproj/ShortcutRecorder.strings new file mode 100644 index 0000000000000000000000000000000000000000..ecc213764771caf6822bb88d8e0796e5e17c5c12 GIT binary patch literal 2298 zcmeH|-A=+l5QXR3r>G=~M&$*Ji3wN67)ii8ZweG4Kryt0^ySs>?536msGCq4g}Xngw>nQ$D-215O?+K_jr4O{~wF*pU6)QY;tz7q%a3dXF8; zh%BGmeO2jrFHP`_z%a&73Zei^5%0oQjdOQPAF;)4$@7t2uVh_5%`+Uj{KoueSP0eB zy5NoRk+RO%c~6ptywy1m(9yjt+@1IBa3xNMdzb7deC~$w5fsW=G;@*l=M>c+g*|X%|+6TiDyc`owN* zz?z}AU=`mLb>jRl*~gAUz8mryr0{0s5LPqi9FJ2x3*UNYDnrlHoTEMbD&i9;)D_~k zI?=QAmeY*Pi;Rwu-Z|uco@n;OXieU2+bg#dSj*)%Ktp-PM32DMu+zQr>A$|eQQyDU zy*aO^j*IF(F++VExVf0m$Nf&b&$DwE{QmZv^y-wKx>Wsr##4OjH%qU<}`jl +#import +#import + +#pragma mark Dummy class + +@interface SRDummyClass : NSObject {} @end + +#pragma mark - +#pragma mark Typedefs + +typedef struct _KeyCombo { + NSUInteger flags; // 0 for no flags + NSInteger code; // -1 for no code +} KeyCombo; + +#pragma mark - +#pragma mark Enums + +// Unicode values of some keyboard glyphs +enum { + KeyboardTabRightGlyph = 0x21E5, + KeyboardTabLeftGlyph = 0x21E4, + KeyboardCommandGlyph = kCommandUnicode, + KeyboardOptionGlyph = kOptionUnicode, + KeyboardShiftGlyph = kShiftUnicode, + KeyboardControlGlyph = kControlUnicode, + KeyboardReturnGlyph = 0x2305, + KeyboardReturnR2LGlyph = 0x21A9, + KeyboardDeleteLeftGlyph = 0x232B, + KeyboardDeleteRightGlyph = 0x2326, + KeyboardPadClearGlyph = 0x2327, + KeyboardLeftArrowGlyph = 0x2190, + KeyboardRightArrowGlyph = 0x2192, + KeyboardUpArrowGlyph = 0x2191, + KeyboardDownArrowGlyph = 0x2193, + KeyboardPageDownGlyph = 0x21DF, + KeyboardPageUpGlyph = 0x21DE, + KeyboardNorthwestArrowGlyph = 0x2196, + KeyboardSoutheastArrowGlyph = 0x2198, + KeyboardEscapeGlyph = 0x238B, + KeyboardHelpGlyph = 0x003F, + KeyboardUpArrowheadGlyph = 0x2303, +}; + +// Special keys +enum { + kSRKeysF1 = 122, + kSRKeysF2 = 120, + kSRKeysF3 = 99, + kSRKeysF4 = 118, + kSRKeysF5 = 96, + kSRKeysF6 = 97, + kSRKeysF7 = 98, + kSRKeysF8 = 100, + kSRKeysF9 = 101, + kSRKeysF10 = 109, + kSRKeysF11 = 103, + kSRKeysF12 = 111, + kSRKeysF13 = 105, + kSRKeysF14 = 107, + kSRKeysF15 = 113, + kSRKeysF16 = 106, + kSRKeysF17 = 64, + kSRKeysF18 = 79, + kSRKeysF19 = 80, + kSRKeysSpace = 49, + kSRKeysDeleteLeft = 51, + kSRKeysDeleteRight = 117, + kSRKeysPadClear = 71, + kSRKeysLeftArrow = 123, + kSRKeysRightArrow = 124, + kSRKeysUpArrow = 126, + kSRKeysDownArrow = 125, + kSRKeysSoutheastArrow = 119, + kSRKeysNorthwestArrow = 115, + kSRKeysEscape = 53, + kSRKeysPageDown = 121, + kSRKeysPageUp = 116, + kSRKeysReturnR2L = 36, + kSRKeysReturn = 76, + kSRKeysTabRight = 48, + kSRKeysHelp = 114 +}; + +#pragma mark - +#pragma mark Macros + +// Localization macros, for use in any bundle +#define SRLoc(key) SRLocalizedString(key, nil) +#define SRLocalizedString(key, comment) NSLocalizedStringFromTableInBundle(key, @"ShortcutRecorder", [NSBundle bundleForClass: [SRDummyClass class]], comment) + +// Image macros, for use in any bundle +//#define SRImage(name) [[[NSImage alloc] initWithContentsOfFile: [[NSBundle bundleForClass: [self class]] pathForImageResource: name]] autorelease] +#define SRResIndImage(name) [SRSharedImageProvider supportingImageWithName:name] +#define SRImage(name) SRResIndImage(name) + +//#define SRCommonWriteDebugImagery + +// Macros for glyps +#define SRInt(x) [NSNumber numberWithInteger:x] +#define SRChar(x) [NSString stringWithFormat: @"%C", x] + +// Some default values +#define ShortcutRecorderEmptyFlags 0 +#define ShortcutRecorderAllFlags ShortcutRecorderEmptyFlags | (NSCommandKeyMask | NSAlternateKeyMask | NSControlKeyMask | NSShiftKeyMask | NSFunctionKeyMask) +#define ShortcutRecorderEmptyCode -1 + +// These keys will cancel the recoding mode if not pressed with any modifier +#define ShortcutRecorderEscapeKey 53 +#define ShortcutRecorderBackspaceKey 51 +#define ShortcutRecorderDeleteKey 117 + +#pragma mark - +#pragma mark Getting a string of the key combination + +// +// ################### +- Returns string from keyCode like NSEvent's -characters +// # EXPLANATORY # | +- Returns string from keyCode like NSEvent's -charactersUsingModifiers +// # CHART # | | +- Returns fully readable and localized name of modifier (if modifier given) +// ################### | | | +- Returns glyph of modifier (if modifier given) +// SRString... X - - X +// SRReadableString... X - X - +// SRCharacter... - X - - +// +NSString * SRStringForKeyCode( NSInteger keyCode ); +NSString * SRStringForCarbonModifierFlags( NSUInteger flags ); +NSString * SRStringForCarbonModifierFlagsAndKeyCode( NSUInteger flags, NSInteger keyCode ); +NSString * SRStringForCocoaModifierFlags( NSUInteger flags ); +NSString * SRStringForCocoaModifierFlagsAndKeyCode( NSUInteger flags, NSInteger keyCode ); +NSString * SRReadableStringForCarbonModifierFlagsAndKeyCode( NSUInteger flags, NSInteger keyCode ); +NSString * SRReadableStringForCocoaModifierFlagsAndKeyCode( NSUInteger flags, NSInteger keyCode ); +NSString *SRCharacterForKeyCodeAndCarbonFlags(NSInteger keyCode, NSUInteger carbonFlags); +NSString *SRCharacterForKeyCodeAndCocoaFlags(NSInteger keyCode, NSUInteger cocoaFlags); + +#pragma mark Converting between Cocoa and Carbon modifier flags + +NSUInteger SRCarbonToCocoaFlags( NSUInteger carbonFlags ); +NSUInteger SRCocoaToCarbonFlags( NSUInteger cocoaFlags ); + +#pragma mark - +#pragma mark Animation pace function + +CGFloat SRAnimationEaseInOut(CGFloat t); + +#pragma mark - +#pragma mark Inlines + +FOUNDATION_STATIC_INLINE KeyCombo SRMakeKeyCombo(NSInteger code, NSUInteger flags) { + KeyCombo kc; + kc.code = code; + kc.flags = flags; + return kc; +} + +FOUNDATION_STATIC_INLINE BOOL SRIsSpecialKey(NSInteger keyCode) { + return (keyCode == kSRKeysF1 || keyCode == kSRKeysF2 || keyCode == kSRKeysF3 || keyCode == kSRKeysF4 || keyCode == kSRKeysF5 || keyCode == kSRKeysF6 || keyCode == kSRKeysF7 || keyCode == kSRKeysF8 || keyCode == kSRKeysF9 || keyCode == kSRKeysF10 || keyCode == kSRKeysF11 || keyCode == kSRKeysF12 || keyCode == kSRKeysF13 || keyCode == kSRKeysF14 || keyCode == kSRKeysF15 || keyCode == kSRKeysF16 || keyCode == kSRKeysSpace || keyCode == kSRKeysDeleteLeft || keyCode == kSRKeysDeleteRight || keyCode == kSRKeysPadClear || keyCode == kSRKeysLeftArrow || keyCode == kSRKeysRightArrow || keyCode == kSRKeysUpArrow || keyCode == kSRKeysDownArrow || keyCode == kSRKeysSoutheastArrow || keyCode == kSRKeysNorthwestArrow || keyCode == kSRKeysEscape || keyCode == kSRKeysPageDown || keyCode == kSRKeysPageUp || keyCode == kSRKeysReturnR2L || keyCode == kSRKeysReturn || keyCode == kSRKeysTabRight || keyCode == kSRKeysHelp); +} + +#pragma mark - +#pragma mark Additions + +@interface NSAlert( SRAdditions ) ++ (NSAlert *) alertWithNonRecoverableError:(NSError *)error; +@end + +#pragma mark - +#pragma mark Image provider + +@interface SRSharedImageProvider : NSObject ++ (NSImage *)supportingImageWithName:(NSString *)name; +@end diff --git a/ShiftIt/ShortcutRecorder.framework/Versions/A/Headers/SRKeyCodeTransformer.h b/ShiftIt/ShortcutRecorder.framework/Versions/A/Headers/SRKeyCodeTransformer.h new file mode 100644 index 00000000..6f252f37 --- /dev/null +++ b/ShiftIt/ShortcutRecorder.framework/Versions/A/Headers/SRKeyCodeTransformer.h @@ -0,0 +1,16 @@ +// +// SRKeyCodeTransformer.h +// ShortcutRecorder +// +// Copyright 2006-2007 Contributors. All rights reserved. +// +// License: BSD +// +// Contributors: +// David Dauer +// Jesper +// Jamie Kirkpatrick + +#import + +@interface SRKeyCodeTransformer : NSValueTransformer {} @end diff --git a/ShiftIt/ShortcutRecorder.framework/Versions/A/Headers/SRRecorderCell.h b/ShiftIt/ShortcutRecorder.framework/Versions/A/Headers/SRRecorderCell.h new file mode 100644 index 00000000..31b38546 --- /dev/null +++ b/ShiftIt/ShortcutRecorder.framework/Versions/A/Headers/SRRecorderCell.h @@ -0,0 +1,137 @@ +// +// SRRecorderCell.h +// ShortcutRecorder +// +// Copyright 2006-2007 Contributors. All rights reserved. +// +// License: BSD +// +// Contributors: +// David Dauer +// Jesper +// Jamie Kirkpatrick + +#import +#import "SRCommon.h" + +#define SRMinWidth 50 +#define SRMaxHeight 22 + +#define SRTransitionFPS 30.0f +#define SRTransitionDuration 0.35f +//#define SRTransitionDuration 2.35 +#define SRTransitionFrames (SRTransitionFPS*SRTransitionDuration) +#define SRAnimationAxisIsY YES +#define ShortcutRecorderNewStyleDrawing + +#define SRAnimationOffsetRect(X,Y) (SRAnimationAxisIsY ? NSOffsetRect(X,0.0f,-NSHeight(Y)) : NSOffsetRect(X,NSWidth(Y),0.0f)) + +@class SRRecorderControl, SRValidator; + +enum SRRecorderStyle { + SRGradientBorderStyle = 0, + SRGreyStyle = 1 +}; +typedef enum SRRecorderStyle SRRecorderStyle; + +@interface SRRecorderCell : NSActionCell +{ + NSGradient *recordingGradient; + NSString *autosaveName; + + BOOL isRecording; + BOOL mouseInsideTrackingArea; + BOOL mouseDown; + + SRRecorderStyle style; + + BOOL isAnimating; + CGFloat transitionProgress; + BOOL isAnimatingNow; + BOOL isAnimatingTowardsRecording; + BOOL comboJustChanged; + + NSTrackingRectTag removeTrackingRectTag; + NSTrackingRectTag snapbackTrackingRectTag; + + KeyCombo keyCombo; + BOOL hasKeyChars; + NSString *keyChars; + NSString *keyCharsIgnoringModifiers; + + NSUInteger allowedFlags; + NSUInteger requiredFlags; + NSUInteger recordingFlags; + + BOOL allowsKeyOnly; + BOOL escapeKeysRecord; + + NSSet *cancelCharacterSet; + + SRValidator *validator; + + IBOutlet id delegate; + BOOL globalHotKeys; + void *hotKeyModeToken; +} + +- (void)resetTrackingRects; + +#pragma mark *** Aesthetics *** + ++ (BOOL)styleSupportsAnimation:(SRRecorderStyle)style; + +- (BOOL)animates; +- (void)setAnimates:(BOOL)an; +- (SRRecorderStyle)style; +- (void)setStyle:(SRRecorderStyle)nStyle; + +#pragma mark *** Delegate *** + +- (id)delegate; +- (void)setDelegate:(id)aDelegate; + +#pragma mark *** Responder Control *** + +- (BOOL)becomeFirstResponder; +- (BOOL)resignFirstResponder; + +#pragma mark *** Key Combination Control *** + +- (BOOL)performKeyEquivalent:(NSEvent *)theEvent; +- (void)flagsChanged:(NSEvent *)theEvent; + +- (NSUInteger)allowedFlags; +- (void)setAllowedFlags:(NSUInteger)flags; + +- (NSUInteger)requiredFlags; +- (void)setRequiredFlags:(NSUInteger)flags; + +- (BOOL)allowsKeyOnly; +- (void)setAllowsKeyOnly:(BOOL)nAllowsKeyOnly escapeKeysRecord:(BOOL)nEscapeKeysRecord; +- (BOOL)escapeKeysRecord; + +- (BOOL)canCaptureGlobalHotKeys; +- (void)setCanCaptureGlobalHotKeys:(BOOL)inState; + +- (KeyCombo)keyCombo; +- (void)setKeyCombo:(KeyCombo)aKeyCombo; + +#pragma mark *** Autosave Control *** + +- (NSString *)autosaveName; +- (void)setAutosaveName:(NSString *)aName; + +// Returns the displayed key combination if set +- (NSString *)keyComboString; + +- (NSString *)keyChars; +- (NSString *)keyCharsIgnoringModifiers; + +@end + +// Delegate Methods +@interface NSObject (SRRecorderCellDelegate) +- (BOOL)shortcutRecorderCell:(SRRecorderCell *)aRecorderCell isKeyCode:(NSInteger)keyCode andFlagsTaken:(NSUInteger)flags reason:(NSString **)aReason; +- (void)shortcutRecorderCell:(SRRecorderCell *)aRecorderCell keyComboDidChange:(KeyCombo)newCombo; +@end diff --git a/ShiftIt/ShortcutRecorder.framework/Versions/A/Headers/SRRecorderControl.h b/ShiftIt/ShortcutRecorder.framework/Versions/A/Headers/SRRecorderControl.h new file mode 100644 index 00000000..777678e4 --- /dev/null +++ b/ShiftIt/ShortcutRecorder.framework/Versions/A/Headers/SRRecorderControl.h @@ -0,0 +1,79 @@ +// +// SRRecorderControl.h +// ShortcutRecorder +// +// Copyright 2006-2007 Contributors. All rights reserved. +// +// License: BSD +// +// Contributors: +// David Dauer +// Jesper +// Jamie Kirkpatrick + +#import +#import "SRRecorderCell.h" + +@interface SRRecorderControl : NSControl +{ + IBOutlet id delegate; +} + +#pragma mark *** Aesthetics *** +- (BOOL)animates; +- (void)setAnimates:(BOOL)an; +- (SRRecorderStyle)style; +- (void)setStyle:(SRRecorderStyle)nStyle; + +#pragma mark *** Delegate *** +- (id)delegate; +- (void)setDelegate:(id)aDelegate; + +#pragma mark *** Key Combination Control *** + +- (NSUInteger)allowedFlags; +- (void)setAllowedFlags:(NSUInteger)flags; + +- (BOOL)allowsKeyOnly; +- (void)setAllowsKeyOnly:(BOOL)nAllowsKeyOnly escapeKeysRecord:(BOOL)nEscapeKeysRecord; +- (BOOL)escapeKeysRecord; + +- (BOOL)canCaptureGlobalHotKeys; +- (void)setCanCaptureGlobalHotKeys:(BOOL)inState; + +- (NSUInteger)requiredFlags; +- (void)setRequiredFlags:(NSUInteger)flags; + +- (KeyCombo)keyCombo; +- (void)setKeyCombo:(KeyCombo)aKeyCombo; + +- (NSString *)keyChars; +- (NSString *)keyCharsIgnoringModifiers; + +#pragma mark *** Autosave Control *** + +- (NSString *)autosaveName; +- (void)setAutosaveName:(NSString *)aName; + +#pragma mark - + +// Returns the displayed key combination if set +- (NSString *)keyComboString; + +#pragma mark *** Conversion Methods *** + +- (NSUInteger)cocoaToCarbonFlags:(NSUInteger)cocoaFlags; +- (NSUInteger)carbonToCocoaFlags:(NSUInteger)carbonFlags; + +#pragma mark *** Binding Methods *** + +- (NSDictionary *)objectValue; +- (void)setObjectValue:(NSDictionary *)shortcut; + +@end + +// Delegate Methods +@interface NSObject (SRRecorderDelegate) +- (BOOL)shortcutRecorder:(SRRecorderControl *)aRecorder isKeyCode:(NSInteger)keyCode andFlagsTaken:(NSUInteger)flags reason:(NSString **)aReason; +- (void)shortcutRecorder:(SRRecorderControl *)aRecorder keyComboDidChange:(KeyCombo)newKeyCombo; +@end diff --git a/ShiftIt/ShortcutRecorder.framework/Versions/A/Headers/SRValidator.h b/ShiftIt/ShortcutRecorder.framework/Versions/A/Headers/SRValidator.h new file mode 100644 index 00000000..0dd8f283 --- /dev/null +++ b/ShiftIt/ShortcutRecorder.framework/Versions/A/Headers/SRValidator.h @@ -0,0 +1,34 @@ +// +// SRValidator.h +// ShortcutRecorder +// +// Copyright 2006-2007 Contributors. All rights reserved. +// +// License: BSD +// +// Contributors: +// David Dauer +// Jesper +// Jamie Kirkpatrick + +#import + +@interface SRValidator : NSObject { + id delegate; +} + +- (id) initWithDelegate:(id)theDelegate; + +- (BOOL) isKeyCode:(NSInteger)keyCode andFlagsTaken:(NSUInteger)flags error:(NSError **)error; +- (BOOL) isKeyCode:(NSInteger)keyCode andFlags:(NSUInteger)flags takenInMenu:(NSMenu *)menu error:(NSError **)error; + +- (id) delegate; +- (void) setDelegate: (id) theDelegate; + +@end + +#pragma mark - + +@interface NSObject( SRValidation ) +- (BOOL) shortcutValidator:(SRValidator *)validator isKeyCode:(NSInteger)keyCode andFlagsTaken:(NSUInteger)flags reason:(NSString **)aReason; +@end diff --git a/ShiftIt/ShortcutRecorder.framework/Versions/A/Headers/SR_LeopardView.h b/ShiftIt/ShortcutRecorder.framework/Versions/A/Headers/SR_LeopardView.h new file mode 100644 index 00000000..26b78f3e --- /dev/null +++ b/ShiftIt/ShortcutRecorder.framework/Versions/A/Headers/SR_LeopardView.h @@ -0,0 +1,15 @@ +// +// SR_LeopardView.h +// SR Leopard +// +// Created by Jesper on 2007-10-19. +// Copyright 2007 __MyCompanyName__. All rights reserved. +// + +#import + +@interface SR_LeopardView : NSView { + +} + +@end \ No newline at end of file diff --git a/ShiftIt/ShortcutRecorder.framework/Versions/A/Headers/ShortcutRecorder.h b/ShiftIt/ShortcutRecorder.framework/Versions/A/Headers/ShortcutRecorder.h new file mode 100644 index 00000000..855a2882 --- /dev/null +++ b/ShiftIt/ShortcutRecorder.framework/Versions/A/Headers/ShortcutRecorder.h @@ -0,0 +1,17 @@ +// +// ShortcutRecorder.h +// ShortcutRecorder +// - 10.5 version only; master framework header +// +// Copyright 2007 Contributors. All rights reserved. +// +// License: BSD +// +// Contributors to this file: +// Jesper + +#import +#import +#import +#import +#import diff --git a/ShiftIt/ShortcutRecorder.framework/Versions/A/Resources/Info.plist b/ShiftIt/ShortcutRecorder.framework/Versions/A/Resources/Info.plist new file mode 100644 index 00000000..40a7e46b --- /dev/null +++ b/ShiftIt/ShortcutRecorder.framework/Versions/A/Resources/Info.plist @@ -0,0 +1,20 @@ + + + + + CFBundleDevelopmentRegion + English + CFBundleExecutable + ShortcutRecorder + CFBundleIdentifier + net.wafflesoftware.ShortcutRecorder.framework.Leopard + CFBundleInfoDictionaryVersion + 6.0 + CFBundlePackageType + FMWK + CFBundleSignature + ???? + CFBundleVersion + 1.0 + + diff --git a/ShiftIt/ShortcutRecorder.framework/Versions/A/ShortcutRecorder b/ShiftIt/ShortcutRecorder.framework/Versions/A/ShortcutRecorder new file mode 100755 index 0000000000000000000000000000000000000000..af9aa30e384c0795d71328880429fa1f0eb0637d GIT binary patch literal 333468 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
9hu(1mE)Ar3cHB6 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 literal 0 HcmV?d00001 diff --git a/ShiftIt/ShortcutRecorder.framework/Versions/Current b/ShiftIt/ShortcutRecorder.framework/Versions/Current new file mode 120000 index 00000000..8c7e5a66 --- /dev/null +++ b/ShiftIt/ShortcutRecorder.framework/Versions/Current @@ -0,0 +1 @@ +A \ No newline at end of file From 6d0c7f1b45abe7cc5870a4a3f18f3823c6e46f11 Mon Sep 17 00:00:00 2001 From: skandocious Date: Thu, 7 Oct 2010 13:35:08 -0700 Subject: [PATCH 3/3] Fixed typos in README --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 902a630f..7cb7d832 100644 --- a/README.md +++ b/README.md @@ -21,13 +21,13 @@ Added application & status menu icons - thanks to free icons available at [mysit Added ability to reconfigure hotkeys in Preferences - credit: Skandocious v1.4: -Large code revamp to utilize ShortcutRecorder framework[8] capturing key bindings +Large code revamp to utilize [ShortcutRecorder][8] framework for capturing key bindings ShortcutRecorder ---------------- -Version 1.4 of ShiftIt employs the ShortcutRecorder framework for capturing key bindings during hotkey reconfiguration. +Version 1.4 of ShiftIt employs the [ShortcutRecorder][8] framework for capturing key bindings during hotkey reconfiguration. Copyright (c) 2006, contributors to ShortcutRecorder. (See the contributors listed in detail later in the file, or see .)