From 1d5b9e6b7d415d86116ae8f00f899ff5ecf69014 Mon Sep 17 00:00:00 2001 From: Ross Boucher Date: Mon, 8 Sep 2008 20:09:00 -0700 Subject: [PATCH] Stop catching all command keys, instead set up a blacklist of keys to stop. [#19 state:resolved] --- AppKit/Platform/DOM/CPDOMWindowBridge.j | 50 +++++++++++++++++++------ 1 file changed, 39 insertions(+), 11 deletions(-) diff --git a/AppKit/Platform/DOM/CPDOMWindowBridge.j b/AppKit/Platform/DOM/CPDOMWindowBridge.j index 23450d20a..1cd45566b 100644 --- a/AppKit/Platform/DOM/CPDOMWindowBridge.j +++ b/AppKit/Platform/DOM/CPDOMWindowBridge.j @@ -361,13 +361,46 @@ var CPDOMWindowGetFrame = function(_DOMWindow) //right now we hard code q, w, r and t as keys to propogate //these aren't normal keycodes, they are with modifier key codes //might be mac only, we should investigate futher later. -var KeyCodesToPropagate = { '113':1, '119':1, '114':1, '116':1, '108':1, '102':1 }; -var KeyCodesWithoutKeyPressEvents = { '8':1, '9':1, '37':1, '38':1, '39':1, '40':1, '46':1 }; +var KeyCodesToPrevent = {}, + CharacterKeysToPrevent = {}, + KeyCodesWithoutKeyPressEvents = { '8':1, '9':1, '37':1, '38':1, '39':1, '40':1, '46':1 }; var CTRL_KEY_CODE = 17; @implementation CPDOMWindowBridge (Events) +- (void)preventCharacterKeysFromPropagating:(CPArray)characters +{ + for(var i=characters.length; i>0; i--) + CharacterKeysToPrevent[""+characters[i-1].toLowerCase()] = YES; +} + +- (void)preventCharacterKeyFromPropagating:(CPString)character +{ + CharacterKeysToPrevent[character.toLowerCase()] = YES; +} + +- (void)clearCharacterKeysToPreventFromPropagating +{ + CharacterKeysToPrevent = {}; +} + +- (void)preventKeyCodesFromPropagating:(CPArray)keyCodes +{ + for(var i=keyCodes.length; i>0; i--) + KeyCodesToPrevent[keyCodes[i-1]] = YES; +} + +- (void)preventKeyCodeFromPropagating:(CPString)keyCode +{ + KeyCodesToPrevent[keyCode] = YES; +} + +- (void)clearKeyCodesToPreventFromPropagating +{ + KeyCodesToPrevent = {}; +} + - (void)_bridgeMouseEvent:(DOMEvent)aDOMEvent { var theType = _overriddenEventType || aDOMEvent.type; @@ -513,15 +546,10 @@ var CTRL_KEY_CODE = 17; if (ExcludedDOMElements[sourceElement.tagName] && sourceElement != _DOMFocusElement && sourceElement != _DOMPasteboardElement) return; - StopDOMEventPropagation = YES; - - if(KeyCodesToPropagate[aDOMEvent.keyCode]) - StopDOMEventPropagation = !(modifierFlags & (CPControlKeyMask | CPCommandKeyMask)); - - /*if (aDOMEvent.keyCode == 17) - StopDOMEventPropagation = NO; - if (aDOMEvent.keyCode != 17) - alert("WILL SEND " + modifierFlags + " " + aDOMEvent.type);*/ + //We want to stop propagation if this is a command key AND this character or keycode has been added to our blacklist + StopDOMEventPropagation = !(modifierFlags & (CPControlKeyMask | CPCommandKeyMask)) || + CharacterKeysToPrevent[String.fromCharCode(aDOMEvent.keyCode || aDOMEvent.charCode).toLowerCase()] || + KeyCodesToPrevent[aDOMEvent.keyCode]; var isNativePasteEvent = NO, isNativeCopyOrCutEvent = NO;