From 1080a73fd64f3e3033495d5852ddfa253ef6ffd7 Mon Sep 17 00:00:00 2001 From: Mark Jerde Date: Sat, 16 May 2015 09:30:26 -0500 Subject: [PATCH] Option-click Flycut menu icon to disable/enable adding newly-copied items to the Flycut history. --- AppController.h | 6 ++- AppController.m | 43 +++++++++++++++++- Flycut.xcodeproj/project.pbxproj | 8 ++++ .../com.generalarcade.flycut.disabled.16.png | Bin 0 -> 4604 bytes .../com.generalarcade.flycut.disabled.32.png | Bin 0 -> 6052 bytes 5 files changed, 55 insertions(+), 2 deletions(-) create mode 100644 Resources/com.generalarcade.flycut.disabled.16.png create mode 100644 Resources/com.generalarcade.flycut.disabled.32.png diff --git a/AppController.h b/AppController.h index 45fa66a..5715780 100755 --- a/AppController.h +++ b/AppController.h @@ -17,7 +17,7 @@ @class SGHotKey; -@interface AppController : NSObject { +@interface AppController : NSObject { BezelWindow *bezel; SGHotKey *mainHotKey; IBOutlet SRRecorderControl *mainRecorder; @@ -35,6 +35,9 @@ // Status item -- the little icon in the menu bar NSStatusItem *statusItem; + NSString *statusItemText; + NSImage *statusItemImage; + // The menu attatched to same IBOutlet NSMenu *jcMenu; IBOutlet NSSlider * heightSlider; @@ -46,6 +49,7 @@ NSPasteboard *jcPasteboard; // Track the clipboard count so we only act when its contents change NSNumber *pbCount; + BOOL disableStore; //stores PasteboardCount for internal Jumpcut pasteboard actions so they don't trigger any events NSNumber *pbBlockCount; //Preferences diff --git a/AppController.m b/AppController.m index b1f6998..9af1026 100755 --- a/AppController.m +++ b/AppController.m @@ -109,6 +109,7 @@ [statusItem setImage:[NSImage imageNamed:@"com.generalarcade.flycut.16.png"]]; } [statusItem setMenu:jcMenu]; + [jcMenu setDelegate:self]; [statusItem setEnabled:YES]; // If our preferences indicate that we are saving, load the dictionary from the saved plist @@ -141,6 +142,46 @@ [NSApp activateIgnoringOtherApps: YES]; } +-(void)menuWillOpen:(NSMenu *)menu +{ + NSEvent *event = [NSApp currentEvent]; + if([event modifierFlags] & NSAlternateKeyMask) { + [menu cancelTracking]; + if (disableStore) + { + // Update the pbCount so we don't enable and have it immediately copy the thing the user was trying to avoid. + // Code copied from pollPB, which is disabled at this point, so the "should be okay" should still be okay. + + // Reload pbCount with the current changeCount + // Probably poor coding technique, but pollPB should be the only thing messing with pbCount, so it should be okay + [pbCount release]; + pbCount = [[NSNumber numberWithInt:[jcPasteboard changeCount]] retain]; + } + disableStore = [self toggleMenuIconDisabled]; + } +} + +-(bool)toggleMenuIconDisabled +{ + // Toggles the "disabled" look of the menu icon. Returns if the icon looks disabled or not, allowing the caller to decide if anything is actually being disabled or if they just wanted the icon to be a status display. + if (nil == statusItemText) + { + statusItemText = [statusItem title]; + statusItemImage = [statusItem image]; + [statusItem setTitle: @""]; + [statusItem setImage: [NSImage imageNamed:@"com.generalarcade.flycut.disabled.16.png"]]; + return true; + } + else + { + [statusItem setTitle: statusItemText]; + [statusItem setImage: statusItemImage]; + statusItemText = nil; + statusItemImage = nil; + } + return false; +} + -(IBAction) activateAndOrderFrontStandardAboutPanel:(id)sender { [[NSApplication sharedApplication] activateIgnoringOtherApps:YES]; @@ -315,7 +356,7 @@ -(void)pollPB:(NSTimer *)timer { NSString *type = [jcPasteboard availableTypeFromArray:[NSArray arrayWithObject:NSStringPboardType]]; - if ( [pbCount intValue] != [jcPasteboard changeCount] ) { + if ( [pbCount intValue] != [jcPasteboard changeCount] && !disableStore ) { // Reload pbCount with the current changeCount // Probably poor coding technique, but pollPB should be the only thing messing with pbCount, so it should be okay [pbCount release]; diff --git a/Flycut.xcodeproj/project.pbxproj b/Flycut.xcodeproj/project.pbxproj index 45810f7..178500e 100755 --- a/Flycut.xcodeproj/project.pbxproj +++ b/Flycut.xcodeproj/project.pbxproj @@ -59,6 +59,8 @@ 8D11072A0486CEB800E47090 /* MainMenu.nib in Resources */ = {isa = PBXBuildFile; fileRef = 29B97318FDCFA39411CA2CEA /* MainMenu.nib */; }; 8D11072D0486CEB800E47090 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 29B97316FDCFA39411CA2CEA /* main.m */; settings = {ATTRIBUTES = (); }; }; 8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; + 8D2E28881B0669F500AE62C8 /* com.generalarcade.flycut.disabled.16.png in Resources */ = {isa = PBXBuildFile; fileRef = 8D2E28841B0669F500AE62C8 /* com.generalarcade.flycut.disabled.16.png */; }; + 8D2E28891B0669F500AE62C8 /* com.generalarcade.flycut.disabled.32.png in Resources */ = {isa = PBXBuildFile; fileRef = 8D2E28851B0669F500AE62C8 /* com.generalarcade.flycut.disabled.32.png */; }; AABE497C09FF9CD000A6A239 /* AppController.m in Sources */ = {isa = PBXBuildFile; fileRef = AABE497B09FF9CD000A6A239 /* AppController.m */; }; AAFAC85F0A1BD9DD00DC6025 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AAFAC84A0A1BD9DD00DC6025 /* Carbon.framework */; }; DB46BEEB143466ED0025EA0E /* DBUserDefaults.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DB46BEEA143466ED0025EA0E /* DBUserDefaults.framework */; }; @@ -163,6 +165,8 @@ 77A4F3AB139BD72300F39666 /* SGKeyCombo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SGKeyCombo.h; sourceTree = ""; }; 77A4F3AC139BD72300F39666 /* SGKeyCombo.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SGKeyCombo.m; sourceTree = ""; }; 8D1107320486CEB800E47090 /* Flycut.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Flycut.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 8D2E28841B0669F500AE62C8 /* com.generalarcade.flycut.disabled.16.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = com.generalarcade.flycut.disabled.16.png; path = Resources/com.generalarcade.flycut.disabled.16.png; sourceTree = ""; }; + 8D2E28851B0669F500AE62C8 /* com.generalarcade.flycut.disabled.32.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = com.generalarcade.flycut.disabled.32.png; path = Resources/com.generalarcade.flycut.disabled.32.png; sourceTree = ""; }; AABE497A09FF9CD000A6A239 /* AppController.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = AppController.h; sourceTree = ""; }; AABE497B09FF9CD000A6A239 /* AppController.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = AppController.m; sourceTree = ""; }; AAFAC84A0A1BD9DD00DC6025 /* Carbon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = /System/Library/Frameworks/Carbon.framework; sourceTree = ""; }; @@ -262,6 +266,8 @@ 7794D3D6139BF2B10047E862 /* flycut.icns */, 7761C8CD139BE06B000FB3AB /* com.generalarcade.flycut.16.png */, 7761C8CE139BE06B000FB3AB /* com.generalarcade.flycut.32.png */, + 8D2E28841B0669F500AE62C8 /* com.generalarcade.flycut.disabled.16.png */, + 8D2E28851B0669F500AE62C8 /* com.generalarcade.flycut.disabled.32.png */, 7761C8D1139BE06B000FB3AB /* jumpcut.icns */, 7761C8EB139BE09D000FB3AB /* Info.plist */, 7761C8D2139BE06B000FB3AB /* net.sf.jumpcut.ghost_scissors_small.png */, @@ -480,10 +486,12 @@ 7761C8DB139BE06B000FB3AB /* com.generalarcade.flycut.16.png in Resources */, 7761C8DC139BE06B000FB3AB /* com.generalarcade.flycut.32.png in Resources */, 7761C8DF139BE06B000FB3AB /* jumpcut.icns in Resources */, + 8D2E28891B0669F500AE62C8 /* com.generalarcade.flycut.disabled.32.png in Resources */, 7761C8E0139BE06B000FB3AB /* net.sf.jumpcut.ghost_scissors_small.png in Resources */, 7761C8E1139BE06B000FB3AB /* net.sf.jumpcut.preferences.acknowledgements.tiff in Resources */, 7761C8E2139BE06B000FB3AB /* net.sf.jumpcut.preferences.appearance.tiff in Resources */, 7761C8E3139BE06B000FB3AB /* net.sf.jumpcut.preferences.general.tiff in Resources */, + 8D2E28881B0669F500AE62C8 /* com.generalarcade.flycut.disabled.16.png in Resources */, 7761C8E4139BE06B000FB3AB /* net.sf.jumpcut.preferences.hotkey.tiff in Resources */, 7761C8E5139BE06B000FB3AB /* net.sf.jumpcut.scissors_bw16.png in Resources */, 7761C8E6139BE06B000FB3AB /* RemoveShortcut.tif in Resources */, diff --git a/Resources/com.generalarcade.flycut.disabled.16.png b/Resources/com.generalarcade.flycut.disabled.16.png new file mode 100644 index 0000000000000000000000000000000000000000..121aa497e95cc933e21e1510e3f25d13ba5b233b GIT binary patch literal 4604 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 L7^s)2+TQs;6ptV0 literal 0 HcmV?d00001 diff --git a/Resources/com.generalarcade.flycut.disabled.32.png b/Resources/com.generalarcade.flycut.disabled.32.png new file mode 100644 index 0000000000000000000000000000000000000000..f87b6321811ed61d8fb13f77f327060300f6dfc9 GIT binary patch literal 6052 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 literal 0 HcmV?d00001