X-Git-Url: https://git.yukkurigames.com/?p=enjoyable.git;a=blobdiff_plain;f=Categories%2FNSRunningApplication%2BNJPossibleNames.m;fp=Categories%2FNSRunningApplication%2BNJPossibleNames.m;h=7a7bd6378d7a6287ff4b7a60cd60002637328b7c;hp=895134cb9aef5319c700ba983093d34e467a1b77;hb=7fa330d1595971c7ddf79aba72cc85ab1b6c95b2;hpb=8b42ed7eb4da99a7474fdc3ddce9a450da36cc61 diff --git a/Categories/NSRunningApplication+NJPossibleNames.m b/Categories/NSRunningApplication+NJPossibleNames.m index 895134c..7a7bd63 100644 --- a/Categories/NSRunningApplication+NJPossibleNames.m +++ b/Categories/NSRunningApplication+NJPossibleNames.m @@ -10,6 +10,21 @@ @implementation NSRunningApplication (NJPossibleNames) +- (NSArray *)windowTitles { + NSMutableArray *titles = [[NSMutableArray alloc] initWithCapacity:4]; + NSArray *windows = CFBridgingRelease(CGWindowListCopyWindowInfo(kCGWindowListOptionAll, kCGNullWindowID)); + for (NSDictionary *props in windows) { + NSNumber *pid = props[(id)kCGWindowOwnerPID]; + if (pid.longValue == self.processIdentifier && props[(id)kCGWindowName]) + [titles addObject:props[(id)kCGWindowName]]; + } + return titles; +} + +- (NSString *)frontWindowTitle { + return self.windowTitles[0]; +} + - (NSArray *)possibleMappingNames { NSMutableArray *names = [[NSMutableArray alloc] initWithCapacity:4]; if (self.bundleIdentifier) @@ -20,6 +35,8 @@ [names addObject:[self.bundleURL.lastPathComponent stringByDeletingPathExtension]]; if (self.executableURL) [names addObject:self.executableURL.lastPathComponent]; + if (self.frontWindowTitle) + [names addObject:self.frontWindowTitle]; return names; } @@ -32,13 +49,17 @@ @"com.macromedia.Flash Player Debugger.app", @"com.macromedia.Flash Player.app", ]; - BOOL probablyWrong = [genericBundles containsObject:self.bundleIdentifier]; + NSArray *genericExecutables = @[ @"wine.bin" ]; + BOOL probablyWrong = ([genericBundles containsObject:self.bundleIdentifier] + || [genericExecutables containsObject:self.localizedName]); if (!probablyWrong && self.localizedName) return self.localizedName; else if (!probablyWrong && self.bundleIdentifier) return self.bundleIdentifier; else if (self.bundleURL) return [self.bundleURL.lastPathComponent stringByDeletingPathExtension]; + else if (self.frontWindowTitle) + return self.frontWindowTitle; else if (self.executableURL) return self.executableURL.lastPathComponent; else if (self.localizedName)