[TSF][TS_E_NOLAYOUT] MS-IME candidate window sometimes appears and flickers at top-left corner of display on Nightly or early Beta
Categories
(Core :: Widget: Win32, defect, P5)
Tracking
()
Tracking | Status | |
---|---|---|
firefox75 | --- | fixed |
People
(Reporter: kuroweb, Assigned: masayuki)
Details
(Keywords: inputmethod)
Attachments
(3 files)
My Computer:
Windows 10 version 1909 (OS build 18363.535)
Build identifier:
Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:74.0) Gecko/20100101 Firefox/74.0
Built from https://hg.mozilla.org/mozilla-central/rev/5ba39736e74b8a072a63ee215545f89d5c2ec8c8
Steps to reproduce.
1.create new profile.
2.open http://www.htmq.com/html/textarea.shtml
3.turn on Microsoft IME.
4.type in japanese characters.
Actual results:
Japanese input candidates are displayed for a sometimes in the upper left corner of the desktop.
Expected results.
Display at the position where characters are being input.
Other browser results:
Google Chrome (version 79.0.3945.117 Official Build 64bit) is fine.
Microsoft Edge (version 44.18362.449.0) is fine.
Google Japanese IME(2.25.3700.0) is fine on Firefox Nightly.
related bug:
https://bugzilla.mozilla.org/show_bug.cgi?id=1208977
https://bugzilla.mozilla.org/show_bug.cgi?id=1187583
![]() |
||
Updated•5 years ago
|
Comment 2•5 years ago
|
||
The priority flag is not set for this bug.
:jimm, could you have a look please?
For more information, please visit auto_nag documentation.
![]() |
||
Comment 3•5 years ago
|
||
Hey Masayuki, do we have anyone working on IME issues currently? This looks like a rather bad annoyance bug.
Assignee | ||
Comment 4•5 years ago
|
||
I guess that you don't reproduce it with late Beta or Release, isn't it?
The reason is, I stopped the hack for TS_E_NO_LAYOUT
for MS-IME if you run early Beta or Nightly on Win10 build 17643 or newer (bug 1481153).
https://searchfox.org/mozilla-central/rev/a4be2fbe9bd4f405c91cc16e4e3a80400f5a9301/modules/libpref/init/all.js#3184-3198
If you cannot reproduce it with Release, unfortunately, it means that the traditional MS-IME has a bug to handle TS_E_NO_LAYOUT
. I hope that it'd be fixed in new MS-IME which will be shipped in a couple of years...
I'll try to get the log when it happens (when I have much time).
Assignee | ||
Updated•5 years ago
|
Assignee | ||
Comment 5•5 years ago
•
|
||
I reproduced this bug easily with debug build.
The following log is when I typed "う" of "あいう" in an <input>
element:
TSFTextStore::RequestLock(dwLockFlags=TS_LF_READWRITE | TS_LF_SYNC, phrSession=0x000000FF7D5FD910), mLock=not-specified, mDestroyed=false
Locking (TS_LF_READWRITE) >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
TSFTextStore::GetSelection(ulIndex=4294967295, ulCount=1, pSelection=0x000000FF7D5FD0F8, pcFetched=0x000000FF7D5FD240)
TSFTextStore::GetSelection() succeeded, acpStart=2, acpEnd=2 (length=0), reverted=false
TSFTextStore::SetText(dwFlags=not-specified, acpStart=2, acpEnd=2, pchText=0x000002F99C5B8774 "う", cch=1, pChange=0x000000FF7D5FCCC8), mComposition.IsComposing()=true
TSFTextStore::SetSelectionInternal(pSelection={ acpStart=2, acpEnd=2, style={ ase=TS_AE_END, fInterimChar=false} }, aDispatchCompositionChangeEvent=false), mComposition.IsComposing()=true
...
TSFTextStore::Content::ReplaceTextWith(aStart=2, aLength=0, aReplaceString="う"), mComposition={ mStart=0, mString="あいう" }, mLastCompositionString="あい", mMinTextModifiedOffset=4294967295, firstDifferentOffset=2
...
TSFTextStore::GetText(acpStart=0, acpEnd=-1, pchPlain=0x00007FFB14BFF590, cchPlainReq=128, pcchPlainOut=0x000000FF7D5FC800, prgRunInfo=0x00007FFB14BFF480, ulRunInfoReq=33, pulRunInfoOut=0x00007FFB14BFF47C, pacpNext=0x00007FFB14BFF478), mComposition={ mStart=0, mString.Length()=3, IsComposing()=true }
TSFTextStore::SelectionForTSFRef(): acpStart=3, acpEnd=3 (length=0), reverted=false
TSFTextStore::ContentForTSFRef(): mContentForTSF={ mText="あいう" (Length()=3), mLastCompositionString="あい" (Length()=2), mMinTextModifiedOffset=2 }
TSFTextStore::GetText() succeeded: pcchPlainOut=0x000000FF7D5FC800, *prgRunInfo={ uCount=3, type=TS_RT_PLAIN }, *pulRunInfoOut=1, *pacpNext=3)
TSFTextStore::OnUpdateComposition(pComposition=0x000002F98FBEC510, pRangeNew=0x0000000000000000), mComposition.mView=0x000002F98FBEC510
...
TSFTextStore::OnUpdateComposition() succeeded but not complete
TSFTextStore::SetSelection(ulCount=1, pSelection=000000FF7D5FD0A8 { acpStart=3, acpEnd=3, style={ ase=TS_AE_NONE, fInterimChar=false } }), mComposition.IsComposing()=true
TSFTextStore::SetSelectionInternal(pSelection={ acpStart=3, acpEnd=3, style={ ase=TS_AE_NONE, fInterimChar=false} }, aDispatchCompositionChangeEvent=true), mComposition.IsComposing()=true
TSFTextStore::SelectionForTSFRef(): acpStart=3, acpEnd=3 (length=0), reverted=false
...
TSFTextStore::SetSelection() succeeded
TSFTextStore::OnUpdateComposition(pComposition=0x000002F98FBEC510, pRangeNew=0x000002F9883783F8), mComposition.mView=0x000002F98FBEC510
...
TSFTextStore::GetDisplayAttribute(): GetDisplayAttribute range=0-3 (hr=S_OK)
TSFTextStore::GetDisplayAttribute() succeeded: Result={ crText:{ TF_CT_NONE }, crBk:{ TF_CT_NONE }, lsStyle: TF_LS_SQUIGGLE, fBoldLine: false, crLine:{ TF_CT_NONE }, bAttr: TF_ATTR_INPUT }
TSFTextStore::RecordCompositionUpdateAction() succeeded
...
TSFTextStore::OnUpdateComposition() succeeded: mComposition={ mStart=0, mString="あいう" }, SelectionForTSFRef()={ acpStart=3, acpEnd=3, style.ase=TS_AE_END }
TSFTextStore::OnUpdateComposition(pComposition=0x000002F98FBEC510, pRangeNew=0x000002F9883783F8), mComposition.mView=0x000002F98FBEC510
...
TSFTextStore::GetDisplayAttribute(): GetDisplayAttribute range=0-3 (hr=S_OK)
TSFTextStore::GetDisplayAttribute() succeeded: Result={ crText:{ TF_CT_NONE }, crBk:{ TF_CT_NONE }, lsStyle: TF_LS_SQUIGGLE, fBoldLine: false, crLine:{ TF_CT_NONE }, bAttr: TF_ATTR_INPUT }
TSFTextStore::RecordCompositionUpdateAction() succeeded
...
TSFTextStore::OnUpdateComposition() succeeded: mComposition={ mStart=0, mString="あいう" }, SelectionForTSFRef()={ acpStart=3, acpEnd=3, style.ase=TS_AE_END }
TSFTextStore::GetSelection(ulIndex=4294967295, ulCount=1, pSelection=0x000000FF7D5FCF38, pcFetched=0x000000FF7D5FD080)
TSFTextStore::GetSelection() succeeded, acpStart=3, acpEnd=3 (length=0), reverted=false
...
TSFTextStore::GetSelection(ulIndex=4294967295, ulCount=1, pSelection=0x000000FF7D5FD2F8, pcFetched=0x000000FF7D5FD450)
TSFTextStore::GetSelection() succeeded, acpStart=3, acpEnd=3 (length=0), reverted=false
...
Unlocked (TS_LF_READWRITE) <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
TSFTextStore::DispatchKeyboardEventAsProcessedByIME(), dispatching an eKeyDown event...
TSFTextStore::FlushPendingActions() flushing Type::eCompositionUpdate={ mData="あいう", mRanges=0x000002F991B05D40, mRanges->Length()=2 }
TSFTextStore::FlushPendingActions() dispatching compositionchange event...
TSFTextStore::RequestLock() succeeded: *phrSession=S_OK
TSFTextStore::RequestLock(dwLockFlags=TS_LF_READWRITE | TS_LF_SYNC, phrSession=0x000000FF7D5FE2A0), mLock=not-specified, mDestroyed=false
Locking (TS_LF_READWRITE) >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
TSFTextStore::GetSelection(ulIndex=4294967295, ulCount=1, pSelection=0x000000FF7D5FDA88, pcFetched=0x000000FF7D5FDBD0)
TSFTextStore::GetSelection() succeeded, acpStart=3, acpEnd=3 (length=0), reverted=false
TSFTextStore::SetSelection(ulCount=1, pSelection=000000FF7D5FDA38 { acpStart=3, acpEnd=3, style={ ase=TS_AE_NONE, fInterimChar=false } }), mComposition.IsComposing()=true
TSFTextStore::SetSelection() succeeded
TSFTextStore::OnUpdateComposition(pComposition=0x000002F98FBEC510, pRangeNew=0x000002F988378518), mComposition.mView=0x000002F98FBEC510
TSFTextStore::RestartCompositionIfNecessary(aRangeNew=0x000002F988378518), mComposition.mView=0x000002F98FBEC510
...
TSFTextStore::GetDisplayAttribute(): GetDisplayAttribute range=0-3 (hr=S_OK)
TSFTextStore::GetDisplayAttribute() succeeded: Result={ crText:{ TF_CT_NONE }, crBk:{ TF_CT_NONE }, lsStyle: TF_LS_SQUIGGLE, fBoldLine: false, crLine:{ TF_CT_NONE }, bAttr: TF_ATTR_INPUT }
TSFTextStore::RecordCompositionUpdateAction() succeeded
TSFTextStore::SelectionForTSFRef(): acpStart=3, acpEnd=3 (length=0), reverted=false
TSFTextStore::OnUpdateComposition() succeeded: mComposition={ mStart=0, mString="あいう" }, SelectionForTSFRef()={ acpStart=3, acpEnd=3, style.ase=TS_AE_END }
TSFTextStore::OnUpdateComposition(pComposition=0x000002F98FBEC510, pRangeNew=0x000002F988378518), mComposition.mView=0x000002F98FBEC510
...
TSFTextStore::RecordCompositionUpdateAction(), mComposition={ mView=0x000002F98FBEC510, mStart=0, mString="あいう" (Length()=3) }
TSFTextStore::GetDisplayAttribute(): GetDisplayAttribute range=0-3 (hr=S_OK)
TSFTextStore::GetDisplayAttribute() succeeded: Result={ crText:{ TF_CT_NONE }, crBk:{ TF_CT_NONE }, lsStyle: TF_LS_SQUIGGLE, fBoldLine: false, crLine:{ TF_CT_NONE }, bAttr: TF_ATTR_INPUT }
TSFTextStore::RecordCompositionUpdateAction() succeeded
TSFTextStore::OnUpdateComposition() succeeded: mComposition={ mStart=0, mString="あいう" }, SelectionForTSFRef()={ acpStart=3, acpEnd=3, style.ase=TS_AE_END }
TSFTextStore::GetSelection(ulIndex=4294967295, ulCount=1, pSelection=0x000000FF7D5FD8C8, pcFetched=0x000000FF7D5FDA10)
TSFTextStore::GetSelection() succeeded, acpStart=3, acpEnd=3 (length=0), reverted=false
...
Unlocked (TS_LF_READWRITE) <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
TSFTextStore::FlushPendingActions() flushing Type::eCompositionUpdate={ mData="あいう", mRanges=0x000002F991B05D40, mRanges->Length()=2 }
TSFTextStore::FlushPendingActions() dispatching compositionchange event...
TSFTextStore::RequestLock() succeeded: *phrSession=S_OK
TSFTextStore::GetStatus(pdcs=0x000000FF7D5FE280)
TSFTextStore::RequestLock(dwLockFlags=TS_LF_READWRITE | TS_LF_SYNC, phrSession=0x000000FF7D5FE2A0), mLock=not-specified, mDestroyed=false
Locking (TS_LF_READWRITE) >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
...
TSFTextStore::GetTextExt(vcView=1, acpStart=0, acpEnd=3, prc=0x000000FF7D5FDB00, pfClipped=0x000000FF7D5FDAE0), IsHandlingComposition()=true, mContentForTSF={ MinOffsetOfLayoutChanged()=2, LatestCompositionStartOffset()=0, LatestCompositionEndOffset()=3 }, mComposition= { IsComposing()=true, mStart=0, EndOffset()=3 }, mDeferNotifyingTSF=false, mWaitingQueryLayout=false, IMEHandler::IsA11yHandlingNativeCaret()=true
TSFTextStore::SelectionForTSFRef(): acpStart=3, acpEnd=3 (length=0), reverted=false
TSFTextStore::GetTextExt() returned TS_E_NOLAYOUT (acpEnd=3)
Assignee | ||
Comment 6•5 years ago
|
||
After composition string is updated, MS-IME (oddly) notifies Gecko of composition update again. Then, it'll call GetTextExt()
to retrieve rect of composition string. However, in this case, new composition string's rectangle hasn't been computed in the remote process yet. Therefore, Gecko returns TS_E_NOLAYOUT
. But MS-IME does not wait next layout change notification from Gecko and positions suggest window to top-left of the screen. It's a bug of MS-IME, at least, they should keep previous position for avoiding flicker, but anyway we should keep doing a hack in this case even if Nightly runs on new Win10 which has a fix of TS_E_NOLAYOUT
issue in TSF.
Assignee | ||
Updated•5 years ago
|
Assignee | ||
Comment 7•5 years ago
|
||
MS-IME should get TS_E_NOLAYOUT
error correctly when it's running on Win10
Build 17643 or later. However, according to the bug report, MS-IME itself
does not handle it correctly. Therefore, we need to enable a hack for MS-IME
for Japanese even when
intl.tsf.hack.allow_to_stop_hacking_on_build_17643_or_later
is true.
Assignee | ||
Updated•5 years ago
|
Comment 9•5 years ago
|
||
bugherder |
Description
•