From 631352e1ef54be116a7743eb257481562de9d549 Mon Sep 17 00:00:00 2001 From: daboe01 Date: Sat, 18 Jun 2016 20:36:22 +0200 Subject: [PATCH] improved FF deadkey detection --- AppKit/CPTextView/CPTextView.j | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/AppKit/CPTextView/CPTextView.j b/AppKit/CPTextView/CPTextView.j index 58d4b6ef7..58230d555 100644 --- a/AppKit/CPTextView/CPTextView.j +++ b/AppKit/CPTextView/CPTextView.j @@ -2245,6 +2245,7 @@ var CPTextViewAllowsUndoKey = @"CPTextViewAllowsUndoKey", var _CPNativeInputField, _CPNativeInputFieldLastValue, + _CPNativeInputFieldKeyDownCalled, _CPNativeInputFieldKeyUpCalled, _CPNativeInputFieldKeyPressedCalled, _CPNativeInputFieldActive, @@ -2372,6 +2373,11 @@ var _CPCopyPlaceholder = '-'; _CPNativeInputField.addEventListener("keydown", function(e) { + // this protects from heavy typing + if (CPBrowserIsEngine(CPGeckoBrowserEngine) && _CPNativeInputFieldKeyDownCalled) + return true; + + _CPNativeInputFieldKeyDownCalled = YES; _CPNativeInputFieldKeyUpCalled = NO; _CPNativeInputFieldKeyPressedCalled = NO; var currentFirstResponder = [[CPApp keyWindow] firstResponder]; @@ -2382,6 +2388,8 @@ var _CPCopyPlaceholder = '-'; // FF-trigger: here the best way to detect a dead key is the missing keyup event if (CPBrowserIsEngine(CPGeckoBrowserEngine)) setTimeout(function(){ + _CPNativeInputFieldKeyDownCalled = NO; + if (!_CPNativeInputFieldActive && _CPNativeInputFieldKeyUpCalled == NO && _CPNativeInputField.innerHTML.length && _CPNativeInputField.innerHTML != _CPCopyPlaceholder && _CPNativeInputField.innerHTML.length < 3 && !e.repeat) { _CPNativeInputFieldActive = YES;