16 #ifndef NS_RETURNS_INNER_POINTER
17 #define NS_RETURNS_INNER_POINTER
19 #import <AppKit/AppKit.h>
20 #undef NS_RETURNS_INNER_POINTER
25 #include <mach-o/dyld.h>
46 static dispatch_once_t once = 0;
47 dispatch_once(&once, ^{
54 VUserLog(
"Error: Couldn't find VuoApp_mainThread.");
61 VUserLog(
"Error: VuoApp_mainThread isn't set.");
89 dispatch_sync(dispatch_get_main_queue(), ^{
119 char **dylibPath = (
char **)dlsym(RTLD_SELF,
"VuoApp_dylibPath");
121 dylibPath = (
char **)dlsym(RTLD_DEFAULT,
"VuoApp_dylibPath");
124 char *filename = strrchr(*dylibPath,
'/');
127 char *name = strdup(filename + 1);
128 name[strlen(name) - strlen("-XXXXXX.dylib")] = 0;
130 if (strcmp(name,
"VuoComposition") == 0)
133 return strdup(
"Vuo Composition");
143 char *runnerName = (
char *)malloc(2*MAXCOMLEN);
144 proc_name(
runnerPid, runnerName, 2*MAXCOMLEN);
148 NSBundle *mainBundle = [NSBundle mainBundle];
149 NSString *name = [mainBundle objectForInfoDictionaryKey:@"CFBundleDisplayName"];
151 name = [mainBundle objectForInfoDictionaryKey:@"CFBundleName"];
153 name = [mainBundle objectForInfoDictionaryKey:@"CFBundleExecutable"];
155 name = [[[mainBundle executablePath] stringByDeletingPathExtension] lastPathComponent];
158 return strdup([name UTF8String]);
170 NSAutoreleasePool *pool = [NSAutoreleasePool new];
173 NSApplication *app = [NSApplication sharedApplication];
183 [app setActivationPolicy:requiresDockIcon ? NSApplicationActivationPolicyRegular : NSApplicationActivationPolicyAccessory];
186 [app finishLaunching];
223 && NSApplication.sharedApplication.activationPolicy != NSApplicationActivationPolicyRegular)
224 [NSApp setActivationPolicy:NSApplicationActivationPolicyRegular];
229 static dispatch_once_t once = 0;
230 dispatch_once(&once, ^{
245 SEL stopRecording =
@selector(stopRecording);
246 SEL compositionUidSel =
@selector(compositionUid);
247 for (NSWindow *window in [NSApp windows])
251 if ([window respondsToSelector:stopRecording]
252 && [window respondsToSelector:compositionUidSel]
253 && (uint64_t)[window performSelector:compositionUidSel] == compositionUid)
254 [window performSelector:stopRecording];
256 if ([NSApp windows].count)
259 [NSApp setActivationPolicy:NSApplicationActivationPolicyProhibited];
262 [NSRunLoop.currentRunLoop runUntilDate:[NSDate dateWithTimeIntervalSinceNow:VuoApp_windowFadeSeconds + fudge]];
284 free(compositionState);
291 dispatch_sync(dispatch_get_main_queue(), ^{