summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCinder <cinder@sdf.org>2016-04-20 16:13:17 -0600
committerCinder <cinder@sdf.org>2016-04-20 16:13:17 -0600
commitc2c0c537bbf9edcbfcfa54a98c74745e5fff695a (patch)
tree4fb83b767e78c24d16f38b39b42fa44eda03cc47
parent18928ea6c6f2830a0d45ec412c915eceff1b76b0 (diff)
STORM-2127 - Fix NSException when assigning values that don't exist in cocoa modifier key event.
-rw-r--r--indra/llwindow/llopenglview-objc.mm119
-rwxr-xr-xindra/llwindow/llwindowmacosx-objc.h14
2 files changed, 68 insertions, 65 deletions
diff --git a/indra/llwindow/llopenglview-objc.mm b/indra/llwindow/llopenglview-objc.mm
index 406bc9cf47..8a77c645ce 100644
--- a/indra/llwindow/llopenglview-objc.mm
+++ b/indra/llwindow/llopenglview-objc.mm
@@ -25,13 +25,69 @@
*/
#import "llopenglview-objc.h"
-#include "llwindowmacosx-objc.h"
+#import "llwindowmacosx-objc.h"
#import "llappdelegate-objc.h"
+#pragma mark local functions
+NativeKeyEventData extractKeyDataFromKeyEvent(NSEvent* theEvent)
+{
+ NativeKeyEventData eventData;
+ eventData.mKeyEvent = NativeKeyEventData::KEYUNKNOWN;
+ 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];
+ return eventData;
+}
+
+NativeKeyEventData extractKeyDataFromModifierEvent(NSEvent* theEvent)
+{
+ NativeKeyEventData eventData;
+ eventData.mKeyEvent = NativeKeyEventData::KEYUNKNOWN;
+ eventData.mEventType = [theEvent type];
+ eventData.mEventModifiers = [theEvent modifierFlags];
+ eventData.mEventKeyCode = [theEvent keyCode];
+ return eventData;
+}
+attributedStringInfo getSegments(NSAttributedString *str)
+{
+ attributedStringInfo segments;
+ segment_lengths seg_lengths;
+ segment_standouts seg_standouts;
+ NSRange effectiveRange;
+ NSRange limitRange = NSMakeRange(0, [str length]);
+
+ while (limitRange.length > 0) {
+ NSNumber *attr = [str attribute:NSUnderlineStyleAttributeName atIndex:limitRange.location longestEffectiveRange:&effectiveRange inRange:limitRange];
+ limitRange = NSMakeRange(NSMaxRange(effectiveRange), NSMaxRange(limitRange) - NSMaxRange(effectiveRange));
+
+ if (effectiveRange.length <= 0)
+ {
+ effectiveRange.length = 1;
+ }
+
+ if ([attr integerValue] == 2)
+ {
+ seg_lengths.push_back(effectiveRange.length);
+ seg_standouts.push_back(true);
+ } else
+ {
+ seg_lengths.push_back(effectiveRange.length);
+ seg_standouts.push_back(false);
+ }
+ }
+ segments.seg_lengths = seg_lengths;
+ segments.seg_standouts = seg_standouts;
+ return segments;
+}
-//---------------------------
+#pragma mark class implementations
@implementation NSScreen (PointConversion)
@@ -63,53 +119,6 @@
@end
-void extractKeyDataFromEvent (NSEvent *theEvent, NativeKeyEventData * eventData)
-{
- eventData->mKeyEvent = NativeKeyEventData::KEYUNKNOWN;
- 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];
-
-}
-
-
-attributedStringInfo getSegments(NSAttributedString *str)
-{
- attributedStringInfo segments;
- segment_lengths seg_lengths;
- segment_standouts seg_standouts;
- NSRange effectiveRange;
- NSRange limitRange = NSMakeRange(0, [str length]);
-
- while (limitRange.length > 0) {
- NSNumber *attr = [str attribute:NSUnderlineStyleAttributeName atIndex:limitRange.location longestEffectiveRange:&effectiveRange inRange:limitRange];
- limitRange = NSMakeRange(NSMaxRange(effectiveRange), NSMaxRange(limitRange) - NSMaxRange(effectiveRange));
-
- if (effectiveRange.length <= 0)
- {
- effectiveRange.length = 1;
- }
-
- if ([attr integerValue] == 2)
- {
- seg_lengths.push_back(effectiveRange.length);
- seg_standouts.push_back(true);
- } else
- {
- seg_lengths.push_back(effectiveRange.length);
- seg_standouts.push_back(false);
- }
- }
- segments.seg_lengths = seg_lengths;
- segments.seg_standouts = seg_standouts;
- return segments;
-}
-
@implementation LLOpenGLView
// Force a high quality update after live resizing
@@ -423,18 +432,14 @@ attributedStringInfo getSegments(NSAttributedString *str)
- (void) keyUp:(NSEvent *)theEvent
{
- NativeKeyEventData eventData;
-
- extractKeyDataFromEvent( theEvent, &eventData );
+ NativeKeyEventData eventData = extractKeyDataFromKeyEvent(theEvent);
eventData.mKeyEvent = NativeKeyEventData::KEYUP;
callKeyUp(&eventData, [theEvent keyCode], [theEvent modifierFlags]);
}
- (void) keyDown:(NSEvent *)theEvent
{
- NativeKeyEventData eventData;
-
- extractKeyDataFromEvent( theEvent, &eventData );
+ NativeKeyEventData eventData = extractKeyDataFromKeyEvent(theEvent);
eventData.mKeyEvent = NativeKeyEventData::KEYDOWN;
uint keycode = [theEvent keyCode];
@@ -472,9 +477,7 @@ attributedStringInfo getSegments(NSAttributedString *str)
- (void)flagsChanged:(NSEvent *)theEvent
{
- NativeKeyEventData eventData;
-
- extractKeyDataFromEvent( theEvent, &eventData );
+ NativeKeyEventData eventData = extractKeyDataFromModifierEvent(theEvent);
mModifiers = [theEvent modifierFlags];
callModifier([theEvent modifierFlags]);
diff --git a/indra/llwindow/llwindowmacosx-objc.h b/indra/llwindow/llwindowmacosx-objc.h
index dc184b91fb..3f55aa587e 100755
--- a/indra/llwindow/llwindowmacosx-objc.h
+++ b/indra/llwindow/llwindowmacosx-objc.h
@@ -55,13 +55,13 @@ struct NativeKeyEventData {
KEYCHAR
};
- EventType mKeyEvent;
- uint32_t mEventType;
- uint32_t mEventModifiers;
- uint32_t mEventKeyCode;
- uint32_t mEventChars;
- uint32_t mEventUnmodChars;
- bool mEventRepeat;
+ EventType mKeyEvent = KEYUNKNOWN;
+ uint32_t mEventType = 0;
+ uint32_t mEventModifiers = 0;
+ uint32_t mEventKeyCode = 0;
+ uint32_t mEventChars = 0;
+ uint32_t mEventUnmodChars = 0;
+ bool mEventRepeat = false;
};
typedef const NativeKeyEventData * NSKeyEventRef;