Commit Graph

183 Commits

Author SHA1 Message Date
Masayuki Nakano
c5efc36210 Bug 1306549 part.5 Create KeyboardLayout::GetCompositeChar() for wrapping VirtualKey::GetCompositeChar() r=m_kato
VirtualKey::GetCompositeChar() needs index of virtual keycode which may make around the caller messy.  So, KeyboardLayout::GetCompositeChar() should wrap it and KeyboardLayout::MaybeInitNativeKeyWithCompositeChar() should use it.

MozReview-Commit-ID: 8KLTJpCFZ8u

--HG--
extra : rebase_source : fd13c009330fd485c8cba30f469fc645b560c623
2016-09-16 18:54:48 +09:00
Masayuki Nakano
da22fd3b2b Bug 1306549 part.4 Create KeyboardLayout::GetNativeUniCharsAndModifiers() for wrapping VirtualKey::GetNativeUniChars() r=m_kato
Similar to VirtualKey::GetUniChars(), VirtualKey::GetNativeUniChars() needs key index.  So, it should be wrapped by a new helper method, KeyboardLayout::GetNativeUniCharsAndModifiers(), and KeyboardEvent::InitNativeKey() should use this instead of accessing its member's GetNativeUniChars().

MozReview-Commit-ID: 7M9OlNF698Y

--HG--
extra : rebase_source : e19a5c99014a8f0a0ed7cc3a86fe0c4ee10cebb5
2016-09-16 18:38:53 +09:00
Masayuki Nakano
49ebeb51f0 Bug 1306549 part.3 KeyboardLayout::InitNativeKey() should use GetUniCharsAndModifiers() instead of using VirtualKey::GetUniChars() directly r=m_kato
When InitNativeKey() retrieves UniCharsAndModifiers for a key, it needs key index for the given virtual keycode.  Therefore, wrapping the code with GetUniCharsAndModifiers() makes InitNativeKey() code simpler since each call specifies the virtual keycode to the method instead of key index.

MozReview-Commit-ID: Azy8chXexaz

--HG--
extra : rebase_source : 98da43e7f542037f952206cd3db731f6cbb097e7
2016-09-16 18:22:12 +09:00
Masayuki Nakano
1559d32969 Bug 1306549 part.2 Create overload methods which take ModifierKeyState instead of VirtualKey::ShiftState r=m_kato
This patch gets rid of |shiftState| from KeyboardLayout::InitNativeKey() and make each caller clearer.  This must make other developers understand what modifier state is used at each call.

MozReview-Commit-ID: 6zydP1jkffv

--HG--
extra : rebase_source : ea1d5f49ea02812aa632bdbad871688879f2b401
2016-09-30 15:32:10 +09:00
Masayuki Nakano
af0de6d7e8 Bug 1306549 part.1 KeyboardLayout::InitNativeKey() should use KeyboardLayout::IsDeadKey() r=m_kato
KeyboardLayout::InitNativeKey() is very messy because it handles a lot of cases without helper methods.

It's important to make it simpler implementation for preventing regressions caused by some patches which are written with misunderstanding.  So, let's rewrite the method with helper method.

First, this patch make InitNativeKey() use IsDeadKey() instead of referring the table because calling IsDeadKey() is easier to understand.

MozReview-Commit-ID: DtN9qoh7Gz7

--HG--
extra : rebase_source : 8e769c1c88bfe646940491c111de609dbf53eeec
2016-09-16 17:24:39 +09:00
Masayuki Nakano
caa4d59b38 Bug 1302956 part.2 NativeKey shouldn't handle char message if it's created during another instance is trying to remove a char message from the queue r=m_kato
When NativeKey tries to remove a char message from the queue, another NativeKey instance might be created due to odd API hook or something.  In such case, the old instance should handle the received message and the new instance should do nothing for keeping the order of message handling.

This patch makes:

* NativeKey::GetFollowingCharMsg() store removing char message to mRemovingMsg before calling PeekMessage() with PM_REMOVE.
* NativeKey::InitWithChar() set the old instance's mReceivedMsg to the received char message and do nothing even if HandleCharMessage() is called later.
* NativeKey::GetFollowingCharMsg() return received char message if mReceivedMsg is set during a call of PeekMessage().

MozReview-Commit-ID: KXYW0GgC9AY

--HG--
extra : rebase_source : 08472dec28e93450cd04a367843c1511cb812a9c
2016-09-23 16:40:01 +09:00
Masayuki Nakano
bf273c667a Bug 1302956 part.1 NativeKey should store latest instance with sLatestInstance r=m_kato
For detecting nested creation of NativeKey instances, NativeKey should manage the latest instance with sLastestInstance for the other instances and previous instance with mLastInstance.

MozReview-Commit-ID: BFZ0cr1640S

--HG--
extra : rebase_source : e2439a21f5984c6246283924c2013038c734ae2a
2016-09-15 17:02:30 +09:00
Masayuki Nakano
c4106a36a9 Bug 1297013 part.3 Make NativeKey log its behavior r=m_kato
MozReview-Commit-ID: 6ksuMFMxQdM

--HG--
extra : rebase_source : 28f04d8e5d33c018a8bcda7d8ae1a84da07eaeb9
2016-09-21 13:29:34 +09:00
Masayuki Nakano
92ba10120f Bug 1297013 part.1 Implement ToString(const MSG&) for logging key related message with detail r=m_kato
For logging message, we should have better log text generator for MSG.

Then, we can improve the note of crash reports which is appended in NativeKey::GetFollowingCharMessage().

MozReview-Commit-ID: 4sbZJaWFH2o

--HG--
extra : rebase_source : bbc3101a78e4e2aa8b5eb0f68cd6f3605ba924f6
2016-08-26 20:52:25 +09:00
Masayuki Nakano
eac959a338 Bug 1300003 part.6 NativeKey shouldn't try to dispatch plugin events for removed char messages when mWidget won't dispatch plugin events r=m_kato
Currently, NativeKey::DispatchPluginEventsAndDiscardsCharMessages() calls nsWindowBase::DispatchPluginEvent() and nsWindowBase::DispatchPluginEvent() does nothing when windowless plugin doesn't have focus.  However, this is unclear when other developers read the code of DispatchPluginEventsAndDiscardsCharMessages() and it causes unnecessary virtual calls.  So, it should try to dispatch plugin events only when a windowless plugin has focus.

For making the check safer, nsWindowBase should expose the method to check it as ShouldDispatchPluginEvent().  Unfortunately, we cannot mark this method as const due to PluginHasFocus() needs to be not const method, though.  Then, for loops in DispatchPluginEventsAndDiscardsCharMessages() should check it at each try.

This change helps to log the behavior (working on bug 1297013) without noise.

Additionally, this patch renames the method to MaybeDispatchPluginEventsForRemovedCharMessages() because it doesn't remove any char messages anymore.

MozReview-Commit-ID: F14Lcx47M6U

--HG--
extra : rebase_source : 64b6da75590c99299f75358023844762198136d6
2016-09-15 00:16:18 +09:00
Masayuki Nakano
050c1b4088 Bug 1300003 part.5 Remove odd WM_CHAR messages which are caused by ATOK or WXG (both of them are Japanese IME) r=m_kato
NativeKey removes odd WM_CHAR messages which are caused by ATOK or WXG if the user tries to do "Kakutei-Undo" (meaning "undo the last commit") after dispatching eKeyDown event.

However, NativeKey should remove them from the queue first because there are some problems:

* If focus is moved during dispatching an eKeyDown event, we'll fail to remove the messages from the queue.
* If dispatching eKeyDown advance native event loop due to entering to a modal loop or dosing synchronous XHR, the message pattern is broken before removing the odd messages from the queue.

After removing the odd char messages, NativeKey should store them with mRemovedOddCharMsgs because NativeKey needs to dispatch them to focused windowless plugin.

Note that this patch also fixes a bug of the loop to remove the odd WM_CHAR messages.  Old code removes only one WM_CHAR messages, but we need to remove all WM_CHAR messages before WM_KEYUP.  This must be a regression.

MozReview-Commit-ID: I60bcIx2SFS

--HG--
extra : rebase_source : 19d0e70d9f39e6d0476c62def5e0a2dc1e0ab444
2016-09-14 16:20:53 +09:00
Masayuki Nakano
c0ad8a8fb2 Bug 1300003 part.4 Remove NativeKey::mIsFollowedByNonControlCharMessage because calling NativeKey::IsFollowedByNonControlCharMessage() is enough fast r=m_kato
NativeKey is now removing and storing following char messages when it's created for a keydown message.  Therefore, IsFollowedByNonControlCharMessage() just refers the stored messages and it's enough fast.  So, we can get rid of mIsFollowedByNonControlCharMessage.

MozReview-Commit-ID: 542A2sHNXeC

--HG--
extra : rebase_source : e748c9855c3cf2d45609f94f9ccc8d43d29dc447
2016-09-05 21:47:58 +09:00
Masayuki Nakano
308955d236 Bug 1300003 part.3 NativeKey::GetFollowingCharMessage() should always remove following WM_CHAR message r=m_kato
GetFollowingCharMessage() is now called only when removing following char message.  Therefore, it does not need to have the optional argument indicating if removing the found message.

MozReview-Commit-ID: 7P39wyfSC1

--HG--
extra : rebase_source : a38bb961df1bc03adc21295bc39e4e9c16e864f2
2016-09-05 21:41:48 +09:00
Masayuki Nakano
6934d7ed93 Bug 1300003 part.2 Don't continue to dispatch eKeyPress event at handling WM_KEYDOWN or following WM_CHAR messages if focused window is changed during dispatching an event r=m_kato
While dispatching an event, focused widget may be changed.  In such case, NativeKey shouldn't continue to dispatch remaining events (eKeyPress events) for preventing to dispatch to input text in unexpected website.

MozReview-Commit-ID: 7geuqks0LQK

--HG--
extra : rebase_source : 3e6c82e1eb0e27115fe93b1a3b4a155914fd06f7
2016-09-05 18:56:34 +09:00
Masayuki Nakano
af43a9e1dc Bug 1300003 part.1 NativeKey should remove following char messages before dispatching a keydown event r=m_kato
In some cases, we may receive following char message of WM_*KEYDOWN *during* dispatching an eKeyDown event. In such case, NativeKey shouldn't dispatch eKeyPress event twice (one is caused by receiving WM_*CHAR message, the other is caused by post dispatching eKeyDown event code).

This patch makes NativeKey consume following WM_*CHAR messages before dispatching eKeyDown.  Therefore, the former case will never occur.

For doing that, NativeKey stores following WM_*CHAR messages in mFollowingCharMsgs and uses it when it needs to dispatch eKeyPress events for each WM_*CHAR message.

MozReview-Commit-ID: 6QNvlwVVlTz

--HG--
extra : rebase_source : c33b5a1ac503326d51ef78f4f8a09c9a63df7871
2016-09-15 00:02:15 +09:00
Masayuki Nakano
b8318c87fb Bug 1300937 part.4 NativeKey::GetScanCodeWithExtendedFlag() should return 0xE0XX even on WinXP or WinServer2003 r=m_kato
For safety, NativeKey::GetScanCodeWithExtendedFlag() returns without extended flag on WinXP and WinServer2003 because ::MapVirtualKeyEx() API doesn't support extend key conversion.

However, extended scan code is available even on them when lParam has 0x1000000 especially when it computes KeyboardEvent.code value.  Therefore, it should return with 0xE000 for extended keys on any versions of Windows.

Note that NativeKey::ComputeVirtualKeyCodeFromScanCodeEx() wraps ::MapVirtualKeyEx() API.  It checks if the API is not available for the result of NativeKey::GetScanCodeWithExtendedFlag().  So, returning extended scan code from NativeKey::GetScanCodeWithExtendedFlag() is safe.

MozReview-Commit-ID: D2RrHxPI9ET

--HG--
extra : rebase_source : 51f277e8331eb7ad109c3227ac1fe73f6de48105
2016-09-16 10:17:44 +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
Carsten "Tomcat" Book
915d632972 Backed out changeset be88a60abb7a (bug 1300937)
--HG--
extra : rebase_source : 19b90e94e16547a7a718a7c4c2f587e64fbe4b7a
2016-09-15 17:04:16 +02: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
45df2cd377 Bug 1300319 part.1 NativeKey::IsControlChar() should return true when the char is 0x7F (control character, DELETE) r=m_kato
Ctrl+Backspace causes WM_CHAR for control character DELETE.  However, NativeKey::IsControlChar() doesn't treat it as a control character.  Therefore, NativeKey treats Backspace key as a printable character.

MozReview-Commit-ID: 29V45CNp8kW

--HG--
extra : rebase_source : 6656d884addf8b49dfa7c12d0b2c8d0543493c4f
2016-09-05 12:51:49 +09:00
Masayuki Nakano
8a11a75b19 Bug 1297985 part.2 KeyboardLayout should handle a composite character produced by 2 dead keys r=m_kato
On some keyboard layouts, a key sequence, a dead key -> another dead key, may produce a composite character instead of two base characters for each key.  For example, with "Russian - Mnemonic" keyboard layout on Win 8 or later, both 's' and 'c' are dead keys but key sequence, 's' -> 'c', produces a Unicode character.

For solving this issue, this patch fixes 2 bugs:

First, KeyboardLayout::GetDeadKeyCombinations() doesn't add dead key entry if 2nd key is a dead key (::ToUnicodeEx() returns -1).  In such case, it should add a dead key entry with the first character which is produced when only the 2nd key is pressed (the character is called as "base character" and used for index of the dead key table).

Next, KeyboardLayout::InitNativeKey() should check if 2nd dead key press produces a composite character.  If it's produced, it should initialize given NativeKey with the composite character.  Otherwise, it should initialize with base characters of each key.  This patch does it with KeyboardLayout::MaybeInitNativeKeyWithCompositeChar().

Finally, we should add automated test for this. However, unfortunately, it's not available on Win7 and our infra is still using Win7 for running automated tests.  Therefore, this patch doesn't include new automated tests.

MozReview-Commit-ID: G1DrfkHKNcK

--HG--
extra : rebase_source : 6ff4278d594a26a0908464b1e603a0a7ee2b3b38
2016-09-01 17:29:11 +09:00
Masayuki Nakano
af458c6eea Bug 1297985 part.1 Log KeybordLayout::LoadLayout() to help developers to understand what data is created r=m_kato
It's difficult to understand what data is created by KeyboardLayout::LoadLayout().  So, for understanding what data is created, let's add logging code into it.

MozReview-Commit-ID: CelxyVpGn5f

--HG--
extra : rebase_source : fd8f15a42c4c2b4c1f1079184060c6e5f796ac5a
2016-09-01 17:32:14 +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
1604e5479f Bug 1293505 part.2 KeyboardLayout::SynthesizeNativeKeyEvent() should emulate WM_SYEKEYDOWN, WM_SYSCHAR, WM_SYSDEADCHAR and WM_SYSKEYUP correctly r=m_kato
The new test failure is caused by a bug of the test API, KeyboardLayout::SysnthesizeNativeKeyEvent().  It doesn't generate WM_SYSKEY* messages nor WM_SYS*CHAR messages when Alt key is pressed.  Therefore, the new path in the previous code works unexpectedly with automated tests.

This patch makes KeyboardLayout::SysnthesizeNativeKeyEvent() WM_SYS* message aware.  When Alt key is pressed (but Ctrl key is not pressed) and the Alt key + something doesn't cause text input, the API generates WM_SYS* messages as expected.

MozReview-Commit-ID: FLbe4SYEZLf

--HG--
extra : rebase_source : 054147997eddfb01dbad63afc07e0b4f59a60257
2016-08-31 16:42:27 +09:00
Masayuki Nakano
98601adf03 Bug 1293505 part.1 NativeKey should treat a key message as printable key's when the key message is followed by a printable char message r=m_kato
Some keyboard utilities for Windows can change non-printable keys to printable keys.  Therefore, if a keydown message is followed by one or more char message whose wParam isn't a control character, NativeKey should treat it as a printable key's event.

MozReview-Commit-ID: HoFbz5Zafeh

--HG--
extra : rebase_source : 9001c58cb082a93946e1b4c445dfe71f15d08997
2016-08-26 22:12:58 +09:00
Masayuki Nakano
cc2605d4e3 Bug 1294536 KeyboardLayout::InitNativeKey() shouldn't initialize NativeKey with WM_CHAR whose wParam isn't a printable character r=m_kato
KeyboardEvent::InitNativeKey() should initialize NativeKey if it's created for handling an orphan WM_CHAR message, however, if it the charCode isn't a printable character such as 0x0D for Enter key, it shouldn't refer it because focused editor shouldn't handle keyboard event as inputting the non-printable character.

MozReview-Commit-ID: FwTdGqhPEld

--HG--
extra : rebase_source : 69da91ad47e64199c8ff6c120522eb7e153122cd
2016-08-22 14:23:59 +09:00
Masayuki Nakano
f382711dc3 Bug 1260651 part.59 Rename nsEditor to mozilla::EditorBase (and also their file names) r=mccr8
This patch also renames:

EditorInputEventDispatcher -> mozilla::EditorInputEventDispatcher

And some variable names are renamed from aEditor or mEditor to aEditorBase or mEditorBase for making their types clearer.

MozReview-Commit-ID: 2FCXWpLMn8e

--HG--
rename : editor/libeditor/nsEditor.cpp => editor/libeditor/EditorBase.cpp
rename : editor/libeditor/nsEditor.h => editor/libeditor/EditorBase.h
2016-07-08 13:10:13 +09:00
Masayuki Nakano
adabe1afd9 Bug 1281387 KeyboardLayout.cpp should use LazyLogModule instead of PR_NewLogModule() for making aware of MOZ_LOG* r=m_kato
MozReview-Commit-ID: LADKYU7uPcq

--HG--
extra : rebase_source : 5863bfa4fa3983740465d2ea745ca6b8a485b7e3
2016-06-22 15:39:58 +09:00
Masayuki Nakano
e2fb1c839c Bug 1254755 part.4 Rename WidgetKeyboardEvent::location to WidgetKeyboardEvent::mLocation r=smaug
MozReview-Commit-ID: CjT7izri6Vq

--HG--
extra : rebase_source : 1e82d581b8bf1cce3d3154402f3bb435f7a004f6
2016-05-12 18:17:22 +09:00
Masayuki Nakano
7bfa8a21fa Bug 1254755 part.3 Rename WidgetKeyboardEvent::alternativeCharCodes to WidgetKeyboardEvent::mAlternativeCharCodes r=smaug
MozReview-Commit-ID: 26K8ZxzavfB

--HG--
extra : rebase_source : 5f74e58a784bae2ed626c0c9f7c992228dcff1be
2016-05-12 17:57:21 +09:00
Masayuki Nakano
8a70a17c6a Bug 1254755 part.2 Rename WidgetKeyboardEvent::charCode to WidgetKeyboardEvent::mCharCode r=smaug
And mCharCode shouldn't be compared with NS_VK_*, nsIDOMKeyEvent::DOM_VK_*. Additionally, when it's compared with a character constant, cast isn't necessary.

MozReview-Commit-ID: JMT614copjG

--HG--
extra : rebase_source : 69ee3c589e5a71c814ec9a40ac3aab39c789c11d
2016-05-13 16:06:18 +09:00
Masayuki Nakano
3359bad586 Bug 1254755 part.1 Rename WidgetKeyboardEvent::keyCode to WidgetKeyboardEvent::mKeyCode r=smaug
And also WidgetKeyboardEvent::mKeyCode should be compared with NS_VK_* rather than nsIDOMKeyEvent::DOM_VK_*.

MozReview-Commit-ID: IKjQ1nr8XYe

--HG--
extra : rebase_source : 83125cd2523f6b70759f621470aad23b00aae8ae
2016-05-12 17:13:49 +09:00
Masayuki Nakano
c92ba85982 Bug 1261880 NativeKey should decide printable KeyboardEvent.key value of keydown and keypress events with following WM_CHAR message of WM_KEYDOWN r=m_kato
Some special keyboard layout may use a key as a non-lockable modifier key even if the key isn't a non-lockable modifier key (e.g., CapsLock key of 'Neo' for German). In such case, KeyboardLayout class cannot initialize NativeKey::mCommittedCharsAndModifiers with actual input character properly because KeyboardLayout class doesn't support such eccentric keyboard layouts.

For preventing this issue, NativeKey should overwrite mCommittedCharsAndModifiers with following WM_CHAR message when it handles WM_KEYDOWN and should handle with following WM_CHAR message.  However, we should ignore following WM_CHAR message if the character is a control character which shouldn't be inputted into focused text editor.

MozReview-Commit-ID: Ax01nnaRXek

--HG--
extra : rebase_source : fd802e868db8990481873ee8eb98375a50efa47a
2016-05-11 16:47:38 +09:00
Masayuki Nakano
4b0070a96d Bug 1263389 NativeKey should initialize WidgetKeyboardEvent::mKeyValue of WM_KEYDOWN of VK_PACKET with following char message r=m_kato
TextEventDispatcher initializes charCode value with mKeyValue (and mKeyNameIndex) of WidgetKeyboardEvent.  Therefore, NativeKey needs to initialize mKeyValue properly at handling WM_KEYDOWN message of VK_PACKET.  However, nobody initializes mCommittedCharsAndModifiers value of VK_PACKET.  Additionally, KeyboardLayout::ConvertNativeKeyCodeToKeyNameIndex() returns KEY_NAME_INDEX_Unidentified for it too.

Therefore, this patch creates a path for handling VK_PACKET.  First, makes KeyboardLayout::ConvertNativeKeyCodeToKeyNameIndex() returns KEY_NAME_INDEX_USE_STRING.  Next, the constructor of NativeKey initializes mCommittedCharsAndModifiers with following char message.  Additionally, makes sure that VK_PACKET is always handled with following char message even if there is no char message.
2016-04-25 16:42:59 +09:00
Masayuki Nakano
79ea112b87 Bug 1257759 part.10 PluginInstanceChild should consume WM_*CHAR messages which follow consumed WM_*KEYDOWN or WM_*KEYUP message r=jimm
nsWindow for Windows cannot decide if a preceding WM_*KEYDOWN or WM_*KEYUP which is a preceding message of WM_*CHAR is consumed because nsWindow cannot know if WM_*CHAR message came from same window which received the preceding WM_*KEYDOWN or WM_*KEYUP.  Therefore, PluginInstanceChild should do that.

MozReview-Commit-ID: 1uuZ0nTJ5Xb

--HG--
extra : rebase_source : b99f8057d5e93035a769af2506292ff7d2cb8f4a
2016-04-22 14:22:03 +09:00
Masayuki Nakano
0b9b9bf032 Bug 1257759 part.9 Implement nsWindow::OnKeyEventInPluginProcess() on Windows r=jimm
Implementing nsWindow::OnWindowedPluginKeyEvent() on Windows.  This patch makes NativeKey class dispatches eKeyDownOnPlugin and eKeyUpOnPlugin when the method is called.

MozReview-Commit-ID: L8yRZvDaQKR

--HG--
extra : rebase_source : 387ce72dcea23a92bd8c774fc54a8bff8da6c844
2016-04-15 17:02:36 +09:00
Masayuki Nakano
8a8e89ac9b Bug 1257759 part.3 ModifierKeyState should be available in plugin module r=jimm
Before posting native key message from PluginInstanceChild, we need to check if the key combination could be a shortcut key, i.e., we need to check if Ctrl or Alt key is pressed.  ModifierKeyState is a good class for checking it but it should be defined in an independent header file.

This patch separates the definition of ModifierKeyState to mozilla/widget/WinModifierKeyState.h and implement MaybeMatchShortcutKey() for PluginInstanceChild.

MozReview-Commit-ID: ZjLnJx02Ou

--HG--
rename : widget/windows/KeyboardLayout.h => widget/windows/WinModifierKeyState.h
extra : rebase_source : 66e9351a36dfa88f080ea78972ac0cb347bb174d
2016-04-09 15:45:06 +09:00
Masayuki Nakano
e9a1bcb370 Bug 1259658 Rename WidgetInputEvent::modifiers to WidgetInputEvent::mModifiers r=smaug
MozReview-Commit-ID: 7avEiqKfaHA

--HG--
extra : rebase_source : ffb6fbe424a4d5c2799444223608e03237e7c7a2
2016-03-31 17:03:00 +09:00
Masayuki Nakano
ccfe495436 Bug 1258153 Initialize mozilla::widget::Native key with actual inputting character if it's created for WM_CHAR r=m_kato
When user types a Unicode character with Alt + Numpad keys, recevied messages are:

1. WM_SYSKEYDOWN for Alt (VK_MENU)
2. WM_SYSKEYDOWN and WM_SYSKEYUP of Numpad keys
3. WM_KEYUP for Alt (VK_MENU)
4. WM_CHAR for the Unicode character

The WM_CHAR indicates Alt key with its scancode.  Then, we shouldn't set the key value of the keypress event as "Alt".  Instead of that, we should set key value to the inputted Unicode character.  Then, the keypress event won't be supprressed by WidgetKeyboardEvent::ShouldCauseKeypressEvents() in TextEventDispatcher (this is what the cause of bug 1253153 is.

MozReview-Commit-ID: 8KjOWvYcKMs

--HG--
extra : rebase_source : 463d3185a7074eb564afaf3bb453bbf6967d9677
2016-03-20 22:31:27 +09:00
Masayuki Nakano
8c8cbe0e4c Bug 1256589 part.5 Add DefaultPrevented() and DefaultPreventedByContent() to WidgetEvent r=smaug
MozReview-Commit-ID: 5q3QUPTf12Z

--HG--
extra : rebase_source : 83ed946b44910713a61c80bd21202aba9430dd2a
extra : source : 4eb2193814ab1958a65add0c8c307d07c646d61c
2016-03-22 16:47:52 +09:00
Masayuki Nakano
6181d95afb Bug 1256589 part.4 Move the implementation of PreventDefault() and add PreventDefaultBeforeDispatch() from dom::Event to WidgetEvent r=smaug
mDefaultPreventedByChrome is hacky. When PresShell handles Escape key events in fullscreen mode, it prevents default of every Escape key events and dispatch it only into chrome. After that, it check mDefaultPreventedByChrome if at least one call of preventDefault() occurred in chrome. Therefore, if we shouldn't set both mDefaultPreventedByChrome and mDefaultPreventedByContent to true before dispatching an event. This the reason why we need a special method, PreventDefaultBeforeDispatch() is needed for setting only mDefaultPrevented to true.

MozReview-Commit-ID: BPSq68GnWw6

--HG--
extra : rebase_source : f2f963afeba6994cc090efedebc29c0d9334c96d
extra : source : 1012dc095cc1b7236991a7befdbfbf174dc1c1af
2016-03-22 16:26:27 +09:00
Masayuki Nakano
7bcaf602d0 Bug 1154183 part.2 eKeyDown event should have charCode value of following keypress event r=smaug
MozReview-Commit-ID: 9duzKfCFPro
2016-03-19 20:57:11 +09:00
Masayuki Nakano
ca2f7e94a8 Bug 1137561 part.9 NativeKey should dispatch keypress events after removing following char messages if there are two or more characters to be inputted r=m_kato 2016-03-16 13:47:49 +09:00
Masayuki Nakano
bd594893c8 Bug 1137561 part.8 Implement WinTextEventDispatcherListener::WillDispatchKeyboardEvent() r=m_kato 2016-03-16 13:47:49 +09:00
Masayuki Nakano
697c992f55 Bug 1137561 part.7 Rename whole members added by the previous patch r=m_kato 2016-03-16 13:47:49 +09:00
Masayuki Nakano
1728345f86 Bug 1137561 part.6 Store some strings which may be inputted by the key with some modifier state before dispatching keydown event r=m_kato 2016-03-16 13:47:49 +09:00
Masayuki Nakano
22e9178025 Bug 1137561 part.5 TextEventDispatcher should decide if keypress events should be fired for specific keys r=m_kato 2016-03-16 13:47:49 +09:00
Masayuki Nakano
2b2851d542 Bug 1137561 part.4 Make NativeKey use TextEventDispatcher r=m_kato 2016-03-16 13:47:49 +09:00
Birunthan Mohanathas
d7371d07d0 Bug 1235261 - Part 1: Rename nsAutoTArray to AutoTArray. r=froydnj 2016-02-02 17:36:30 +02:00
Phil Ringnalda
d381b4bca6 Back out 7 changesets (bug 1235261) for cpptest failures in TestTArray
CLOSED TREE

Backed out changeset d66c3f19a210 (bug 1235261)
Backed out changeset 467d945426bb (bug 1235261)
Backed out changeset 32b61df13142 (bug 1235261)
Backed out changeset c50bb8ed4196 (bug 1235261)
Backed out changeset 0ff0fa6fe81f (bug 1235261)
Backed out changeset df70e89669da (bug 1235261)
Backed out changeset 064969357fc9 (bug 1235261)
2016-01-31 10:10:57 -08:00