summaryrefslogtreecommitdiff
path: root/indra/llwindow
diff options
context:
space:
mode:
authorrider <rider@lindenlab.com>2015-11-13 16:22:34 -0800
committerrider <rider@lindenlab.com>2015-11-13 16:22:34 -0800
commitc2ad041c23b0097aec30acc7447a42f96d515d3b (patch)
tree6d3632e4ef5e9b9bdae8aeb34f0b4839531464fc /indra/llwindow
parenta9a3cafa9194794850f97bec15e1d176389dd7eb (diff)
Encode keyboard event for reconstruction in the plugin.
Diffstat (limited to 'indra/llwindow')
-rw-r--r--indra/llwindow/llopenglview-objc.mm36
-rwxr-xr-xindra/llwindow/llwindowmacosx-objc.h11
-rwxr-xr-xindra/llwindow/llwindowmacosx.cpp39
3 files changed, 20 insertions, 66 deletions
diff --git a/indra/llwindow/llopenglview-objc.mm b/indra/llwindow/llopenglview-objc.mm
index 81e90accb7..406bc9cf47 100644
--- a/indra/llwindow/llopenglview-objc.mm
+++ b/indra/llwindow/llopenglview-objc.mm
@@ -30,13 +30,6 @@
-//---------------------------
-// Coppied from indra_constants.h
-//#include "indra_constats.h"
-const uint32_t MASK_CONTROL = 0x0001; // Mapped to cmd on Macs
-const uint32_t MASK_ALT = 0x0002;
-const uint32_t MASK_SHIFT = 0x0004;
-//const uint32_t MASK_MAC_CONTROL = 0x0008; // Un-mapped Ctrl key on Macs, not used on Windows
//---------------------------
@@ -72,29 +65,16 @@ const uint32_t MASK_SHIFT = 0x0004;
void extractKeyDataFromEvent (NSEvent *theEvent, NativeKeyEventData * eventData)
{
- if ([theEvent characters].length)
- {
- eventData->mCharacter = (wchar_t)[[theEvent characters] characterAtIndex:0];
- }
- else
- {
- eventData->mCharacter = [theEvent keyCode];
- }
eventData->mKeyEvent = NativeKeyEventData::KEYUNKNOWN;
- eventData->mKeyCode = [theEvent keyCode];
+ eventData->mEventType = [theEvent type];
+ eventData->mEventModifiers = [theEvent modifierFlags];
+ eventData->mEventKeyCode = [theEvent keyCode];
+ NSString *strEventChars = [theEvent characters];
+ eventData->mEventChars = (strEventChars.length) ? [strEventChars characterAtIndex:0] : 0;
+ NSString *strEventUChars = [theEvent charactersIgnoringModifiers];
+ eventData->mEventUnmodChars = (strEventUChars.length) ? [strEventUChars characterAtIndex:0] : 0;
+ eventData->mEventRepeat = [theEvent isARepeat];
- unsigned int modifiers = [theEvent modifierFlags];
-
- if (modifiers & (NSAlphaShiftKeyMask | NSShiftKeyMask))
- modifiers |= MASK_SHIFT;
- if (modifiers & NSAlternateKeyMask)
- modifiers |= MASK_ALT;
- if (modifiers & NSControlKeyMask)
- modifiers |= MASK_CONTROL;
-
- eventData->mKeyModifiers = modifiers;
- eventData->mScanCode = [theEvent keyCode ];
- eventData->mKeyboardType = 0;
}
diff --git a/indra/llwindow/llwindowmacosx-objc.h b/indra/llwindow/llwindowmacosx-objc.h
index 2455d6aeb9..dc184b91fb 100755
--- a/indra/llwindow/llwindowmacosx-objc.h
+++ b/indra/llwindow/llwindowmacosx-objc.h
@@ -56,11 +56,12 @@ struct NativeKeyEventData {
};
EventType mKeyEvent;
- uint32_t mKeyCode;
- uint32_t mScanCode;
- uint32_t mKeyModifiers;
- uint32_t mKeyboardType;
- wchar_t mCharacter;
+ uint32_t mEventType;
+ uint32_t mEventModifiers;
+ uint32_t mEventKeyCode;
+ uint32_t mEventChars;
+ uint32_t mEventUnmodChars;
+ bool mEventRepeat;
};
typedef const NativeKeyEventData * NSKeyEventRef;
diff --git a/indra/llwindow/llwindowmacosx.cpp b/indra/llwindow/llwindowmacosx.cpp
index 7bc5d263e4..952c6751db 100755
--- a/indra/llwindow/llwindowmacosx.cpp
+++ b/indra/llwindow/llwindowmacosx.cpp
@@ -1726,39 +1726,12 @@ LLSD LLWindowMacOSX::getNativeKeyData()
#if 1
if(mRawKeyEvent)
{
-
- result["char_code"] = (S32)(mRawKeyEvent)->mCharacter;
- result["scan_code"] = (S32)(mRawKeyEvent)->mScanCode;
- result["key_code"] = (S32)(mRawKeyEvent->mKeyCode);
- result["modifiers"] = (S32)(mRawKeyEvent->mKeyModifiers);
- result["keyboard_type"] = (S32)(mRawKeyEvent->mKeyboardType);
-
-
-#if 0
- // This causes trouble for control characters -- apparently character codes less than 32 (escape, control-A, etc)
- // cause llsd serialization to create XML that the llsd deserializer won't parse!
- std::string unicode;
- S32 err = noErr;
- EventParamType actualType = typeUTF8Text;
- UInt32 actualSize = 0;
- char *buffer = NULL;
-
- err = GetEventParameter (mRawKeyEvent, kEventParamKeyUnicodes, typeUTF8Text, &actualType, 0, &actualSize, NULL);
- if(err == noErr)
- {
- // allocate a buffer and get the actual data.
- buffer = new char[actualSize];
- err = GetEventParameter (mRawKeyEvent, kEventParamKeyUnicodes, typeUTF8Text, &actualType, actualSize, &actualSize, buffer);
- if(err == noErr)
- {
- unicode.assign(buffer, actualSize);
- }
- delete[] buffer;
- }
-
- result["unicode"] = unicode;
-#endif
-
+ result["event_type"] = LLSD::Integer(mRawKeyEvent->mEventType);
+ result["event_modifiers"] = LLSD::Integer(mRawKeyEvent->mEventModifiers);
+ result["event_keycode"] = LLSD::Integer(mRawKeyEvent->mEventKeyCode);
+ result["event_chars"] = (mRawKeyEvent->mEventChars) ? LLSD(LLSD::Integer(mRawKeyEvent->mEventChars)) : LLSD();
+ result["event_umodchars"] = (mRawKeyEvent->mEventUnmodChars) ? LLSD(LLSD::Integer(mRawKeyEvent->mEventUnmodChars)) : LLSD();
+ result["event_isrepeat"] = LLSD::Boolean(mRawKeyEvent->mEventRepeat);
}
#endif