X-Git-Url: https://git.yukkurigames.com/?p=enjoyable.git;a=blobdiff_plain;f=Classes%2FEnjoyableApplicationDelegate.m;h=f02ec90663ba6e4d29a7db97076b4f6f38e85d9f;hp=634f3621ab9ce5f4eaeb02d65d6534971dbb5f24;hb=f8ae7787fe3fe272eaf04586e3007339c907fb33;hpb=1d9578185de7fb08cf1f4b1e42812e87d8e18040 diff --git a/Classes/EnjoyableApplicationDelegate.m b/Classes/EnjoyableApplicationDelegate.m index 634f362..f02ec90 100644 --- a/Classes/EnjoyableApplicationDelegate.m +++ b/Classes/EnjoyableApplicationDelegate.m @@ -9,8 +9,6 @@ #import "NJMapping.h" #import "NJMappingsController.h" -#import "NJDeviceController.h" -#import "NJOutputController.h" #import "NJEvents.h" @implementation EnjoyableApplicationDelegate { @@ -29,11 +27,6 @@ selector:@selector(mappingDidChange:) name:NJEventMappingChanged object:nil]; - [NSNotificationCenter.defaultCenter - addObserver:self - selector:@selector(mappingListDidChange:) - name:NJEventMappingListChanged - object:nil]; [NSNotificationCenter.defaultCenter addObserver:self selector:@selector(eventTranslationActivated:) @@ -55,7 +48,14 @@ } - (void)applicationDidFinishLaunching:(NSNotification *)notification { - [window makeKeyAndOrderFront:nil]; + if (NSRunningApplication.currentApplication.wasLaunchedAsLoginItemOrResume + && [NSUserDefaults.standardUserDefaults boolForKey:@"hidden in status item"]) { + [self transformIntoElement:self]; + NSApplication *app = notification.object; + [app deactivate]; + } else { + [window makeKeyAndOrderFront:nil]; + } } - (BOOL)applicationShouldHandleReopen:(NSApplication *)theApplication @@ -72,11 +72,18 @@ [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(transformIntoElement:) object:self]; + [NSUserDefaults.standardUserDefaults setBool:NO forKey:@"hidden in status item"]; +} + +- (void)applicationWillBecomeActive:(NSNotification *)notification { + if (window.isVisible) + [self restoreToForeground:notification]; } - (void)transformIntoElement:(id)sender { ProcessSerialNumber psn = { 0, kCurrentProcess }; TransformProcessType(&psn, kProcessTransformToUIElementApplication); + [NSUserDefaults.standardUserDefaults setBool:YES forKey:@"hidden in status item"]; } - (void)flashStatusItem { @@ -99,8 +106,6 @@ } - (void)eventTranslationActivated:(NSNotification *)note { - [dockMenu itemAtIndex:0].state = NSOnState; - [statusItemMenu itemAtIndex:0].state = NSOnState; statusItem.image = [NSImage imageNamed:@"Status Menu Icon"]; [NSWorkspace.sharedWorkspace.notificationCenter addObserver:self @@ -110,8 +115,6 @@ } - (void)eventTranslationDeactivated:(NSNotification *)note { - [dockMenu itemAtIndex:0].state = NSOffState; - [statusItemMenu itemAtIndex:0].state = NSOffState; statusItem.image = [NSImage imageNamed:@"Status Menu Icon Disabled"]; [NSWorkspace.sharedWorkspace.notificationCenter removeObserver:self @@ -119,56 +122,7 @@ object:nil]; } -- (void)restoreWindowAndShowMappings:(id)sender { - [self restoreToForeground:sender]; - [self.mappingsController mappingPressed:sender]; -} - -- (void)addMappingsToMenu:(NSMenu *)menu withKeys:(BOOL)withKeys atIndex:(NSInteger)index { - static const NSUInteger MAXIMUM_ITEMS = 15; - int added = 0; - for (NJMapping *mapping in self.mappingsController) { - NSString *keyEquiv = (++added < 10 && withKeys) ? @(added).stringValue : @""; - NSMenuItem *item = [[NSMenuItem alloc] initWithTitle:mapping.name - action:@selector(chooseMapping:) - keyEquivalent:keyEquiv]; - item.representedObject = mapping; - item.state = mapping == self.mappingsController.currentMapping; - [menu insertItem:item atIndex:index++]; - if (added == MAXIMUM_ITEMS && self.mappingsController.mappings.count > MAXIMUM_ITEMS + 1) { - NSString *msg = [NSString stringWithFormat:@"(and %lu more…)", - self.mappingsController.mappings.count - MAXIMUM_ITEMS]; - NSMenuItem *end = [[NSMenuItem alloc] initWithTitle:msg - action:@selector(restoreWindowAndShowMappings:) - keyEquivalent:@""]; - // There must be a represented object here so the item gets - // removed correctly when the menus are regenerated. - end.representedObject = self.mappingsController.mappings; - end.target = self; - [menu insertItem:end atIndex:index++]; - break; - } - } -} - -- (void)mappingListDidChange:(NSNotification *)note { - while (mappingsMenu.lastItem.representedObject) - [mappingsMenu removeLastItem]; - [self addMappingsToMenu:mappingsMenu withKeys:YES atIndex:mappingsMenu.numberOfItems]; - while ([statusItemMenu itemAtIndex:2].representedObject) - [statusItemMenu removeItemAtIndex:2]; - [self addMappingsToMenu:statusItemMenu withKeys:NO atIndex:2]; -} - - (void)mappingDidChange:(NSNotification *)note { - NJMapping *current = note.object; - for (NSMenuItem *item in mappingsMenu.itemArray) - if (item.representedObject) - item.state = item.representedObject == current; - for (NSMenuItem *item in statusItemMenu.itemArray) - if (item.representedObject) - item.state = item.representedObject == current; - if (!window.isVisible) for (int i = 0; i < 4; ++i) [self performSelector:@selector(flashStatusItem) @@ -176,15 +130,7 @@ afterDelay:0.2 * i]; } -- (void)chooseMapping:(NSMenuItem *)sender { - NJMapping *chosen = sender.representedObject; - [self.mappingsController activateMapping:chosen]; -} - - (NSMenu *)applicationDockMenu:(NSApplication *)sender { - while (dockMenu.lastItem.representedObject) - [dockMenu removeLastItem]; - [self addMappingsToMenu:dockMenu withKeys:NO atIndex:dockMenu.numberOfItems]; return dockMenu; } @@ -195,5 +141,14 @@ return YES; } +- (void)mappingWasChosen:(NJMapping *)mapping { + [self.mappingsController activateMapping:mapping]; +} + +- (void)mappingListShouldOpen { + [self restoreToForeground:self]; + [self.mappingsController mappingPressed:self]; +} + @end