MAINT-5754: Finish key modifier experiment. Still not working.

master
rider 2015-11-07 12:09:08 -08:00
parent bd817f6f42
commit 5449ae73b3
3 changed files with 40 additions and 5 deletions

View File

@ -28,6 +28,18 @@
#include "llwindowmacosx-objc.h"
#import "llappdelegate-objc.h"
//---------------------------
// 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
//---------------------------
@implementation NSScreen (PointConversion)
+ (NSScreen *)currentScreenForMouseLocation
@ -70,7 +82,17 @@ void extractKeyDataFromEvent (NSEvent *theEvent, NativeKeyEventData * eventData)
}
eventData->mKeyEvent = NativeKeyEventData::KEYUNKNOWN;
eventData->mKeyCode = [theEvent keyCode];
eventData->mKeyModifiers = [theEvent modifierFlags];
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;
}

View File

@ -1733,6 +1733,7 @@ LLSD LLWindowMacOSX::getNativeKeyData()
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!

View File

@ -720,7 +720,7 @@ void MediaPluginCEF::deserializeKeyboardData(LLSD native_key_data, uint32_t& nat
////////////////////////////////////////////////////////////////////////////////
//
void MediaPluginCEF::keyEvent(LLCEFLib::EKeyEvent key_event, int key, LLCEFLib::EKeyboardModifier modifiers, LLSD native_key_data = LLSD::emptyMap())
void MediaPluginCEF::keyEvent(LLCEFLib::EKeyEvent key_event, int key, LLCEFLib::EKeyboardModifier modifiers_x, LLSD native_key_data = LLSD::emptyMap())
{
#if LL_DARWIN
std::string utf8_text;
@ -729,14 +729,23 @@ void MediaPluginCEF::keyEvent(LLCEFLib::EKeyEvent key_event, int key, LLCEFLib::
uint32_t native_scan_code = native_key_data["scan_code"].asInteger();
uint32_t native_virtual_key = native_key_data["key_code"].asInteger();
uint32_t native_modifiers = native_key_data["modifiers"].asInteger();
if (key < 128)
{
utf8_text = (char)native_virtual_key;
}
unsigned int modifers = LLCEFLib::KM_MODIFIER_NONE;
if (native_modifiers & (MASK_CONTROL | MASK_MAC_CONTROL))
modifers |= LLCEFLib::KM_MODIFIER_CONTROL;
if (native_modifiers & MASK_SHIFT)
modifers |= LLCEFLib::KM_MODIFIER_SHIFT;
if (native_modifiers & MASK_ALT)
modifers |= LLCEFLib::KM_MODIFIER_ALT;
//modifers |= LLCEFLib::KM_MODIFIER_META;
switch ((KEY)key)
{
@ -750,7 +759,10 @@ void MediaPluginCEF::keyEvent(LLCEFLib::EKeyEvent key_event, int key, LLCEFLib::
break;
}
mLLCEFLib->keyboardEvent(key_event, native_char_code, utf8_text.c_str(), native_modifiers, native_scan_code, native_virtual_key, native_modifiers);
mLLCEFLib->keyboardEvent(key_event, native_char_code, utf8_text.c_str(),
static_cast<LLCEFLib::EKeyboardModifier>(modifers),
native_scan_code, native_virtual_key, native_modifiers);
#elif LL_WINDOWS
U32 msg = ll_U32_from_sd(native_key_data["msg"]);
U32 wparam = ll_U32_from_sd(native_key_data["w_param"]);