diff options
| author | Geenz <geenz@geenzo.com> | 2013-05-13 19:39:45 -0400 | 
|---|---|---|
| committer | Geenz <geenz@geenzo.com> | 2013-05-13 19:39:45 -0400 | 
| commit | b27899ee0e035ebd4072a5e6162678f2afe81053 (patch) | |
| tree | d78a491f5c8a63277c3787eba313b3f82bb02b53 | |
| parent | aa0cb35db561004c205c7aac2570407ae88ad472 (diff) | |
Added IME input window white list.
| -rw-r--r-- | indra/llwindow/llappdelegate-objc.h | 4 | ||||
| -rw-r--r-- | indra/newview/SecondLife.nib | bin | 12997 -> 13009 bytes | |||
| -rw-r--r-- | indra/newview/SecondLife.xib | 25 | ||||
| -rw-r--r-- | indra/newview/llappdelegate-objc.mm | 45 | 
4 files changed, 57 insertions, 17 deletions
| diff --git a/indra/llwindow/llappdelegate-objc.h b/indra/llwindow/llappdelegate-objc.h index e7f6ecd5fc..be9ad4d79f 100644 --- a/indra/llwindow/llappdelegate-objc.h +++ b/indra/llwindow/llappdelegate-objc.h @@ -14,12 +14,16 @@  	NSWindow *inputWindow;  	LLNonInlineTextView *inputView;  	NSTimer *frameTimer; +	NSString *currentInputLanguage;  }  @property (assign) IBOutlet LLNSWindow *window;  @property (assign) IBOutlet NSWindow *inputWindow;  @property (assign) IBOutlet LLNonInlineTextView *inputView; +@property (retain) NSString *currentInputLanguage; +  - (void) mainLoop;  - (void) showInputWindow:(bool)show; +- (void) languageUpdated;  @end diff --git a/indra/newview/SecondLife.nib b/indra/newview/SecondLife.nibBinary files differ index 0b0ff5308b..cb289ebf09 100644 --- a/indra/newview/SecondLife.nib +++ b/indra/newview/SecondLife.nib diff --git a/indra/newview/SecondLife.xib b/indra/newview/SecondLife.xib index fdfea49c42..c6b72485a1 100644 --- a/indra/newview/SecondLife.xib +++ b/indra/newview/SecondLife.xib @@ -2,9 +2,9 @@  <archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="8.00">  	<data>  		<int key="IBDocument.SystemTarget">1060</int> -		<string key="IBDocument.SystemVersion">12D78</string> +		<string key="IBDocument.SystemVersion">12E30</string>  		<string key="IBDocument.InterfaceBuilderVersion">3084</string> -		<string key="IBDocument.AppKitVersion">1187.37</string> +		<string key="IBDocument.AppKitVersion">1187.39</string>  		<string key="IBDocument.HIToolboxVersion">626.00</string>  		<object class="NSMutableDictionary" key="IBDocument.PluginVersions">  			<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin</string> @@ -329,16 +329,13 @@  				<nil key="NSViewClass"/>  				<nil key="NSUserInterfaceItemIdentifier"/>  				<object class="NSView" key="NSWindowView" id="305280978"> -					<reference key="NSNextResponder"/> +					<nil key="NSNextResponder"/>  					<int key="NSvFlags">256</int>  					<array class="NSMutableArray" key="NSSubviews"/>  					<string key="NSFrameSize">{1024, 600}</string> -					<reference key="NSSuperview"/> -					<reference key="NSWindow"/> -					<reference key="NSNextKeyView"/>  					<string key="NSReuseIdentifierKey">_NS:20</string>  				</object> -				<string key="NSScreenRect">{{0, 0}, {2560, 1440}}</string> +				<string key="NSScreenRect">{{0, 0}, {2560, 1418}}</string>  				<string key="NSMaxSize">{10000000000000, 10000000000000}</string>  				<string key="NSFrameAutosaveName">Second Life</string>  				<int key="NSWindowCollectionBehavior">128</int> @@ -349,7 +346,7 @@  				<int key="NSWindowBacking">2</int>  				<string key="NSWindowRect">{{272, 176}, {938, 42}}</string>  				<int key="NSWTFlags">-1535638528</int> -				<string key="NSWindowTitle">Window</string> +				<string key="NSWindowTitle">Input Window</string>  				<string key="NSWindowClass">NSPanel</string>  				<nil key="NSViewClass"/>  				<nil key="NSUserInterfaceItemIdentifier"/> @@ -536,7 +533,7 @@  					<reference key="NSNextKeyView" ref="238626476"/>  					<string key="NSReuseIdentifierKey">_NS:21</string>  				</object> -				<string key="NSScreenRect">{{0, 0}, {2560, 1440}}</string> +				<string key="NSScreenRect">{{0, 0}, {2560, 1418}}</string>  				<string key="NSMaxSize">{10000000000000, 10000000000000}</string>  				<bool key="NSWindowIsRestorable">YES</bool>  			</object> @@ -1112,7 +1109,7 @@  				<string key="841.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>  				<string key="92.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>  				<string key="941.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string> -				<boolean value="YES" key="941.NSWindowTemplate.visibleAtLaunch"/> +				<boolean value="NO" key="941.NSWindowTemplate.visibleAtLaunch"/>  				<array class="NSMutableArray" key="942.IBNSViewMetadataConstraints">  					<reference ref="609370450"/>  					<reference ref="262904360"/> @@ -1182,6 +1179,14 @@  						<string key="minorKey">./Classes/LLNonInlineTextView.h</string>  					</object>  				</object> +				<object class="IBPartialClassDescription"> +					<string key="className">NSLayoutConstraint</string> +					<string key="superclassName">NSObject</string> +					<object class="IBClassDescriptionSource" key="sourceIdentifier"> +						<string key="majorKey">IBProjectSource</string> +						<string key="minorKey">./Classes/NSLayoutConstraint.h</string> +					</object> +				</object>  			</array>  		</object>  		<int key="IBDocument.localizationMode">0</int> diff --git a/indra/newview/llappdelegate-objc.mm b/indra/newview/llappdelegate-objc.mm index 8da44fcf33..de77447006 100644 --- a/indra/newview/llappdelegate-objc.mm +++ b/indra/newview/llappdelegate-objc.mm @@ -8,12 +8,14 @@  #import "llappdelegate-objc.h"  #include "llwindowmacosx-objc.h" +#include <Carbon/Carbon.h> // Used for Text Input Services ("Safe" API - it's well supported)  @implementation LLAppDelegate  @synthesize window;  @synthesize inputWindow;  @synthesize inputView; +@synthesize currentInputLanguage;  - (void)dealloc  { @@ -24,12 +26,16 @@  {  	frameTimer = nil; +	[self languageUpdated]; +	  	if (initViewer())  	{  		frameTimer = [NSTimer scheduledTimerWithTimeInterval:0.0 target:self selector:@selector(mainLoop) userInfo:nil repeats:YES];  	} else {  		handleQuit();  	} +	 +	[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(languageUpdated) name:@"NSTextInputContextKeyboardSelectionDidChangeNotification" object:nil];  }  - (void) applicationDidBecomeActive:(NSNotification *)notification @@ -67,15 +73,40 @@  - (void) showInputWindow:(bool)show  { -	if (show) +	// How to add support for new languages with the input window: +	// Simply append this array with the language code (ja for japanese, ko for korean, zh for chinese, etc.) +	NSArray *authorizedLanguages = [[NSArray alloc] initWithObjects:@"ja", @"ko", @"zh-Hant", @"zh-Hans", nil]; +	 +	if ([authorizedLanguages containsObject:currentInputLanguage])  	{ -		NSLog(@"Showing input window."); -		[inputWindow makeKeyAndOrderFront:inputWindow]; -	} else { -		NSLog(@"Hiding input window."); -		[inputWindow orderOut:inputWindow]; -		[window makeKeyAndOrderFront:window]; +		if (show) +		{ +			NSLog(@"Showing input window."); +			[inputWindow makeKeyAndOrderFront:inputWindow]; +		} else { +			NSLog(@"Hiding input window."); +			[inputWindow orderOut:inputWindow]; +			[window makeKeyAndOrderFront:window]; +		}  	}  } +// This will get called multiple times by NSNotificationCenter. +// It will be called every time that the window focus changes, and every time that the input language gets changed. +// The primary use case for this selector is to update our current input language when the user, for whatever reason, changes the input language. +// This is the more elegant way of handling input language changes instead of checking every time we want to use the input window. + +- (void) languageUpdated +{ +	TISInputSourceRef currentInput = TISCopyCurrentKeyboardInputSource(); +	CFArrayRef languages = (CFArrayRef)TISGetInputSourceProperty(currentInput, kTISPropertyInputSourceLanguages); +	 +#if 1 // In the event of ever needing to add new language sources, change this to 1 and watch the terminal for "languages:" +	NSLog(@"languages: %@", TISGetInputSourceProperty(currentInput, kTISPropertyInputSourceLanguages)); +#endif +	 +	// Typically the language we want is going to be the very first result in the array. +	currentInputLanguage = (NSString*)CFArrayGetValueAtIndex(languages, 0); +} +  @end | 
