X-Git-Url: http://git.ithinksw.org/MenuTunes.git/blobdiff_plain/4416c262f94695ab705ab81826b10540923407e4..865ed626fce033da225a4a93646ad185f72c74ff:/MainController.m diff --git a/MainController.m b/MainController.m index da07757..0c19559 100755 --- a/MainController.m +++ b/MainController.m @@ -11,6 +11,10 @@ #import "StatusWindowController.h" #import "StatusItemHack.h" +@interface NSMenu (MenuImpl) +- (id)_menuImpl; +@end + @interface NSCarbonMenuImpl:NSObject { NSMenu *_menu; @@ -360,14 +364,14 @@ static MainController *sharedController; if ([[self currentRemote] playerStateUniqueIdentifier] == nil) { if ([statusItem isEnabled]) { [statusItem setToolTip:@"iTunes not responding."]; - [self clearHotKeys]; + [[ITHotKeyCenter sharedCenter] setEnabled:NO]; } [statusItem setEnabled:NO]; return; } else if (![statusItem isEnabled]) { [statusItem setEnabled:YES]; [statusItem setToolTip:_toolTip]; - [self setupHotKeys]; + [[ITHotKeyCenter sharedCenter] setEnabled:YES]; return; } @@ -391,41 +395,40 @@ static MainController *sharedController; timerUpdating = YES; [statusItem setEnabled:NO]; - + NS_DURING latestPlaylistClass = [[self currentRemote] currentPlaylistClass]; - [menuController rebuildSubmenus]; - - if ( [df boolForKey:@"showSongInfoOnChange"] ) { - [self performSelector:@selector(showCurrentTrackInfo) withObject:nil afterDelay:0.0]; - } - - [self setLatestSongIdentifier:[[self currentRemote] playerStateUniqueIdentifier]]; - - //Create the tooltip for the status item - if ( [df boolForKey:@"showToolTip"] ) { - NSString *artist = [[self currentRemote] currentSongArtist]; - NSString *title = [[self currentRemote] currentSongTitle]; - ITDebugLog(@"Creating status item tooltip."); - if (artist) { - _toolTip = [NSString stringWithFormat:@"%@ - %@", artist, title]; - } else if (title) { - _toolTip = title; - } else { - _toolTip = @"No Song Playing"; - } - [statusItem setToolTip:_toolTip]; - } else { - [statusItem setToolTip:nil]; - } + + if ([menuController rebuildSubmenus]) { + if ( [df boolForKey:@"showSongInfoOnChange"] ) { + [self performSelector:@selector(showCurrentTrackInfo) withObject:nil afterDelay:0.0]; + } + + [self setLatestSongIdentifier:[[self currentRemote] playerStateUniqueIdentifier]]; + //Create the tooltip for the status item + if ( [df boolForKey:@"showToolTip"] ) { + NSString *artist = [[self currentRemote] currentSongArtist]; + NSString *title = [[self currentRemote] currentSongTitle]; + ITDebugLog(@"Creating status item tooltip."); + if (artist) { + _toolTip = [NSString stringWithFormat:@"%@ - %@", artist, title]; + } else if (title) { + _toolTip = title; + } else { + _toolTip = @"No Song Playing"; + } + [statusItem setToolTip:_toolTip]; + } else { + [statusItem setToolTip:nil]; + } + } NS_HANDLER [self networkError:localException]; NS_ENDHANDLER - timerUpdating = NO; [statusItem setEnabled:YES]; } - + if ([networkController isConnectedToServer]) { [statusItem setMenu:([[self currentRemote] playerRunningState] == ITMTRemotePlayerRunning) ? [menuController menu] : [menuController menuForNoPlayer]]; } @@ -435,17 +438,17 @@ static MainController *sharedController; { ITDebugLog(@"Menu clicked."); - if ([[self currentRemote] playerStateUniqueIdentifier] == nil) { + if ( ([[self currentRemote] playerStateUniqueIdentifier] == nil) && playerRunningState == ITMTRemotePlayerRunning ) { if ([statusItem isEnabled]) { [statusItem setToolTip:@"iTunes not responding."]; - [self clearHotKeys]; + [[ITHotKeyCenter sharedCenter] setEnabled:NO]; } [statusItem setEnabled:NO]; return; } else if (![statusItem isEnabled]) { [statusItem setEnabled:YES]; [statusItem setToolTip:_toolTip]; - [self setupHotKeys]; + [[ITHotKeyCenter sharedCenter] setEnabled:YES]; return; } @@ -1230,7 +1233,7 @@ static MainController *sharedController; [self setupHotKeys]; //playerRunningState = ITMTRemotePlayerRunning; playerRunningState = [[self currentRemote] playerRunningState]; - + [refreshTimer invalidate]; refreshTimer = [[NSTimer scheduledTimerWithTimeInterval:([networkController isConnectedToServer] ? 10.0 : 0.5) target:self @@ -1393,6 +1396,8 @@ static MainController *sharedController; [refreshTimer invalidate]; [refreshTimer release]; refreshTimer = nil; + [statusItem setEnabled:YES]; + [statusItem setToolTip:@"iTunes not running."]; [self clearHotKeys]; if ([df objectForKey:@"ShowPlayer"] != nil) {