From c52e6f9c597c67637045134d808a9039f85efc5c Mon Sep 17 00:00:00 2001
From: Geenz <geenz@geenzo.com>
Date: Wed, 23 Jan 2013 09:29:32 -0500
Subject: Refactor the key input handling to make it easier to filter out keys
 we don't need unicode characters for (such as the arrow keys).

---
 indra/llwindow/llopenglview-objc.h    |  1 -
 indra/llwindow/llopenglview-objc.mm   | 67 ++++++++++++++++++++---------------
 indra/llwindow/llwindowmacosx-objc.mm |  6 +++-
 indra/newview/llappdelegate-objc.mm   | 10 ++++++
 4 files changed, 54 insertions(+), 30 deletions(-)

diff --git a/indra/llwindow/llopenglview-objc.h b/indra/llwindow/llopenglview-objc.h
index 1592e6e01d..cc1618b3bc 100644
--- a/indra/llwindow/llopenglview-objc.h
+++ b/indra/llwindow/llopenglview-objc.h
@@ -14,7 +14,6 @@
 
 @interface LLOpenGLView : NSOpenGLView
 {
-	NSPoint mousePos;
 	std::string mLastDraggedUrl;
 }
 
diff --git a/indra/llwindow/llopenglview-objc.mm b/indra/llwindow/llopenglview-objc.mm
index 763cf0c981..b79b7b3fa5 100644
--- a/indra/llwindow/llopenglview-objc.mm
+++ b/indra/llwindow/llopenglview-objc.mm
@@ -294,37 +294,48 @@
 
 - (void) keyDown:(NSEvent *)theEvent
 {
-	callKeyDown([theEvent keyCode], mModifiers);
-	NSLog(@"Keycode: %hu", [theEvent keyCode]);
-	NSString *chars = [theEvent characters];
-	for (uint i = 0; i < [chars length]; i++)
-	{
-		// Enter and Return are special cases.
-		unichar returntest = [chars characterAtIndex:i];
-		if ((returntest == NSCarriageReturnCharacter || returntest == NSEnterCharacter) &&
-			!([theEvent modifierFlags] & NSCommandKeyMask) &&
-			!([theEvent modifierFlags] & NSAlternateKeyMask) &&
-			!([theEvent modifierFlags] & NSControlKeyMask))
-		{
-			callUnicodeCallback(13, 0);
-		} else {
-			// The command key being pressed is also a special case.
-			// Control + <character> produces an ASCII control character code.
-			// Command + <character> produces just the character's code.
-			// Check to see if the command key is pressed, then filter through the different character ranges that are relevant to control characters, and subtract the appropriate range.
-			if ([theEvent modifierFlags] & NSCommandKeyMask)
-			{
-				if (returntest >= 64 && returntest <= 95)
-				{
-					callUnicodeCallback(returntest - 63, mModifiers);
-				} else if (returntest >= 97 && returntest <= 122)
+	uint keycode = [theEvent keyCode];
+	
+	switch (keycode) {
+		case 0x7b:
+		case 0x7c:
+		case 0x7d:
+		case 0x7e:
+			callKeyDown(keycode, mModifiers);
+			break;
+			
+		default:
+			callKeyDown(keycode, mModifiers);
+			NSString *chars = [theEvent characters];
+			for (uint i = 0; i < [chars length]; i++) {
+				// Enter and Return are special cases.
+				unichar returntest = [chars characterAtIndex:i];
+				if ((returntest == NSCarriageReturnCharacter || returntest == NSEnterCharacter) &&
+					!([theEvent modifierFlags] & NSCommandKeyMask) &&
+					!([theEvent modifierFlags] & NSAlternateKeyMask) &&
+					!([theEvent modifierFlags] & NSControlKeyMask))
 				{
-					callUnicodeCallback(returntest - 96, mModifiers);
+					callUnicodeCallback(13, 0);
+				} else {
+					// The command key being pressed is also a special case.
+					// Control + <character> produces an ASCII control character code.
+					// Command + <character> produces just the character's code.
+					// Check to see if the command key is pressed, then filter through the different character ranges that are relevant to control characters, and subtract the appropriate range.
+					if ([theEvent modifierFlags] & NSCommandKeyMask)
+					{
+						if (returntest >= 64 && returntest <= 95)
+						{
+							callUnicodeCallback(returntest - 63, mModifiers);
+						} else if (returntest >= 97 && returntest <= 122)
+						{
+							callUnicodeCallback(returntest - 96, mModifiers);
+						}
+					} else {
+						callUnicodeCallback(returntest, mModifiers);
+					}
 				}
-			} else {
-				callUnicodeCallback(returntest, mModifiers);
 			}
-		}
+			break;
 	}
 }
 
diff --git a/indra/llwindow/llwindowmacosx-objc.mm b/indra/llwindow/llwindowmacosx-objc.mm
index 7867226476..b123ba0711 100644
--- a/indra/llwindow/llwindowmacosx-objc.mm
+++ b/indra/llwindow/llwindowmacosx-objc.mm
@@ -64,11 +64,12 @@ void setupCocoa()
 
 bool copyToPBoard(const unsigned short *str, unsigned int len)
 {
+	NSAutoreleasePool *pool = [[NSAutoreleasePool alloc]init];
 	NSPasteboard *pboard = [NSPasteboard generalPasteboard];
 	[pboard clearContents];
 	
 	NSArray *contentsToPaste = [[NSArray alloc] initWithObjects:[NSString stringWithCharacters:str length:len], nil];
-	
+	[pool release];
 	return [pboard writeObjects:contentsToPaste];
 }
 
@@ -80,6 +81,7 @@ bool pasteBoardAvailable()
 
 const unsigned short *copyFromPBoard()
 {
+	NSAutoreleasePool *pool = [[NSAutoreleasePool alloc]init];
 	NSPasteboard *pboard = [NSPasteboard generalPasteboard];
 	NSArray *classArray = [NSArray arrayWithObject:[NSString class]];
 	NSString *str = NULL;
@@ -91,6 +93,7 @@ const unsigned short *copyFromPBoard()
 	}
 	unichar* temp = (unichar*)calloc([str length], sizeof(unichar));
 	[str getCharacters:temp];
+	[pool release];
 	return temp;
 }
 
@@ -312,6 +315,7 @@ void convertWindowToScreen(NSWindowRef window, float *coord)
 void closeWindow(NSWindowRef window)
 {
 	[(LLNSWindow*)window close];
+	[(LLNSWindow*)window release];
 }
 
 void removeGLView(GLViewRef view)
diff --git a/indra/newview/llappdelegate-objc.mm b/indra/newview/llappdelegate-objc.mm
index f5143d7578..9bb10f3204 100644
--- a/indra/newview/llappdelegate-objc.mm
+++ b/indra/newview/llappdelegate-objc.mm
@@ -29,6 +29,16 @@
 	}
 }
 
+- (void) applicationDidBecomeActive:(NSNotification *)notification
+{
+	
+}
+
+- (void) applicationDidResignActive:(NSNotification *)notification
+{
+	
+}
+
 - (NSApplicationDelegateReply) applicationShouldTerminate:(NSApplication *)sender
 {
 	if (!runMainLoop())
-- 
cgit v1.2.3