Bug 617298 - Make text extraction from child process slightly more reliable, r=jchen

This commit is contained in:
Michael Wu 2011-04-29 19:25:55 -07:00
parent c57eed566e
commit 735005552f

View File

@ -257,12 +257,28 @@ public class GeckoInputConnection
extract.selectionStart = mSelectionStart; extract.selectionStart = mSelectionStart;
extract.selectionEnd = mSelectionStart + mSelectionLength; extract.selectionEnd = mSelectionStart + mSelectionLength;
// bug 617298 - IME_GET_TEXT sometimes gives the wrong result due to
// a stale cache. Use a set of three workarounds:
// 1. Sleep for 20 milliseconds and hope the child updates us with the new text.
// Very evil and, consequentially, most effective.
try {
Thread.sleep(20);
} catch (InterruptedException e) {}
GeckoAppShell.sendEventToGecko( GeckoAppShell.sendEventToGecko(
new GeckoEvent(GeckoEvent.IME_GET_TEXT, 0, Integer.MAX_VALUE)); new GeckoEvent(GeckoEvent.IME_GET_TEXT, 0, Integer.MAX_VALUE));
try { try {
extract.startOffset = 0; extract.startOffset = 0;
extract.text = mQueryResult.take(); extract.text = mQueryResult.take();
// 2. Make a guess about what the text actually is
if (mComposing && extract.selectionEnd > extract.text.length())
extract.text = extract.text.subSequence(0, mCompositionStart) + mComposingText;
// 3. If all else fails, make sure our selection indexes make sense
extract.selectionStart = Math.min(extract.selectionStart, extract.text.length());
extract.selectionEnd = Math.min(extract.selectionEnd, extract.text.length());
if ((flags & GET_EXTRACTED_TEXT_MONITOR) != 0) if ((flags & GET_EXTRACTED_TEXT_MONITOR) != 0)
mUpdateRequest = req; mUpdateRequest = req;
return extract; return extract;