- hot keys can't be set when NSBGOnly is on. The window is not key,
so the KeyBroadcaster does not pick up key combos
- going to need a different way of defining key combos
-¥ Optimize, this thing is big and slow :(
+¥ Optimize
¥ Apple Events! Apple Events! Apple Events!
-
-¥ I think I found a slight memory leak:
- 425 MenuTunes 7.8% 8:29.87 1 56 4827 215M+ 3.14M 135M- 599M+
+¥ Upcoming songs menu items are disabled after launching iTunes and playing
*/
#import "MenuTunes.h"
- (void)applicationDidFinishLaunching:(NSNotification *)note
{
+ asComponent = OpenDefaultComponent(kOSAComponentType, kAppleScriptSubtype);
if (![[NSUserDefaults standardUserDefaults] objectForKey:@"menu"])
{
[[NSUserDefaults standardUserDefaults] setObject:[NSArray arrayWithObjects:@"Play/Pause", @"Next Track", @"Previous Track", @"Fast Forward", @"Rewind", @"<separator>", @"Upcoming Songs", @"Playlists", @"<separator>", @"PreferencesÉ", @"Quit", @"<separator>", @"Current Track Info", nil] forKey:@"menu"];
{
[refreshTimer invalidate];
}
+ CloseComponent(asComponent);
[statusItem release];
[menu release];
[view release];
[menu addItem:[NSMenuItem separatorItem]];
}
}
+
curTrackIndex = -1; //Force update of everything
[self timerUpdate]; //Updates dynamic info in the menu
NSMenuItem *songItem;
songItem = [[NSMenuItem alloc] initWithTitle:curSong action:@selector(playTrack:) keyEquivalent:@""];
[songItem setTarget:self];
- [songItem setEnabled:YES];
[songItem setRepresentedObject:[NSNumber numberWithInt:i]];
[upcomingSongsMenu addItem:songItem];
[songItem release];
AECreateDesc(typeChar, [script cString], [script cStringLength],
&scriptDesc);
- OSADoScript(OpenDefaultComponent(kOSAComponentType, kAppleScriptSubtype), &scriptDesc, kOSANullScript, typeChar, kOSAModeCanInteract, &resultDesc);
+ OSADoScript(asComponent, &scriptDesc, kOSANullScript, typeChar, kOSAModeCanInteract, &resultDesc);
length = AEGetDescDataSize(&resultDesc);
buffer = malloc(length);
{
result = [result substringWithRange:NSMakeRange(1, [result length] - 2)];
}
- [script release];
free(buffer);
buffer = NULL;
return result;
- (void)timerUpdate
{
int pid;
+
if (GetProcessPID(&iTunesPSN, &pid) == noErr)
{
int trackPlayingIndex = [[self runScriptAndReturnResult:@"return index of current track"] intValue];
+
if (trackPlayingIndex != curTrackIndex)
{
[self updateMenu];
curTrackIndex = trackPlayingIndex;
}
-
+
//Update Play/Pause menu item
if (playPauseMenuItem)
{