X-Git-Url: https://git.yukkurigames.com/?p=enjoyable.git;a=blobdiff_plain;f=EnjoyableApplicationDelegate.m;h=313ba9a2fbf65df4a82e89369a7ceade015b0204;hp=74e8265cec07c98326220ea93c38ce87d64fc530;hb=6044e47a97de33531c47cd209b30d4405aa0530a;hpb=ca998dd950f0b1900b21dc05cf57987d09b4e70e diff --git a/EnjoyableApplicationDelegate.m b/EnjoyableApplicationDelegate.m index 74e8265..313ba9a 100644 --- a/EnjoyableApplicationDelegate.m +++ b/EnjoyableApplicationDelegate.m @@ -13,12 +13,10 @@ #import "NJOutputController.h" #import "NJEvents.h" -@implementation EnjoyableApplicationDelegate { - NSInteger mappingsMenuIndex; -} +@implementation EnjoyableApplicationDelegate -- (void)didSwitchApplication:(NSNotification *)notification { - NSRunningApplication *currentApp = notification.userInfo[NSWorkspaceApplicationKey]; +- (void)didSwitchApplication:(NSNotification *)note { + NSRunningApplication *currentApp = note.userInfo[NSWorkspaceApplicationKey]; [self.mappingsController activateMappingForProcess:currentApp.localizedName]; } @@ -28,6 +26,11 @@ 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:) @@ -39,20 +42,22 @@ name:NJEventTranslationDeactivated object:nil]; - mappingsMenuIndex = dockMenuBase.numberOfItems; - while (![dockMenuBase itemAtIndex:mappingsMenuIndex - 1].isSeparatorItem) - --mappingsMenuIndex; - - self.outputController.enabled = NO; [self.inputController setup]; [self.mappingsController load]; } -- (void)applicationWillTerminate:(NSNotification *)aNotification { - [NSUserDefaults.standardUserDefaults synchronize]; +- (void)applicationDidBecomeActive:(NSNotification *)notification { + [window makeKeyAndOrderFront:nil]; +} + +- (BOOL)applicationShouldHandleReopen:(NSApplication *)theApplication + hasVisibleWindows:(BOOL)flag { + [window makeKeyAndOrderFront:nil]; + return NO; } - (void)eventTranslationActivated:(NSNotification *)note { + [NSProcessInfo.processInfo disableAutomaticTermination:@"Input translation is active."]; [NSWorkspace.sharedWorkspace.notificationCenter addObserver:self selector:@selector(didSwitchApplication:) @@ -62,6 +67,7 @@ } - (void)eventTranslationDeactivated:(NSNotification *)note { + [NSProcessInfo.processInfo enableAutomaticTermination:@"Input translation is active."]; [NSWorkspace.sharedWorkspace.notificationCenter removeObserver:self name:NSWorkspaceDidActivateApplicationNotification @@ -69,36 +75,33 @@ NSLog(@"Ignoring application changes."); } -- (IBAction)toggleActivity:(id)sender { - self.inputController.translatingEvents = !self.inputController.translatingEvents; -} - -- (void)mappingsChanged { - NSInteger removeFrom = mappingsMenuIndex; - while (dockMenuBase.numberOfItems > removeFrom) - [dockMenuBase removeItemAtIndex:dockMenuBase.numberOfItems - 1]; +- (void)mappingListDidChange:(NSNotification *)note { + NSArray *mappings = note.object; + while (dockMenuBase.lastItem.representedObject) + [dockMenuBase removeLastItem]; int added = 0; - for (NJMapping *mapping in self.mappingsController) { + for (NJMapping *mapping in mappings) { NSString *keyEquiv = ++added < 10 ? @(added).stringValue : @""; - [dockMenuBase addItemWithTitle:mapping.name - action:@selector(chooseMapping:) - keyEquivalent:keyEquiv]; - + NSMenuItem *item = [[NSMenuItem alloc] initWithTitle:mapping.name + action:@selector(chooseMapping:) + keyEquivalent:keyEquiv]; + item.representedObject = mapping; + item.state = mapping == self.mappingsController.currentMapping; + [dockMenuBase addItem:item]; } [_outputController refreshMappings]; } - (void)mappingDidChange:(NSNotification *)note { NJMapping *current = note.object; - NSArray *mappings = self.mappingsController.mappings; - for (NSUInteger i = 0; i < mappings.count; ++i) - [dockMenuBase itemAtIndex:i + mappingsMenuIndex].state = mappings[i] == current; + for (NSMenuItem *item in dockMenuBase.itemArray) + if (item.representedObject) + item.state = item.representedObject == current; } -- (void)chooseMapping:(id)sender { - NSInteger idx = [dockMenuBase indexOfItem:sender] - mappingsMenuIndex; - NJMapping *chosen = self.mappingsController[idx]; - [_mappingsController activateMapping:chosen]; +- (void)chooseMapping:(NSMenuItem *)sender { + NJMapping *chosen = sender.representedObject; + [self.mappingsController activateMapping:chosen]; } @end