Commit Graph

197 Commits

Author SHA1 Message Date
Masayuki Nakano
c3087d67b3 Bug 1317906 When a key press causes a call of InsertText(), it shouldn't mark keypress as consumed but instead, should mark InsertText() caused composition r=m_kato
Currently, when InsertText() which is caused by a key press causes committing composition, it consumes keypress event.  However, Korean 2-set IME calls InsertText() two times when there is composition and key press causes inserting another character next to the composition.  In this case, current design ignores second InsertText() becuase keypress event is already consumed by the first InsertText() call.

For solving this issue safely, InsertText() should mark current key event as "dispatched composition event". Then, following InsertText() calls should cause composition events instead of keypress events since following event order is too odd:

1. keydown (currently not dispatched by TextEventDisaptcher)
2. compositionupdate
3. compositionend
4. keypress
5. keyup

with the new design this becomes:

1. keydown (currently not dispatched by TextEventDispatcher)
2. compositionupdate
3. compositionend
4. compositionstart
5. compositionupdate
6. compositionend
7. keyup

This is similar to Chromium, although, Chromium includes the second InsertText() call into the first composition, we need to fix it later due to risky.

MozReview-Commit-ID: GL42cU2WIL0
2016-11-17 13:35:21 +09:00
Masayuki Nakano
5c9e966046 Bug 1312649 part.2 IMEInputHandler::GetVaildAttributesForMarkedText() should return non-empty array r=m_kato
Vietnamese Telex perhaps referes this result and change its behavior. When typying something, Telex starts composition on Chrome but may not behave so on Gecko.

Fortunately, Chromium just returns some attributes when validAttributesForMarkedText: of NSTextInputClient [1] but it doesn't return these styles when attributedSubstringForProposedRange: of NSTextInputClient is called (always returns non-styled plain text) [2].  Therefore, this patch does not touch IMEInputHandler::GetAttributedSubstringFromRange().

*1 <7d85f23cb0/content/browser/renderer_host/render_widget_host_view_mac.mm (2936)>
*2 <7d85f23cb0/content/browser/renderer_host/render_widget_host_view_mac.mm (3036)>

MozReview-Commit-ID: 1gPIiu4Qbud
2016-11-07 16:19:41 +09:00
Masayuki Nakano
7328ed2b4d Bug 1312649 part.1 TextInputHandler::InsertText() should dispatch composition events instead of keypress events when it replaces a range which is different from current selection r=m_kato
Vietnamese Telex IME handles Backspace key immediately after inputting a word even when there is no marked text.  At this time, it tries to replace the word with specific string.  In such case, our editor shouldn't remove anything at handling the Backspace keypress event.

For avoiding this issue, InserText() should dispatch a set of composition for inserting the specified text into the range.  Then, editor won't perform any action of the key.

Additionally, when a Backspace keydown tries to remove the last character of the word, Telex removes it with a composition.  At this time, it creates dummy marked text "a" and make it empty later. So, in this case, InsertText() won't be called, therefore, we need to consume the Backspace keypress when SetMarkedText() is called for preventing removing the previous character of the word.

MozReview-Commit-ID: LfeEHDWn0cZ
2016-11-07 10:30:05 +09:00
Masayuki Nakano
7a3dc43cf4 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
2016-10-18 15:26:54 +09:00
Masayuki Nakano
b284c22c02 Bug 1309515 part.2 TextInputHandler::InsertText() should consume current key event when it dispatches composition events r=m_kato
The cause of bug 1309515 is, HandleKeyDownEvent() dispatches eKeyPress events even after InsertText() dispatches composition events via InsertTextAsCommittingComposition().

Therefore, this patch consumes the current key event after dispatching composition events.

Note that for consistency with Windows, InsertText() should use eKeyPress events rather than composition events at least in this case.  However, changing the behavior has some risk.  So, we should fix this bug with the safest hack for uplift.

MozReview-Commit-ID: 7FYR5N2lATe
2016-10-13 13:18:58 +09:00
Masayuki Nakano
de1a9e09be 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
2016-10-14 12:06:30 +09:00
Masayuki Nakano
264850b8e4 Bug 1305355 part.3 IMEInputHandler shouldn't append any ranges when composition string is empty r=m_kato
IMEInputHandler shouldn't append any ranges to dispatch empty composition event since empty clause information may make TextComposition confused.  Additionally, it doesn't need to append caret range because CompositionTransaction always sets caret at start of composition when the composition string is empty.

MozReview-Commit-ID: FkLWePXZGJf
2016-09-26 17:19:30 +09:00
Xidorn Quan
a21a965127 Bug 898984 - Part 2: Support surrogate pair in XUL cropped element. r=jfkthame 2013-08-11 03:41:00 +09:00
Michael Layzell
5f0e965456 Bug 1018486 - Part 3: Changes in widget/cocoa/, r=mstange
MozReview-Commit-ID: DhvanRhe9XE
2016-09-07 10:50:38 -04:00
Makoto Kato
2cdeac1b86 Bug 1298562 - Use %u instead of %llu for uint32_t. r=masayuki
MozReview-Commit-ID: EF1G77Y30ws
2016-08-27 16:09:29 +09:00
Masayuki Nakano
96d6d63f18 Bug 1296578 IMEInputHandler should use insertion point relative query content events during composition r=m_kato
Start offset of composition string is fixed when composition string becomes non-empty in focused editor. In other words, until composition string is fixed, composition start offset may be changed from selection start offset at dispatching compositionstart event.  Especially, in e10s mode, pending keyboard events usually change composition start offset.

So, while there is composition, IMEHandler should use query events querying text rect or text content relative to actual start offset of composition string because native IME believes composition string at selection selection start when starting composition in the main process.

MozReview-Commit-ID: 3hinwozl9Ow
2016-08-19 21:51:54 +09:00
Masayuki Nakano
c9ce9b9c4a Bug 1284422 part.4 Fix odd indent of MOZ_LOG() in TextInputHandler.mm r=m_kato
MozReview-Commit-ID: 4ua3yoSgAJv
2016-07-05 18:38:53 +09:00
Masayuki Nakano
5dbefe59ac Bug 1280053 TextInputHandler should initialize WidgetKeyboardEvent without already handled characters r=m_kato
TextInputHandler may dispatch keypress events after InsertText() is called if there was composition and it's committed by "current" keydown event. In that case, [NSEvent characters] may have the committing string.  For example, when Opt+e of US keyboard layout started composition, Cmd+v causes committing the "`" character and pasting the clipboard text. Then, the "v" key's keydown event's |characters| is "`v". So, after InsertText() is called with "`", TextInputHandler shouldn't dispatch keypress event for "`" again. I.e., the KeyboardEvent.key value should be "v" rather than "`v".

For solving this issue, TextInputHandlerBase::AutoInsertStringClearer which is created at every InsertText() call should store the inserted string to TextInputHandlerBase::KeyEventState. However, for making the implemntation simpler, it should recode only when the inserting string is actually a part of [mKeyEvent characters]. Then, TextInputHandlerBase::KeyEventState can compute unhandled insert string at initializing WidgetKeyboardEvent.

So, finally, TextInputHandlerBase::InitKeyEvent() should be called via TextInputHandlerBase::KeyEventState::InitKeyEvent(). This ensures that all key events which may cause InsertText() calls are always initialized with unhandled string.

MozReview-Commit-ID: A9o8o9pV2XV
2016-06-19 01:13:16 +09:00
Masayuki Nakano
91219152e3 Bug 1280355 part.2 TextInputHandler should use LazyLogModule instead of PR_NewLogModule() r=m_kato
For making TextInputHandler MOZ_LOG* environment variables aware, TextInputHandler should use LazyLogModule.

MozReview-Commit-ID: 9La229BFaJ1
2016-06-16 17:14:34 +09:00
Masayuki Nakano
c8856b8adb Bug 1280355 part.1 TISInputSourceWrapper::CurrentInputSource() should create the static instance when it's called r=m_kato
This is preparation. TISInputSourceWrapper is created before starting XPCOM, however, when its first instance is created, TextInputHandler.mm tries to log all keyboard layouts and IMEs which are installed into the system. This would be problem if it uses LazyLogModule because it's initialized at starting XPCOM.

MozReview-Commit-ID: DWz8TylL175
2016-06-16 17:00:38 +09:00
Masayuki Nakano
5416b396a0 Bug 1279170 TextInputHandler::InsertText() should set keypress event's .key value property when it replaces specified range with a character r=m_kato
TextEventDispatcher::MaybeDispatchKeypressEvents() dispatches keypress events with passed event's mKeyNameIndex and mKeyValue values. I.e., setting mCharCode doesn't make sense in this case. Similarly, mKeyCode value is also ignored (overwritten by 0) if it's printable key's key event (mKeyNameIndex == KEY_NAME_INDEX_USE_STRING).

MozReview-Commit-ID: bdBQOlVKTs
2016-06-16 12:11:01 +09:00
Masayuki Nakano
0aa82c0583 Bug 1270985 Hide mouse cursor in native keydown event handler if Command key isn't pressed r=m_kato
Currently, TextInputHandler::DispatchEvent() isn't used for WidgetKeyboardEvent nor WidgetCompositionEvent since TextEventDispatcher directly uses nsIWidget::DispatchEvent().  Therefore, old code hiding mouse cursor at dispatching eKeyPress event is never run in current mozilla-central since TextInputHandler dispatches eKeyPress events via TextEventDispatcher.

Additionally, it's not enough to hide mouse cursor only when widget dispatches eKeyPress events because if IME starts composition, eKeyPress event won't be fired until finishing the composition. So, I think that we should hide mouse cursor at receiving native keydown events.  The event handler receives keydown events before IME handles them.  Additionally, modifier key events which won't cause eKeyPress events are not using native keydown event handler, fortunately.  So, I believe that it's the best place to do it.

MozReview-Commit-ID: 9dnpiVEV2Lx
2016-06-08 14:37:51 +09:00
Masayuki Nakano
e7e6eae87c Bug 1277756 part.7 Rename TextRangeType::NS_TEXTRANGE_SELECTEDCONVERTEDTEXT to TextRangeType::eSelectedClause r=smaug
MozReview-Commit-ID: GyRYWzfeWrm
2016-06-03 19:15:21 +09:00
Masayuki Nakano
6581476c25 Bug 1277756 part.6 Rename TextRangeType::NS_TEXTRANGE_CONVERTEDTEXT to TextRangeType::eConvertedClause r=smaug
MozReview-Commit-ID: 3mexBm278As
2016-06-03 19:05:32 +09:00
Masayuki Nakano
984c5b6b86 Bug 1277756 part.5 Rename TextRangeType::NS_TEXTRANGE_SELECTEDRAWTEXT to TextRangeType::eSelectedRawClause r=smaug
MozReview-Commit-ID: MbG4siLb4Q
2016-06-03 18:57:21 +09:00
Masayuki Nakano
0508cec6ea Bug 1277756 part.4 Rename TextRangeType::NS_TEXTRANGE_RAWINPUT to TextRangeType::eRawClause r=smaug
MozReview-Commit-ID: KLC1VPiYTdz
2016-06-03 18:48:37 +09:00
Masayuki Nakano
ded5f6cd4f Bug 1277756 part.3 Rename TextRangeType::NS_TEXTRANGE_CARETPOSITION to TextRangeType::eCaret r=smaug
MozReview-Commit-ID: CaqmOSxYYU7
2016-06-03 18:40:06 +09:00
Masayuki Nakano
afa7c7379f Bug 1277756 part.1 Make anonymous enum for NS_TEXTRANGE_* to an enum class named "TextRangeType" r=smaug
For making our code clearer by the stronger type check, we should change the anonymous enum for NS_TEXTRANGE_* to enum class whose name is "TextRangeType" and whose type is "RawTextRangeType" which is an alias of uint8_t.

Additionally, this also adds some utility methods for them.

Note that some lines which are changed by this patch become over 80 characters but it will be fixed by the following patches.

MozReview-Commit-ID: 76izA1WqTkp
2016-06-04 09:49:21 +09:00
Makoto Kato
2a1c9f17f2 Bug 1276948 - Remove IMEInputHandler::ConversationIdentifier. r=masayuki
This method is for old NSTextInput API and unused now.

MozReview-Commit-ID: thcbEExH58
2016-05-31 23:18:04 +09:00
Makoto Kato
9f331c065f Bug 1177943 - Part 1. Add LookUpDictionary method to widget. r=masayuki
I would like to add new method to look up dictionary.

MozReview-Commit-ID: Jqk0OelezVF
2016-04-04 17:14:36 +09:00
Makoto Kato
5a36eb144e Bug 1260091 - Move using SendBidiKeyboardNotify to WidgetUtils. r=masayuki
For e10s, we send Bidi keyboard information to content process.  We should add utility method to share it for all platforms.

MozReview-Commit-ID: JJX26OivQvt
2016-05-19 17:47:49 +09:00
Masayuki Nakano
6596e99c43 Bug 1254755 part.5 Rename WidgetKeyboardEvent::isChar to WidgetKeyboardEvent::mIsChar r=smaug
MozReview-Commit-ID: 58mri5IP3dV
2016-05-12 18:31:05 +09:00
Masayuki Nakano
93601f2106 Bug 1254755 part.4 Rename WidgetKeyboardEvent::location to WidgetKeyboardEvent::mLocation r=smaug
MozReview-Commit-ID: CjT7izri6Vq
2016-05-12 18:17:22 +09:00
Masayuki Nakano
ac12e32d97 Bug 1254755 part.3 Rename WidgetKeyboardEvent::alternativeCharCodes to WidgetKeyboardEvent::mAlternativeCharCodes r=smaug
MozReview-Commit-ID: 26K8ZxzavfB
2016-05-12 17:57:21 +09:00
Masayuki Nakano
f75bc688b3 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
2016-05-13 16:06:18 +09:00
Masayuki Nakano
55b60a37e4 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
2016-05-12 17:13:49 +09:00
Jonathan Watt
820350a9a0 Bug 1271867 - Update our usage of NSWindow::convertBaseToScreen/convertScreenToBase to modern ApplicationKit API. r=mstange 2016-05-05 12:27:13 +01:00
Makoto Kato
e541c5c874 Bug 1262363 - Call [NSTextInputContext handleEvent] for mouse support on IME. r=masayuki
Some IME handles mouse event by handleEvent method of NSTextInputcontext.  So we should call it on mouse event for IME

MozReview-Commit-ID: 6lyXCpOJ3yr
2016-04-27 21:14:43 +09:00
Masayuki Nakano
99eab530eb Bug 1259656 part.1 Rename WidgetEvent::refPoint to WidgetEvent::mRefPoint r=smaug
MozReview-Commit-ID: ESWM5ZyBpSR
2016-04-18 23:09:02 +09:00
Masayuki Nakano
4d73a7381d Bug 1259658 Rename WidgetInputEvent::modifiers to WidgetInputEvent::mModifiers r=smaug
MozReview-Commit-ID: 7avEiqKfaHA
2016-03-31 17:03:00 +09:00
Masayuki Nakano
f890eb4af3 Bug 1257760 TextInputHandler should dispatch keypress event even when a plugin has focus r=m_kato
When a plugin has focus, TextInputHandler shouldn't send native keydown event to interpretKeyEvents of NSView.  However, it should dispatch keypress events because shortcut key handlers wait following keypress event.

MozReview-Commit-ID: HpG108s2Rde
2016-03-23 15:31:54 +09:00
Masayuki Nakano
20493032e6 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
3582ca47f4 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
5fe3688488 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
0d76420890 Bug 1137563 part.4 Implement IMEInputHandler::WillDispatchKeyboardEvent() r=m_kato 2016-03-16 13:47:50 +09:00
Masayuki Nakano
a3ad9c6f2d Bug 1137563 part.3 TextInputHandler should use TextEventDispatcher r=m_kato 2016-03-16 13:47:50 +09:00
Masayuki Nakano
a97de814b8 Bug 1137563 part.2 IMEInputHandler should use TextEventDispatcher r=m_kato 2016-03-16 13:47:50 +09:00
Masayuki Nakano
2e4eb786ce Bug 1137563 part.1 Implement TextEventDispatcherListener in TextEventInputHandlerBase and IMEInputHandler r=m_kato 2016-03-16 13:47:49 +09:00
Nicholas Nethercote
ce94aae3ae Bug 1225007 (part 1, attempt 3) - Use LayoutDevicePixel more in Cocoa widget code. r=kats. 2015-11-19 14:10:38 +11:00
Phil Ringnalda
040c117af2 Backed out 2 changesets (bug 1225007) for frequent OS X "Shouldn't return empty rect" assertion failures, a=backout
Backed out changeset c5b352c74b35 (bug 1225007)
Backed out changeset 8a513c70ce7c (bug 1225007)
2015-11-19 20:55:26 -08:00
Nicholas Nethercote
5db293bd80 Bug 1225007 (part 1, attempt 2) - Use LayoutDevicePixel more in Cocoa widget code. r=kats. 2015-11-19 14:10:38 +11:00
Nicholas Nethercote
117b39c2e9 Backout 52ba24123046 and 66768d6a50fa (bug 1225007) for causing lots of test assertions on Mac. CLOSED TREE 2015-11-17 17:02:39 -08:00
Nicholas Nethercote
0a8fdd9562 Bug 1225007 (part 1) - Use LayoutDevicePixel more in Cocoa widget code. r=kats. 2015-11-15 21:37:52 -08:00
Botond Ballo
db5d15db66 Bug 1222661 - Replace ToUntyped(obj) calls with obj.ToUnknown*(). r=nical 2015-11-06 22:13:40 -05:00
Josh Aas
d903588365 Bug 1221451: Don't pass nil when an argument is required. r=spohl 2015-11-06 10:24:19 +09:00