Source/OWSpellingPerContactPlugin.m
changeset 2808 6a41be7632e5
parent 1946 866f1f27b315
child 2902 2911fea407a3
     1.1 --- a/Source/OWSpellingPerContactPlugin.m	Wed Apr 22 17:18:01 2009 -0700
     1.2 +++ b/Source/OWSpellingPerContactPlugin.m	Thu Oct 29 12:43:40 2009 -0400
     1.3 @@ -18,6 +18,9 @@
     1.4  #import <Adium/AIChat.h>
     1.5  #import <Adium/AIListContact.h>
     1.6  
     1.7 +#import <AIUtilities/AIApplicationAdditions.h>
     1.8 +#import <AIUtilities/AILeopardCompatibility.h>
     1.9 +
    1.10  #define GROUP_LAST_USED_SPELLING	@"Last Used Spelling"
    1.11  #define KEY_LAST_USED_SPELLING		@"Last Used Spelling Languge"
    1.12  
    1.13 @@ -49,13 +52,15 @@
    1.14  	languageDict = [[NSMutableDictionary alloc] init];
    1.15  	
    1.16  	//Find the first language the user prefers which the spellchecker knows about, then keep it around for future reference
    1.17 -	NSEnumerator *enumerator = [[[NSUserDefaults standardUserDefaults] objectForKey:@"AppleLanguages"] objectEnumerator];
    1.18 -	NSString	 *language;
    1.19 -	while ((language = [enumerator nextObject])) {
    1.20 -		if ([[NSSpellChecker sharedSpellChecker] setLanguage:language]) {
    1.21 -			preferredLanguage = [language retain];
    1.22 -			break;
    1.23 -		}
    1.24 +	NSArray *preferredLanguages = nil;
    1.25 +	if ([NSApp isOnSnowLeopardOrBetter]) {
    1.26 +		preferredLanguages = [[NSSpellChecker sharedSpellChecker] userPreferredLanguages];
    1.27 +	} else {
    1.28 +		preferredLanguages = [[NSSpellChecker sharedSpellChecker] availableLanguages];
    1.29 +	}
    1.30 +		
    1.31 +	if (preferredLanguages.count) {
    1.32 +		preferredLanguage = [preferredLanguages objectAtIndex:0];
    1.33  	}
    1.34  }
    1.35  
    1.36 @@ -135,8 +140,9 @@
    1.37  		NSString	 *chatID = chat.uniqueChatID;
    1.38  		NSString	 *chatLanguage = [languageDict objectForKey:chatID];
    1.39  
    1.40 -		//If we didn't cache a language for this chat, we might just never have made it inactive; use the spell checker's current language
    1.41 -		if (!chatLanguage) chatLanguage = [[NSSpellChecker sharedSpellChecker] language];
    1.42 +		//If we didn't cache a language for this chat, or the chat is currently the active chat, use the spell checker's value.
    1.43 +		if (!chatLanguage || adium.interfaceController.activeChat == chat)
    1.44 +			chatLanguage = [[NSSpellChecker sharedSpellChecker] language];
    1.45  
    1.46  		//Now, if we end up at the user's default language, we don't want to store anything
    1.47  		if ([preferredLanguage isEqualToString:chatLanguage])
    1.48 @@ -147,14 +153,7 @@
    1.49  			 (!previousLanguage && chatLanguage)) {
    1.50  			[listObject setPreference:chatLanguage
    1.51  							   forKey:KEY_LAST_USED_SPELLING
    1.52 -								group:GROUP_LAST_USED_SPELLING];			
    1.53 -			
    1.54 -			/* Set this as a global preference such that it will be the default choice for future new chats.
    1.55 -			 * If a listObject doesn't have its own preference set, this will be inherited.
    1.56 -			 */
    1.57 -			[[adium preferenceController] setPreference:chatLanguage
    1.58 -												 forKey:KEY_LAST_USED_SPELLING
    1.59 -												  group:GROUP_LAST_USED_SPELLING];
    1.60 +								group:GROUP_LAST_USED_SPELLING];
    1.61  		}
    1.62  		
    1.63  		[languageDict removeObjectForKey:chatID];