Commit Graph

122 Commits

Author SHA1 Message Date
Masayuki Nakano
85bb7fcd6a Bug 1420215 - Make TSFTextStore set input scope of URL bar to IS_DEFAULT when some Microsoft's Trandtional and Simplified Chinese IMEs and some Microsoft's Korean IMEs which change their open state to "closed" when input scope is IS_URL r=m_kato
This patch adds following Microsoft's IMEs into the black list which set
their open state to "closed" when input scope is set to IS_URL and sets
input scope for the URL bar to IS_DEFAULT.

Additionally, this adds a new pref to disable this hack because a lot of
users will affect this hack but perhaps, somebody may not like this if
they use tablet.

The new black listed IMEs:
 - Microsoft Bopomofo
 - Microsoft ChangJie
 - Microsoft Phonetic
 - Microsoft Quick
 - Microsoft New ChangJie
 - Microsoft New Phonetic
 - Microsoft New Quick
 - Microsoft Pinyin
 - Microsoft Pinyin New Experience Input Style
 - Microsoft Wubi
 - Microsoft IME for Korean (except on Win7)
 - Microsoft Old Hangul

MozReview-Commit-ID: BwJKFcu80B8
2017-12-19 13:13:45 +09:00
Sylvestre Ledru
d4bc4b1554 Bug 1411001 - Remove the +x permissions on cpp & h files r=froydnj
MozReview-Commit-ID: DjDkL20wRg0
2017-10-23 20:59:55 +02:00
Tom Ritter
d625b33f7d Bug 1409619 Resolve signed/unsigned comparison warning by fixing function definitions to be signed in widget/windows/TSFTextStore r=jimm
The functions changed are given signed arguments (that are converted to unsigned).
Changing them to signed resolves the warnings and preserves the original values.

MozReview-Commit-ID: BxIAECFiuQR
2017-10-17 23:37:31 -05:00
Wes Kocher
d0a80948dd Merge inbound to central, a=merge
MozReview-Commit-ID: IUFdbLdYFhX
2017-10-04 16:37:59 -07:00
Masayuki Nakano
6373ddea11 Bug 1404206 - Part 2: Make TSFTextStore and IMEHandler handle "mozAwesomebar" inputmode value. r=m_kato, r=gijs
When "mozAwesomebar" is set to inputmode value, that means that the Smart
Location Bar gets focus.  In that case, we should notify IME of input scopes
as "URL" because on-screen keyboard for URL has some useful additional keys
but they are not hindrances even when users want to type non-URL text.

On the other hand, MS-IME for Japanese and Google Japanese Input changes their
open state to "closed" if we notify them of URL input scope.  A lot of users
complain about this behavior.  Therefore, we should notify only them of
"Default" input scope even when "mozAwesomebar" has focus.

MozReview-Commit-ID: DIgqpR7TXQx
2017-09-29 15:15:14 +09:00
Tom Ritter
024775686b Bug 1404147 Make string index and lengths unsigned to resolve signed/unsigned comparison warning r=jimm
MozReview-Commit-ID: Cpo5Gd1puzd
2017-09-28 18:01:58 -05:00
Tom Ritter
6e970be39e Bug 1403825 Resolve sequence-point warning in widget/windows/TSFTextStore.cpp r=jimm
This warning is saying the operation may be undefined because the value of
->left is not guarenteed to be the same because of undefined order of operations.

Fortunately, this seems like a typo and we actually meant to assign ->bottom

MozReview-Commit-ID: H5G8fnDwIJP
2017-09-28 00:33:11 -05:00
Masayuki Nakano
d997b3360e Bug 1386556 - TSFTextStore::GetIMENotificationRequests() should always return notification requests for sEnabledTextStore r=m_kato
Currently, TSFTextStore::GetIMENotificationRequests() tries to return notification requests for focused text store.  However, if there is sEnabledTextStore, all notifications will be sent for it.  Therefore, TSFTextStore::GetIMENotificationRequests() should return notifications for sEnabledTextStore without checking focused text store in the thread manager.

For example, we try to keep active composition even if we're being inactivated because Windows steals focus from us when our main process becomes busy but user may want to continue to compose the composition after our process becomes available.

Additionally, if TSFTextStore::GetIMENotificationRequests() doesn't return IMENotificationRequests::NOTIFY_DURING_DEACTIVE, sEnabledTextStore will be broken by NOTIFY_IME_OF_BLUR which will be sent by IMEStateManager::OnChangeFocusInternal().  However, when we're being activated, NOTIFY_IME_OF_FOCUS won't be notified because focused remote process keeps having IMEContentObserver.  Therefore, sEnabledTextStore won't be recreated and IME becomes unavailable.

Therefore, while sEnabledTextStore is not nullptr, TSFTextStore::GetIMENotificationRequests() needs all notifications even if it loses focus in the thread manager.

MozReview-Commit-ID: CC6gJIpHxUO
2017-08-02 18:30:16 +09:00
Masayuki Nakano
2ee96be5c5 Bug 1361132 TSFTextStore::GetSelection() shouldn't return if it runs on Win10 Anniversary Update or later r=m_kato
This is remaining cases of bug 1312302.  TSF may set focus to context when it receives focus related message.  In such case, TSF tries to retrieve selection but TSFTextStore::GetSelection() returns E_FAIL due to still not initialized, TSF crashes.

This patch moves the hack to TSFTextStore::GetSelection() and restrict to work only on problematic versions of Windows 10.

MozReview-Commit-ID: 6cTiZ4HCO18
2017-06-22 20:07:10 +09:00
Masayuki Nakano
55b030a1b3 Bug 1372560 TSFTextStore should cache compartment for keyboard open/close r=m_kato
TSFTextStore::GetIMEOpenState() may be called a lot.  Therefore, TSFTextStore should cache the compartment until shutting down.

MozReview-Commit-ID: 2jz8zQMBHRS
2017-06-14 15:37:41 +09:00
Masayuki Nakano
0c32098901 Bug 1369696 - part 2: TSFTextStore::sMessagePump should be QIed from TSFTextStore::sThreadMgr at first use r=m_kato
sMessagePump is necessary only when WinUtils::(Get|Peek)Message() retrieves a message from the queue.  Therefore, we can put off to initialize it until then.

MozReview-Commit-ID: ByMJk6AIw1r
2017-06-13 19:38:03 +09:00
Masayuki Nakano
7d881e020b Bug 1369696 - part 1: TSFTextStore::sKeystrokeMgr should be QIed from TSFTextStore::sThreadMgr at first use r=m_kato
sKeystrokeMgr is required only when WM_KEYDOWN or WM_KEYUP message are received.  So, we can put off to initialize sKeystrokeMgr until then.

MozReview-Commit-ID: JsLeM0SYXG6
2017-06-13 19:04:43 +09:00
Masayuki Nakano
1b29dbdc82 Bug 1372516 - TSFStaticSink should compare GUID rather than name when checking active TIP r=m_kato
TIP name may be localed on some locales of Windows.  Additionally, names may be updated in the future releases.  So, it's safer to use GUID rather than name when TSFStaticSink checks active TIP is a specific one.

MozReview-Commit-ID: 6HNePZV7kgJ
2017-06-13 18:36:21 +09:00
Masayuki Nakano
4e2d5ca835 Bug 1372483 - Get rid of the hack for Easy Changjei from TSFTextStore since it isn't available on Firefox anymore r=m_kato
Easy Changjei, a Traditional Chinese IME, isn't available on Firefox because:

* The vendor has gone and nobody keeps maintaining it.
* It crashes at first key press since it was built with older Visual Studio and depends on the version's CRT.

Therefore, we don't need to support it anymore.

MozReview-Commit-ID: LjyAvWsrlJ1
2017-06-14 14:20:27 +09:00
Masayuki Nakano
4d0e817ff4 Bug 1369694 Create TSFPrefs class and make it cache each pref at first use r=m_kato
Getting all prefs for TSFTextStore during initializing may make damage to start up performance.

So, each one should be retrieved when the one is actually necessary.

This patch creates TSFPrefs (I like better to name it TSFPreferences, but such long name isn't better when calling long name methods.) and implemented by simple macro.

MozReview-Commit-ID: A01LEAW4E7i
2017-06-10 04:19:27 +09:00
Masayuki Nakano
773146e730 Bug 1369695 Creating ITfInputProcessorProfiles and TSFStaticSink when they are used at first time r=m_kato
ITfProcessorProfiles are used by a debug method TSFTextStore::CurrentKeyboardLayoutHasIME() and TSFStaticSink (when it's initialized).  However, TSFStaticSink isn't necessary until when TSFTextStore needs to hack something for specific IME or notifying IMEHandler of active TIP change.  So, we can put off to create the instance of ITfInputProcessorProfiles and TSFStaticSink.

MozReview-Commit-ID: KcrqUbqz1do
2017-06-08 23:55:57 +09:00
Masayuki Nakano
b7093b1f58 Bug 1369697 Create ITfDisplayAttributeMgr and ITfCategoryMgr when TSFTextStore::GetDisplayAttribute() needs to use them at first time r=m_kato
Creating them may be expensive due to allocating them in the heap.  So, let's put off to create them when first use.

MozReview-Commit-ID: HDgijJo7brU
2017-06-08 20:51:50 +09:00
Masayuki Nakano
51c2cd00a6 Bug 1367692 - Make IMEHandler not restore default IMC unless legacy IMM-IME is active. r=m_kato
TIPs (and normal keyboard layouts) don't need IMC on focused window.  So, in most environment, it's not necessary to restore default IMC of focused window.

Therefore, this patch makes IMEHandler not restore default IMC unless legacy IMM-IME is active and disassociate IMC from focused window when IMM-IME isn't active.

However, this is risky change.  Therefore, the new behavior is disabled in default settings.  On the other hand, we need the new behavior only when MS-IME for Japanese is active on Win10.  Therefore, this patch adds a pref to enable/disable the hack and make it true in the default settings.

MozReview-Commit-ID: KAVxVT9CrsW
2017-06-07 11:42:27 +09:00
Masayuki Nakano
c8be1eb86b Bug 1368318 Call TSFTextStore::ThinksHavingFocus() before clearing sEnabledTextStore since the method refers it r=m_kato
MozReview-Commit-ID: GdALZTWioNW
2017-05-29 12:18:11 +09:00
Masayuki Nakano
01e47abd5f Bug 1366140 Try to avoid crash caused by COM objects which are owned by static or instance member of TSFTextStore r=m_kato, jimm
While initializing or destroying TSFTextStore, each object methods should be
called after the instance is grabbed by local variable since member variable
may be cleared by nested call to destroy a TSFTextStore instance.

MozReview-Commit-ID: CojLasqcDyB
2017-05-22 21:48:14 +09:00
Masayuki Nakano
ff25a15c5c Bug 1310454 part 2 - TSFTextStore::SetInputContext() should do nothing when it's called for initializing native IME context when a widget is created r=m_kato
On Windows, when nsWindow is created, IMEHandler::InitInputContext() is called.  Then, it calls TSFTextStore::SetInputContext().  However, at least for now, TSFTextStore needs to do nothing until the widget gets focus.

MozReview-Commit-ID: HBafHEUSCtd
2017-05-19 15:52:59 +09:00
Masayuki Nakano
916a9feac4 Bug 1310454 part 1 - Log more info when TSFTextStore gets InputContext and InputScopes r=m_kato
MozReview-Commit-ID: GrF0IGLUPtA
2017-05-19 15:20:00 +09:00
Masayuki Nakano
6d6b3d0a27 Bug 1296220 Rename nsIMEUpdatePreference to mozilla::widget::IMEUpdatePreference r=m_kato
MozReview-Commit-ID: 2rIXTlwA6my
2017-04-11 21:24:55 +09:00
Nicholas Nethercote
8b2d264e0f Bug 1325503 - Remove Windows {XP, Server 2003, Vista} support from widget/. r=jimm.
I did my best to remove as much stuff as possible in this patch. The starting
point was to remove all the IsVistaOrLater() and IsWin7OrLater() calls, but I
also grepped for various strings and found some other removable stuff that way.
I may have still missed some things.

Notable things done by this patch.

- It removes numerous blocklist entries.

- It removes CanComputeVirtualKeyCodeFromScanCode(), because it's always true
  now.

- It removes ShowXP{Folder,File}Picker(), even though these were available as
  fallbacks on Vista+. The "when platform is built without the longhorn SDK"
  condition in the comment above nsFilePicker::ShowXPFolderPicker() sounds like
  it won't ever happen any more.

- It removes the config.trim_on_minimize preference. This requires adding a
  bool sHaveInitializedPrefs variable; previously the lack of pref
  initialization was indicated by the tri-state sTrimOnMinimize variable having
  the value 2.

Notable things *not* done by this patch.

- ClearThemeRegion() still exists. The comment suggests that it is XP/Vista
  only, but the code suggests otherwise. jimm thinks the comment is wrong.

- The comment in WinWakeLockListener::Callback() suggests that the StartTimer()
  call is no longer needed to block the screen saver. I'm uncertain about this
  and so I think it's best left to a follow-up.
2016-12-23 13:13:31 +11:00
Ting-Yu Chou
e9fdb7b400 Bug 1322465 part 14 - Use explicit/MOZ_IMPLICIT for the unary constructors in widget/. r=Ehsan
MozReview-Commit-ID: JOrzksTzwVT
2016-12-16 16:00:43 +08:00
Ting-Yu Chou
0b4be44a91 Bug 1322458 - Fix kungFuDeathGrip errors that clang plugin reports on Windows. r=aklotz,Ehsan
MozReview-Commit-ID: FLTLZSg2yh9
2016-12-14 16:34:12 +08:00
Makoto Kato
6ef39b5bfe Bug 1312302 - Set dummy Selection during initializing TextStore. r=masayuki
When PC supports table mode, TextInputFramme.dll is loaded and it can be used for TIP.

When creating new TextStore object, selection might be nothing yet on e10s.  At this time, GetSelection will return E_FAIL since selection data isn't received yet.  If GetSelection returns error during SetFocus, TextInputFrame.dll will crash.

So we set temporary selection to avoid crash.


MozReview-Commit-ID: HyVSwvhXGJh
2016-10-25 17:53:38 +09:00
Masayuki Nakano
22ddf681a8 Bug 1305355 part.2 TSFTextStore shouldn't append any ranges when composition string is empty r=m_kato
TSFTextStore 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: Iu8IWwEOxaf
2016-09-26 17:12:34 +09:00
Ryan VanderMeulen
576edfd1fd Merge inbound to m-c. a=merge 2016-08-19 09:52:53 -04:00
Masayuki Nakano
be6cb9a3d1 Bug 1273510 part.3 We should not return TS_E_NOLAYOUT when ATOK decides its suggest window r=m_kato
Returing TS_E_NOLAYOUT while ATOK shows suggest window causes moving suggest window to odd position.  This causes flicking the window.  Therefore, we shouldn't return TS_E_NOLAYOUT in this case.  In this case, ATOK queries whole rect of composition string.  So, we can return TS_E_NOLAYOUT for other cases.

MozReview-Commit-ID: LBZQPFjqQgx
2016-08-17 14:07:54 +09:00
Nicholas Nethercote
8b8bd02a31 Bug 1293596 (part 2) - Rework nsIWidget bounds getters. r=mstange.
This patch makes GetBounds(), GetScreenBounds() and GetClientBounds() more
obviously infallible, like existing functions such as GetNaturalBounds() and
GetClientSize(). This results in clearer behaviour in nsCocoaWindow.mm if
Objective C exceptions occur. Along the way, the patch removes some useless
failure checks for these functions.

The patch also removes the NS_IMETHOD from GetRestoredBounds and makes that
function MOZ_MUST_USE.
2016-08-19 09:03:04 +10:00
Masayuki Nakano
66f28f00ac Bug 1273510 part.1 TSFTextStore should use native caret hack only when ATOK 2011 - 2016 is active r=m_kato
ATOK 2011 - 2016 check focused window class name if it's a Mozilla's window.  Then, they refer native caret position for deciding its popup window.  However, future ATOK release will stop referring native caret position on Mozilla's windows.  Therefore, we can stop creating native caret for new ATOK.

MozReview-Commit-ID: HPh3DVqTkvc
2016-08-09 16:53:00 +09:00
Masayuki Nakano
364cb44cc0 Bug 1293957 part.3 TSFTextStore::GetTextExt() shouldn't query text rect with 0 length r=m_kato
ContentEventHandler and ContentCache allow 0 length text rect query.  However, if selection is collapsed and caret is at the queried offset, they return actual caret rect whose height (in horizontal layout, width in vertical layout) may be different from actual font height of the line.

Therefore, it may cause "dancing" of candidate or suggest window of TIP.  Therefore, we should query text rect at least 1 length.  Then, even if there is no character at the offset, they computes caret rect with previous character.

MozReview-Commit-ID: 9LprWTPyMsF
2016-08-11 11:31:16 +09:00
Masayuki Nakano
a298753c15 Bug 1293957 part.2 TSFTextStore::GetTextExt() shouldn't return TS_E_NOLAYOUT after hacking the query range r=m_kato
When TSFTextStore::GetTextExt() needs to hack the queried range, it means that the method should not return TS_E_NOLAYOUT since the hacks are implemented for that.  However, currently, if hacked offset is still at modified offset, it returns TS_E_NOLAYOUT.  This causes flicking IME windows.

For avoiding that, this patch adjust the hacked offset to the last unmodified offset or offset of the start of composition string. Even if there is no modified character in the composition string, we can use the offset since even if there is no character at the offset, query content event returns caret rect at the offset and if there are old characters, it returns its rect which the user still see.  So, the rect at the composition start is useful until layout is modified actually.

MozReview-Commit-ID: 4zo9mF3m9u9
2016-08-10 19:11:11 +09:00
Masayuki Nakano
8c39def87c Bug 1293957 part.1 TSFTextStore::Content::mMinTextModifiedOffset should be treated as the first offset of modified characters r=m_kato
Currently, TSFTextStore::GetTextExt() checks the offset with mContentForTSF.MinOffsetOfLayoutChanged() as "the first offset of modified characters", however, TSFTextStore::Content::IsLayoutChangedAfter() needs actual offset - 1. This is really not useful. So, we should rename it to IsLayoutChangedAt() and check the offset simply.

Additonally, TSFTextStore::GetTextExt() should set previous offset of MinOffsetOfLayoutChanged() when it hacks the queried range for avoiding bug of active TIP since setting offsets to the result of MinOffsetOfLayoutChanged() means the offset's layout is always not computed yet.

MozReview-Commit-ID: 182BMuubtFc
2016-08-10 18:48:50 +09:00
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