Commit Graph

137 Commits

Author SHA1 Message Date
Masayuki Nakano
9eb0fc4751 Bug 1286157 TSFTextStore should use insertion point relative offset query when cached contents for TSF and actual content (or content cache) are different r=m_kato
MozReview-Commit-ID: 3Q9T3XVvyCj
2016-07-12 16:52:48 +09:00
Masayuki Nakano
ef9633ecc2 Bug 1288318 Initialize TSFTextStore::mInputScopes at initializing its members rather than after setting focus to the context r=m_kato
In CreateAndSetFocus(), SetInputScope() is called *after* setting focus to the context. At this time, Google Japanese Input retrieves InputScopes. Therefore, TSFTextStore returns IS_DEFAULT. But after that, Google Japanese Input tries to retrieve InputScopes after every notification (in this case, a call of ITextStoreACPSink::OnLayoutChange()). Then, we return IS_URL due to set after returns IS_DEFAULT.

This is actually our fault, but according to the other TIPs, Google Japanese Input shouldn't commit composition at detecting an InputScope change, though.

MozReview-Commit-ID: 2tPlcEA0MI0
2016-07-22 23:30:12 +09:00
Chris Peterson
a2408938ab Bug 1277106 - Part 4: Remove MOZ_UTF16() macro. r=Waldo 2016-07-19 21:07:53 -07:00
Masayuki Nakano
5ac25304db Bug 1286489 TSFTextStore.cpp and ContentCache.cpp shouldn't put \n, \r and \t to log file directly r=m_kato
MozReview-Commit-ID: 630lZINQteb
2016-07-13 18:16:04 +09:00
Masayuki Nakano
b3aece3075 Bug 1284422 part.2 Fix odd indent of MOZ_LOG() in TSFTextStore.cpp (mainly caused by replacing from PR_LOG()) r=m_kato
MozReview-Commit-ID: 88EW9lN1DMD
2016-07-05 18:33:20 +09:00
Masayuki Nakano
bb2514a9ca Bug 1284422 part.1 Remove "TSF: " from log of TSFTextStore.cpp r=m_kato
MozReview-Commit-ID: D2lgQxFWWVB
2016-07-05 18:06:39 +09:00
Masayuki Nakano
4acfc71baa Bug 1224994 part.13 Fix some comments which say "locked content" in TSFTextStore.cpp r=m_kato
MozReview-Commit-ID: Jze8WtPx82G
2016-07-04 15:53:58 +09:00
Masayuki Nakano
d1371199e2 Bug 1224994 part.12 Rename the variable names for the result of TSFTextStore::SelectionForTSF() to selectionForTSF r=m_kato
MozReview-Commit-ID: 9gYiIKVohQl
2016-07-01 14:13:46 +09:00
Masayuki Nakano
b5081a1c3c Bug 1224994 part.11 Rename TSFTextStore::CurrentSelection() to TSFTextStore::SelectionForTSF() r=m_kato
MozReview-Commit-ID: 9KVLN63NL9Z
2016-07-01 14:09:52 +09:00
Masayuki Nakano
b01f3c5854 Bug 1224994 part.10 Rename TSFTextStore::mSelection to TSFTextStore::mSelectionForTSF for making its meaning clearer r=m_kato
MozReview-Commit-ID: K9tVAw9aCaN
2016-07-01 14:01:26 +09:00
Masayuki Nakano
fdebb9f340 Bug 1224994 part.9 TSFTextStore shouldn't set selection when there is unknown pending text changes r=m_kato
I'm still not sure what we should do in this case, though.

If mContentForTSF is initialized and there are some unknown changes in actual contents, i.e., not caused by composition of the active TIP itself, we cannot set selection range properly in some cases.

For example, if TSF tires to set non-empty selection range but the range has been removed by web apps.

For now, let's try to return E_FAIL in such case because that should occur at reconversion or something immediately after previous content change not caused by previous composition.  If TIP does nothing in this case, user can retry with same operation after all pending text changes are notified to TSF.

MozReview-Commit-ID: 9unrNVeC1tW
2016-06-30 17:55:01 +09:00
Masayuki Nakano
effe014645 Bug 1224994 part.8 Don't notify TSF of text changes while there is cached content r=m_kato
Same as selection change notification, text change notification shouldn't be notified to TSF while there is cachec content because neither TSF nor TIP may allow to change text by web applications during keeping storing cached content.

This patch makes TSFTextStore stores and merges text changes until MaybeFlushPendingNotifications() is called and there is no cached content.

MozReview-Commit-ID: 9fj0GREbX18
2016-06-30 15:04:02 +09:00
Masayuki Nakano
a1815897a9 Bug 1224994 part.7 Don't notify TSF of selection changes while there is a cached content r=m_kato
TSFTextStore shouldn't notify TSF of selection change until MaybeFlushPendingNotifications() is called and there is no cached content because while there is cached content, neither TSF nor TIP may allow to change selection by web applications.  Therefore, ITextStoreACP::GetSelection() and similar methods need to use mSelection instead of actual selection in the focused editor.  Therefore, TSFTextStore should store selection change data during keeping storing content cache and notify it when the cache is cleared. So, when TSFTextStore notifies TSF of selection change, TSFTextStore needs to update mSelection to the actual selection which is stored in mPendingSelectionChangeData.

MozReview-Commit-ID: 8ZWASzu7Znv
2016-06-30 16:17:11 +09:00
Masayuki Nakano
087d423642 Bug 1224994 part.6 Don't clear TSFTextStore::mContentForTSF until active composition is committed r=m_kato
This patch stop clearing mContentForTSF at unlocking the document because we should keep it until active composition is committed.  If so, TSF/TIP won't be confused by content changes by JS.  So, this is important for a11y of TIP users in some complicated websites like GoogleDocs, Facebook, etc.

Note that this patch doesn't work well without following patches.  We need to stop notifying TSF of selection changes and text changed while mContentForTSF is valid.

MozReview-Commit-ID: 9QOGZxdYU3I
2016-06-29 18:24:10 +09:00
Masayuki Nakano
64a595784c Bug 1224994 part.5 Implement TSFTextStore::IsComposingInContent() to check if the focused editor has composition r=m_kato
MozReview-Commit-ID: 2bmGeaxUpUU
2016-06-29 17:39:59 +09:00
Masayuki Nakano
8e61f12c7f Bug 1224994 part.4 Rename the variable name which is for storing the result of TSFTextStore::ContentForTSFRef() to contentForTSF r=m_kato
MozReview-Commit-ID: 3wWMrpSWW6b
2016-06-29 17:26:35 +09:00
Masayuki Nakano
cac27a6eea Bug 1224994 part.3 Rename TSFTextStore::mDeferClearingLockedContent to TSFTextStore::mDeferClearingContentForTSF r=m_kato
MozReview-Commit-ID: 9cZ3Itx2zb4
2016-06-29 17:22:09 +09:00
Masayuki Nakano
c1140fe2d6 Bug 1224994 part.2 Rename TSFTextStore::LockedContent() to TSFTextStore::ContentForTSFRef() r=m_kato
MozReview-Commit-ID: JC4lgZu38e9
2016-06-29 17:18:44 +09:00
Masayuki Nakano
ded40bdf47 Bug 1224994 part.1 Rename TSFTextStore::mLockedContent to TSFTextStore::mContentForTSF r=m_kato
MozReview-Commit-ID: 5K0zPW1Mx4b
2016-06-29 17:15:40 +09:00
Masayuki Nakano
13fdf820a2 Bug 1282669 Get rid of nsIMEUpdatePreference::DontNotifyChangesCausedByComposition() r=m_kato
I think that we can drop nsIMEUpdatePreference::DontNotifyChangesCausedByComposition(), i.e., nsIMEUpdatePreference::NOTIFY_CHANGES_CAUSED_BY_COMPOSITION because it's now used only by TSFTextStore but TSFTextStore ignores if SelectionChangeDataBase::mCausedByComposition or TextChangeDataBase::mCausedOnlyByComposition is true (for supporting async changes in e10s mode).  So, only issue is, dropping the flag might cause increasing computing TextChangeData cost during composition in TSF mode.  However, now, it's already enough fast and even if it'd cause performance regression, we could add a hack with TextComposition's offset information.  Therefore, we don't need to worry about the performance regression so seriously.

MozReview-Commit-ID: HNT3G4isONj
2016-06-28 16:51:59 +09:00
Masayuki Nakano
32b56d0706 Bug 1282668 Get rid of nsIMEUpdatePreference::NOTIFY_SELECTION_CHANGE r=m_kato
Currently, all widgets request selection change notifications to IMEContentObserver.  Additionally, IMEContentObserver needs to listen selection changes for caching latest selection for eQuerySelectedText.  Therefore, it doesn't make sense to keep defining nsIMEUpdatePreference::NOTIFY_SELECTION_CHANGE.

If widgets didn't need selection change notifications, they could just ignore the unnecessary notifications.

Note that all widgets don't need selection change notifications if a plugin has focus and IMEContentObserver cannot observe selection changes in the plugin.  Therefore, if IMEContentObserver is initialized with a plugin, it shouldn't listen selection changes (and doesn't need to notify widgets of selection changes).

MozReview-Commit-ID: FOVFFgA2nOz
2016-06-28 15:23:12 +09:00
Masayuki Nakano
9195e5a4d9 Bug 1275528 part.5 TSFTextStore should use insertion point relative query for getting character rect and caret rect only while there is a composition r=m_kato
TSFTextStore should use insertion point relative query for getting character rect and caret rect while there is a composition because in such case, TSF must want to query a part of or around the composition.  Therefore, it makes sense to use insertion point relative query since it adjusts the offset with the latest content information.

MozReview-Commit-ID: IVjZ4zqFUkr
2016-06-15 17:10:38 +09:00
Masayuki Nakano
033bd835ee Bug 1278084 part.2 TSFTextStore should allow TSF to lock the document even during destroying r=m_kato
While a TSFTextStore instance is being destroyed, TSFTextStore::Destroy() tries to commit remaining composition and notify TSF of destroying the view.  At this moment, TSF/TIP may try to commit the composition or retrieve the contents with calling ITextStoreACP::RequestLock() but currently TSFTextStore disallows the requests to lock of them.  This means that TSFTextStore never sends composition commit events asynchronously.  Therefore, TextComposition may keep waiting remaining composition events but this causes odd behavior because they won't be fired.

For avoiding this issue, TSFTextStore should behave as normal even while it's being destroyed.  Fortunately, if there is a composition, it always has mLockedContent and mSelection.  So, it can compute expected results of TSF/TIP with them.

MozReview-Commit-ID: 2DSCGXXkLx1
2016-06-08 19:12:07 +09:00
Masayuki Nakano
e105a12910 Bug 1278084 part.1 Don't release TSF objects during handling a key message r=m_kato
While TIP is handling a key message, TSFTextStore shouldn't release any TSF objects since it may cause hitting a bug of TIPs.  Actually, MS-IME for Japanese on Windows 10 crashes when TSFTextStore is destroyed during composition because probably it accesses some destroyed objects to request to commit composition or query contents.

MozReview-Commit-ID: 9CTjHhAvG04
2016-06-06 21:07:24 +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
Masayuki Nakano
b911e5da2c Bug 1275906 part.1 Rename NOTIFY_IME_OF_COMPOSITION_UPDATE to NOTIFY_IME_OF_COMPOSITION_EVENT_HANDLED r=m_kato
It's not clear to me what NOTIFY_IME_OF_COMPOSITION_UPDATE means only from the name. For making the name clearer, this patch renames it to NOTIFY_IME_OF_COMPOSITION_EVENT_HANDLED and add some explanation to the definition.

MozReview-Commit-ID: 8ySYCNJ1Ytz
2016-05-31 11:39:15 +09:00
Masayuki Nakano
269af0c2a5 Bug 1205600 Stop supporting TSF on Windows XP and Windows Server 2003 r=m_kato
We won't enable TSF mode on Windows XP nor Windows Server 2003 because they are already not supported by Microsoft itsef and installed TSF of them is too old and too buggy. Therefore, it's not worthwhile to support TSF on those environments anymore.

MozReview-Commit-ID: Cs85EvWie9K
2016-05-17 14:00:59 +09:00
Masayuki Nakano
9a573d821b Bug 1267526 part.1 TSFTextStore shouldn't notify TSF of selectin change when the selection isn't actually changed r=m_kato
MozReview-Commit-ID: 8HLz30lR2TH
2016-05-11 18:18:51 +09:00
Masayuki Nakano
8dce3b8541 Bug 1267526 part.0 IMMHandler and TSFTextStore should use LazyLogModule instead of PR_NewLogModule for consistency with related logs in dom/events r=m_kato
MozReview-Commit-ID: IDmV291bKsz
2016-05-11 18:01:34 +09:00
Jacek Caban
af5e87c81d Bug 1263653 - Fixed TSFTextStore.h compilation with mingw. r=masayuki 2016-04-12 12:37:18 +02:00
Masayuki Nakano
7c0f83b85c Bug 1255627 Don't call methods of TSFTextStore::sEnabledTextStore without independent strong reference to it r=m_kato
TSFTextStore::sEnabledTextStore is a static variable to grab a reference to focused TextStore instance.  So, this may be changed by accidentally during a call of instance methods of TSFTextStore.  Then, focused TextStore may be destroyed during running a method and crash when it accesses a member variable.

For avoiding this crash, static methods which call a method of sEnabledTextStore should create an independent RefPtr to it before calling the method.

MozReview-Commit-ID: 51Sor1LdABr
2016-04-07 02:17:05 +09:00
Makoto Kato
24308c04ee Bug 1258637 - Fix typo of logging of pacpNext of TSFTextStore::GetText. r=masayuki
MozReview-Commit-ID: 9OGt9AJA2r1
2016-03-31 15:42:11 +09:00
Masayuki Nakano
4df0bcd3d2 Bug 1137561 part.2 Make TSFTextStore use TextEventDispatcher r=m_kato 2016-03-16 13:47:48 +09:00
Gijs Kruitbosch
64220f48c5 Bug 1240208 - use inputmode in XUL to get better hinting for IME and on-screen keyboards, r=masayuki,smaug 2016-02-01 17:57:29 +00:00
Masayuki Nakano
7d1fbffec1 Bug 1242331 part.5 TSFTextStore should ignore text changes not caused by composition but not occurred during current composition r=m_kato 2016-01-28 13:28:54 +09:00
Masayuki Nakano
62de211a61 Bug 1242331 part.4 Add TextChangeDataBase::mIncludingChangesWithoutComposition r=smaug 2016-01-28 13:28:54 +09:00
Masayuki Nakano
63975bd2b9 Bug 1242331 part.3 Rename TextChangeDataBase::mOccurredDuringComposition to mIncludingChangesDuringComposition r=smaug 2016-01-28 13:28:53 +09:00
Masayuki Nakano
a92e756814 Bug 1242331 part.2 Rename TextChangeDataBase::mCausedByComposition to mCausedOnlyByComposition r=smaug 2016-01-28 13:28:53 +09:00
Masayuki Nakano
b49e8cc9c1 Bug 1242895 Put off to commit/cancel composition after unlocking the document in TSF mode r=m_kato 2016-01-27 15:09:13 +09:00
Makoto Kato
25e49f3178 Bug 1241408 - Update selection cache even if having read lock. r=masayuki 2016-01-26 10:33:38 +09:00
Masayuki Nakano
a88303066b Bug 1237216 TSFTextStore should forget redundant pending composition events for Korean TIPs r=emk 2016-01-18 16:29:02 +09:00
Masayuki Nakano
e665b0a285 Bug 1237582 Don't retry to call TSFTextStore::NotifyTSFOfLayoutChangeAgain() when TSFTextStore::NotifyTSFOfLayoutChange() is called from it and newly TSFTextStore returns TS_E_NOLAYOUT error during the call r=m_kato 2016-01-17 12:02:01 +09:00
Masayuki Nakano
3c848e557b Bug 1208977 TSFTextStore::GetTextExt() shouldn't return TS_E_NOLAYOUT for MS-IME for Japanese becasue it may position its candidate window at top-left of the screen in e10s mode r=emk 2016-01-11 17:25:43 +09:00
Masayuki Nakano
04c782ed29 Bug 1234422 TSFTextStore should retry to notify TSF/TIP of layout change if synchronous calls of OnLayoutChange() don't cause retrieving layout information r=m_kato 2015-12-30 01:05:46 +09:00
Masayuki Nakano
5a6667ab40 Bug 1234120 part.2 TSFTextStore should ignore unnecessary text and selection changes which are caused by composition r=m_kato 2015-12-22 14:58:48 +09:00