Commit Graph

65 Commits

Author SHA1 Message Date
Masayuki Nakano
bd146a2e1e Bug 1310565 TextInputHandler shouldn't dispatch a composition events when a key press causes 2 or more characters r=m_kato
TextInputHandler::InsertText() dispatches a set of composition events when a key press causes 2 or more characters (Note that InsertText() is typically called only when IME is available because it's called via [NSResponder interpretKeyEvents]).  However, this is different from the behavior of Windows.  On Windows, NativeKey dispatches two ore more eKeyPress events in this case.

So, for consistency between platforms, TextInputHandler should dispatch eKeyPress events in such case.

MozReview-Commit-ID: EMvaL7sklKf

--HG--
extra : rebase_source : 0309d32d692a2394f53cd59216c6e774068e452b
2016-10-18 15:26:54 +09:00
Masayuki Nakano
d7f167f262 Bug 1309515 part.1 Add automated tests for Arabic - PC keyboard layout which can input 2 characters with a key press r=m_kato
MozReview-Commit-ID: GAEIklrf6H0

--HG--
extra : rebase_source : c365e19e8b8e6a878924ad264be3c78fcc4cbb3a
2016-10-14 12:06:30 +09:00
Masayuki Nakano
ae437d0a9a Bug 1303273 part.4 Add automated tests for bug 1293505, bug 1307703 and bug 1297985 r=m_kato
Now, NativeKey respects following WM_CHAR message.  Therefore, we can create a test for bug 1293505 which a function key causes a printable character.

Additionally, bug 1307703 is now fixed by the previous patch.  So, let's add automated test for it too.

Finally, now, I found a way to test with some keyboard layouts which are not available on old Windows.  Therefore, we should add automated tests for bug 1297985 too.

MozReview-Commit-ID: IqCEPbPYrcQ

--HG--
extra : rebase_source : 451d0264f1180cae7d7035a498f1c13416d53246
2016-10-07 11:42:20 +09:00
Masayuki Nakano
8c926d5f82 Bug 1303273 part.3 Dispatch eKeyPress events without NativeKey::HandleCharMessage() when it handles WM_(SYS)KEYDOWN message and there are following WM_(SYS)CHAR messages which includes non-control character r=m_kato
This patch creates NativeKey::DispatchKeyPressEventsWithRetrievedCharMessages() for dispatching eKeyPress event with mCommittedCharsAndModifiers when it stores following printable WM_(SYS)CHAR messages.

Using loop for dispatching eKeyPress event for every WM_(SYS)CHAR message is wrong because WidgetKeyboardEvent::mKeyValue is initialized with mCommittedCharsAndModifiers and it causes TextEventDispatcher dispatching multiple eKeyPress events at every call of MaybeDispatchKeypressEvents().  Therefore, if mKeyValue is "^^", eKeyPress event is dispatched 4 times --for the first message, eKeyPress events are fired for each "^" and for the second message, eKeyPress events are fired again for each "^"--.  Therefore, when it handles WM_(SYS)KEYDOWN and it causes inputting one or more printable characters, it's the easiest way not to use HandleCharMessage().

The new method calls TextEventDispatcher::MaybeDispatchKeypressEvents() only once and it requests to call the callback method with new argument of MaybeDispatchKeypressEvents() when it needs to dispatch 2 or more eKeyPress events.  Then, NativeKey::WillDispatchKeyboardEvent() can set each eKeyPress event to raw information of the message and proper modifier state.

With this change, we can dispatch multiple eKeyPress events with retrieved WM_(SYS)CHAR message information rather than retrieved information from active keyboard layout.  Therefore, NeedsToHandleWithoutFollowingCharMessages() doesn't return true even when mCommittedCharsAndModifiers stores two or more characters.

FYI: there is a bug in test_keycodes.xul. That is, Alt+'A' of Greek keyboard layout should cause WM_SYSCHAR with a corresponding Greek character but ASCII characters are specified.  Therefore, this patch includes the fix of these bugs

MozReview-Commit-ID: JVm7ZJVug0O

--HG--
extra : rebase_source : 414ecbe2c01c53f294d1346414b1a289aa0abfe8
2016-10-06 20:52:03 +09:00
Masayuki Nakano
642d448ca7 Bug 1303273 part.2 KeyboardLayout::InitNativeKey() should initialize aNativeKey.mCommittedCharsAndModifiers with following WM_CHAR or WM_SYSCHAR messages which are not providing a control character r=m_kato
First, mCommittedCharsAndModifiers should be initialized with following char messages because the messages could be different from the information of current keyboard layout.

So, this patch guarantees that mCommittedCharsAndModifiers are same as the user expected when there is one or more WM_CHAR or WM_SYSCHAR messages.

MozReview-Commit-ID: I5Ack0xccoL

--HG--
extra : rebase_source : e4c7af75fd200f30ec52b53dc05f49ae8887c6f0
2016-10-07 11:36:34 +09:00
Masayuki Nakano
337db43f23 Bug 1307112 part.8 NativeKey::HandleCharMessage() shouldn't dispatch eKeyPress event when its message is inputting a control character r=m_kato
This patch makes NativeKey::HandleCharMessage() stop dispatching eKeyPress event when the message is inputting a control character.  NativeKey::HandleCharMessage() runs following cases:

1. WM_KEYDOWN followed by a WM_CHAR message whose wParam is not a control character causes inputting printable characters.
2. WM_CHAR message is received without WM_KEYDOWN message.

So, when HandleCharMessage() is called for a control character, it's unusual case.  E.g., another application sends only WM_CHAR message with a control character.

On the other hand, Gecko is the only browser which dispatches "keypress" event even if pressed printable key doesn't cause inputting any characters.  And such "keypress" event is used for shortcut key handling and some default action handling.  So, even if we stop dispatching eKeyPress event from HandleCharMessage(), it shouldn't affect most users.

Note that this patch does NOT change the behavior when the user inputs a control character with usual keyboard layout such as Ctrl+A of en-US keyboard layout because DispatchKeyPressEventsWithoutCharMessage() dispatches eKeyPress event in such cases.

This patch also adds a lot of tests with Ctrl or Alt state for detecting regressions.

MozReview-Commit-ID: KUNqTp7RDSc

--HG--
extra : rebase_source : f91e37b0b82a8e8a95444a08f6d3101f14fadc50
2016-10-05 15:18:00 +09:00
Masayuki Nakano
1c049b2afa Bug 1307112 part.7 Get rid of Enter and Backspace key hack in NativeKey class r=m_kato
Currently, Enter and Backspace keys are handled without following WM_(SYS)CHAR message.  However, older code needs hack for them for avoiding conflict with Ctrl+J vs. Ctrl+Enter, etc.

So, we can get rid of them now.  And when a keydown causes inputting a control character, NativeKey should handle it with keyboard layout (i.e., without following char message(s)).

MozReview-Commit-ID: 6bVuK0BzFbx

--HG--
extra : rebase_source : 08ff45c1990ef8f3ed7703c69b2dc22e5f1dd6f5
2016-10-04 00:21:40 +09:00
Masayuki Nakano
0cf4a632e5 Bug 1300937 part.3 NativeKeyCodes.js should specify scan code to WIN_VK_ABNT_C1 explicitly for avoiding (perhaps) a bug of MapVirtualKeyEx() API r=smaug
Unfortunately, MapVirtualKeyEx() doesn't compute ABNT C1's scan code from its virtual keycode, 0xC1.  Therefore, NativeKeyCodes.js should specify 0x0056 explicitly.  Fortunately, this key in physical keyboard always generates the scan code value with any keyboard layouts.  Therefore, this can test new regressions as expected.

FYI: ABNT C1 key is a key in Brazilian keyboard.  It's at between "ShiftLeft" and "KeyZ".

MozReview-Commit-ID: GmpnFKOsnKD

--HG--
extra : rebase_source : 197b249740056e5c4b7c6f3b556f91f50a838d52
2016-09-13 19:55:29 +09:00
Masayuki Nakano
05960c4ff6 Bug 1300937 part.2 Automated tests which synthesize native key events on Windows should specify scan code value explicitly r=smaug
On Windows, some keys are called "extended key".  Their scan code include 0xE000.  For example, Enter key in standard position is 0x001C but Numpad's Enter key is 0xE01C.  Unfortunately, both of them cause same virtual keycode value, VK_RETURN.  Therefore, currently, nsIDOMWindowUtils.sendNativeKey() can synthesize only one native key event of them (only non-extended key's event).  Additionally, MapVirtualKeyEx() API with MAPVK_VK_TO_VSC (even with MAPVK_VK_TO_VSC_EX) don't return extended scancode value as expected.

For solving these issues, we should include scan code value to the virtual keycode value at calling sendNativeKey().

Fortunately, virtual keycode value on Windows is 0 ~ 255 (0x00 ~ 0xFF) but aNativeKeyCode of sendNativeKey() is int32_t.  So, we can use upper 16 bit for specifying scan code.

This patch explicitly specifies scan code value at defining WIN_VK_* in NativeKeyCodes.js.  Additionally, this patch duplicates native virtual keycode definition for Home, End, Insert, Delete, PageUp, PageDown, ArrowUp, ArrowLeft, ArrowDown, ArrowRight and Enter as WIN_VK_* and WIN_VK_NUMPAD_*.  This makes automated tests can specify both positions' keys explicitly.

Finally, this patch adds some tests to test_keycodes.xul for testing KeyboardEvent.code value of those keys in both positions.

MozReview-Commit-ID: 8n1rQ71dilg

--HG--
extra : rebase_source : 8215e56ba1ed9fc54c04eb7ca037b12c3ced5c1b
2016-09-13 19:38:23 +09:00
Masayuki Nakano
1042db50c8 Bug 1300937 part.1 Check KeyboardEvent.key and KeyboardEvent.code in test_keycodes.xul r=smaug
MozReview-Commit-ID: AntOqvmTCcW

--HG--
extra : rebase_source : a223980232f1c5bf03b3dc5685afe2990e5dc893
2016-09-13 21:48:45 +09:00
Carsten "Tomcat" Book
31fdf0df86 Backed out changeset 6a8bf7596f42 (bug 1300937) for m-oth test failures
--HG--
extra : rebase_source : 187813acb705820a33bddf1cffcd8d22754fe785
2016-09-15 17:04:33 +02:00
Carsten "Tomcat" Book
915d632972 Backed out changeset be88a60abb7a (bug 1300937)
--HG--
extra : rebase_source : 19b90e94e16547a7a718a7c4c2f587e64fbe4b7a
2016-09-15 17:04:16 +02:00
Carsten "Tomcat" Book
9ce8c3febe Backed out changeset e94d6d577103 (bug 1300937)
--HG--
extra : rebase_source : 4d10055ca5e6f67a3e085d7ea06dc4eae90eace3
2016-09-15 17:04:14 +02:00
Masayuki Nakano
ca5214b9da Bug 1300937 part.3 NativeKeyCodes.js should specify scan code to WIN_VK_ABNT_C1 explicitly for avoiding (perhaps) a bug of MapVirtualKeyEx() API r=smaug
Unfortunately, MapVirtualKeyEx() doesn't compute ABNT C1's scan code from its virtual keycode, 0xC1.  Therefore, NativeKeyCodes.js should specify 0x0056 explicitly.  Fortunately, this key in physical keyboard always generates the scan code value with any keyboard layouts.  Therefore, this can test new regressions as expected.

FYI: ABNT C1 key is a key in Brazilian keyboard.  It's at between "ShiftLeft" and "KeyZ".

MozReview-Commit-ID: GmpnFKOsnKD

--HG--
extra : rebase_source : 37f78552a1ebba6f61c38add0138b84ddef36c3e
2016-09-13 19:55:29 +09:00
Masayuki Nakano
e8eae5c2a2 Bug 1300937 part.2 Automated tests which synthesize native key events on Windows should specify scan code value explicitly r=smaug
On Windows, some keys are called "extended key".  Their scan code include 0xE000.  For example, Enter key in standard position is 0x001C but Numpad's Enter key is 0xE01C.  Unfortunately, both of them cause same virtual keycode value, VK_RETURN.  Therefore, currently, nsIDOMWindowUtils.sendNativeKey() can synthesize only one native key event of them (only non-extended key's event).  Additionally, MapVirtualKeyEx() API with MAPVK_VK_TO_VSC (even with MAPVK_VK_TO_VSC_EX) don't return extended scancode value as expected.

For solving these issues, we should include scan code value to the virtual keycode value at calling sendNativeKey().

Fortunately, virtual keycode value on Windows is 0 ~ 255 (0x00 ~ 0xFF) but aNativeKeyCode of sendNativeKey() is int32_t.  So, we can use upper 16 bit for specifying scan code.

This patch explicitly specifies scan code value at defining WIN_VK_* in NativeKeyCodes.js.  Additionally, this patch duplicates native virtual keycode definition for Home, End, Insert, Delete, PageUp, PageDown, ArrowUp, ArrowLeft, ArrowDown, ArrowRight and Enter as WIN_VK_* and WIN_VK_NUMPAD_*.  This makes automated tests can specify both positions' keys explicitly.

Finally, this patch adds some tests to test_keycodes.xul for testing KeyboardEvent.code value of those keys in both positions.

MozReview-Commit-ID: 8n1rQ71dilg

--HG--
extra : rebase_source : 0f4bb9193aa06cd7985590636b77a6e2a71ac2e4
2016-09-13 19:38:23 +09:00
Masayuki Nakano
748c42b18b Bug 1300937 part.1 Check KeyboardEvent.key and KeyboardEvent.code in test_keycodes.xul r=smaug
MozReview-Commit-ID: AntOqvmTCcW

--HG--
extra : rebase_source : 7f5a550cf7e3464f1d568f9cc30ec2bc97a31c55
2016-09-13 21:48:45 +09:00
Masayuki Nakano
62fe8134f6 Bug 1300319 part.0 Add automated tests for Ctrl+Backspace, Alt+Backspace, Ctrl+Enter and Alt+Enter because Backspace and Enter are handled with special path in mozilla::widget::NativeKey on Windows r=m_kato
MozReview-Commit-ID: 8LuYx65I5kY

--HG--
extra : rebase_source : 71e08f991535b485948f7720e8a214245c0203e7
2016-09-05 16:10:46 +09:00
Masayuki Nakano
370905b797 Bug 1293638 NativeKey::WillDispatchKeyboardEvent() should set alternative charCode values properly when other shift state inputs longer text r=m_kato
There are 2 bugs and this patch fixes them once.

First, NativeKey::WillDispatchKeyboardEvent() is used to setting alternative charCode values for every eKeyPress event.  However, for supporting "reserved" shortcut keys, now, it sets alternative charCode values to eKeyDown too.  However, they are really different.  eKeyPress events are fired for every character to be inputted by a key press sequence.  On the other hand, eKeyDown event is fired only once for a key sequence.  Therefore, now, NativeKey::WillDispatchKeyboardEvent() needs to set alternative charCode values for all characters inputted by the key sequence to eKeyDown event.

The other is not a new bug.  NativeKey::WillDispatchKeyboardEvent() sets the last eKeyPress event's special alternative charCode values, such as unshifted Latin character, shifted Latin character and some character which can be computed from virtual keycode.  This is performed when given index is the last index of the longest input string of the key.  However, the value includes different shift key state.  I.e., when different shift key causes longer text input, NativeKey::WillDispatchKeyboardEvent() won't set the special alternative charCode values to any eKeyPress events.  For example, when Ctrl+T is pressed with Arabic keyboard layout, its unshifted input string length is 1 but shifted input string length is 2.  Then, eKeyPress event is fired only once, but NativeKey::WillDispatchKeyboardEvent() waits second eKeyPress event.

Therefore, this patch makes the method append alternative charCodes for all remaining characters and detect the last event correctly with mCommittedCharsAndModifiers (it's used for KeyboardEvent.key value of eKeyDown event and the count of eKeyPress events is same as the value's length).

MozReview-Commit-ID: 6adUnmi5KYy

--HG--
extra : rebase_source : 8c04a3a155f2fcb9a5a8b3e9e0a176c678dc6265
2016-09-01 14:26:02 +09:00
Masayuki Nakano
8087f7b562 Bug 1293505 part.3 Fix wrong key emulation in test_keycodes.xul r=m_kato
Some tests in test_keycodes.xul emulate native key event with printable character even when Ctrl or Alt key is pressed.

With en-US keyboard layout, Ctrl+[A-Z] causes a control character's WM_CHAR message. However, the other OEM keys and numeric keys don't cause WM_CHAR message when Ctrl is pressed.  So, we need to fix some wrong emulations in it now.

MozReview-Commit-ID: bhF5XeClnd

--HG--
extra : rebase_source : 16b7c1e725cf8877b2b44f8d7f52e129889ed25f
2016-08-31 17:36:53 +09:00
Masayuki Nakano
3af2033805 Bug 1154183 part.7 Don't dispatch preceding keydown events of reserved keypress events on content in the default event group r=smaug
MozReview-Commit-ID: 5zdkdfNxbxb
2016-03-22 15:05:25 +09:00
Masayuki Nakano
79ec55bd08 Bug 1249184 Dead key shouldn't cause keypress event on Mac OS X r=smaug+m_kato 2016-03-16 13:50:01 +09:00
Masayuki Nakano
1fd5361cb0 Bug 1137563 part.5 Set charCode of dead key's keypress event on Mac to the dead char r=m_kato 2016-03-16 13:47:50 +09:00
Masayuki Nakano
063150ff0d Bug 1137563 part.4 Implement IMEInputHandler::WillDispatchKeyboardEvent() r=m_kato 2016-03-16 13:47:50 +09:00
Masayuki Nakano
e0d18691b8 Bug 1203059 part.4 Update test_keycodes.xul for the new behavior r=smaug 2016-03-16 10:58:28 +09:00
Masayuki Nakano
12a007fd7f Bug 1203059 part.2 When an event is reserved by chrome, it should be fired only on chrome r=smaug 2016-03-16 10:58:28 +09:00
Kartikaya Gupta
f0f1261931 Bug 1146349 - Update some widget tests to deal with async native key event synthesization. r=smaug,masayuki 2015-04-14 11:36:36 -04:00
Ms2ger
f1fc41b0e5 Bug 949614 - Use === for SimpleTest.is; r=Waldo
This is more likely to be correct, and a necessary step in case we ever want
to move to Object.is.

This keeps ise as an alias for is, and introduces is_loosely for the old
behaviour.
2015-04-14 15:28:13 +02:00
Neil Deakin
f9e1db1ab8 Bug 475981, remove titles from a bunch of tests, fixing box wrapped in a block warnings,r=neil 2014-04-04 13:11:12 -04:00
Masayuki Nakano
04cc04ac24 Bug 947115 All tests shouldn't use nsIDOMWindowUtils.sendNativeKeyEvent() directly. Use synthesizeNativeKey() instead. r=smaug 2013-12-18 16:02:46 +09:00
Masayuki Nakano
d7fcc64c1e Bug 946044 Handle context menu key of PC keyboard on Mac r=smichaud 2013-12-06 12:16:55 +09:00
Benjamin Smedberg
9c74858563 Bug 932854 temporary test workaround for test_keycodes.xul, r=jimm 2013-11-14 08:23:09 -05:00
Masayuki Nakano
108f3cc525 Bug 897885 part.2 Add test for handling kVK_JIS_KeypadComma r=smichaud 2013-08-24 13:53:01 +09:00
Masayuki Nakano
dde8930062 Bug 501496 part.8 Native key event tests should prevent default only when the event is keypress r=smaug 2013-07-25 15:09:29 +09:00
Masayuki Nakano
7318911de9 Bug 896362 part.2 Add tests for VK_ABNT_C1 and VK_ABNT_C2 r=jimm+smaug 2013-07-25 15:04:17 +09:00
Masayuki Nakano
d1f3ea50ee Bug 842927 part.5 Implement D3E KeyboardEvent.key on Cocoa r=smaug+smichaud 2013-04-24 12:49:47 +09:00
Masayuki Nakano
084ca1d1c9 Bug 773651 Guess VK_RCONTROL and VK_RMENU from extended key flag on XP and don't trust the scan code of key messages r=jimm 2012-07-19 10:28:17 +09:00
Masayuki Nakano
a16ae57d35 Bug 768736 Define constants for system native virtual keys for nsIDOMWindowUtils::SendNativeKeyEvent() r=roc 2012-06-27 11:26:38 +09:00
Masayuki Nakano
4dbe55aeaf Bug 757688 part.8 Make sure test_keycodes.xul emulates correct key events r=jimm 2012-06-15 18:52:51 +09:00
Masayuki Nakano
53a964cc2e Bug 757688 part.7 Make nsWindow for Windows possible to test dead keys r=jimm 2012-06-15 18:52:51 +09:00
Masayuki Nakano
e355fe16f3 Bug 759346 Append alternative keycodes from virtual keycode if the virtual keycode is an OEM keycode which indicates a character but the character cannot be inputted by the key r=jimm 2012-05-30 09:47:03 +09:00
Masayuki Nakano
4d7f3814a7 Bug 677252 part.1 Reimplement keycode computation in cocoa widget r=smaug+smichaud 2012-05-17 16:04:16 +09:00
Masayuki Nakano
7bf417b45b Bug 630810 part.1 Should convert from native keycode to DOM keycode for every keys on Windows r=smaug+jimm, sr=roc 2012-05-17 16:04:16 +09:00
Masayuki Nakano
169688aac4 Bug 735648 Append command char and shifted commanded char when command key is pressed on Dvorak-QWERTY r=smichaud+karlt 2012-03-30 12:37:40 +09:00
Masayuki Nakano
0c78a26029 Bug 728103 part.2 Fix new test failures r=smaug 2012-03-16 15:29:15 +09:00
Malini Das
ea71db787e Bug 367393 - Add a packed MochiKit that contains only SimpleTest dependencies- chrome. r=jmaher, a=test-only 2011-08-12 12:21:36 -04:00
Joel Maher
6659c4f8af Bug 666649 - remove enablePrivilege from various places in the harness and chrome tests. r=ted, a=test-only 2011-07-21 16:21:25 -04:00
Masayuki Nakano
67a6bb1970 Bug 519972 part.13 Log TextInputHandler behavior r=smichaud 2011-07-21 09:33:16 +09:00
Jeff Walden
dae3ca83d2 Bug 663300 - Treat \u not followed by four hexadecimal digits, or \x not followed by two hexadecimal digits, as syntax errors in string literals. r=njn
--HG--
extra : rebase_source : 78f37bc91e44598ba99c1983b65b8627bed876b5
2011-06-10 11:21:57 -07:00
Masayuki Nakano
c65eaea26b Bug 439815 Keyboard shortcuts with alternate keyboard layouts (including colemak) are missmapped; they are mapped for qwerty. r=josh 2009-08-18 13:47:53 +09:00
Serge Gautherie
2dc4e56bfa Bug 431503 - Create infrastructure to test processing of key events with different keyboard layouts; (Bv1) test_keycodes.xul: Fix non supported case, (+ nits); r=roc 2009-03-30 23:42:11 +02:00