Currently, GeckoEditable periodically fires update composition events to
update the Gecko composition styling. To make the code more efficient
and more robust in dealing with content JS code, this patch merges these
events into events like replacing text, setting span, and removing span.
As a result, a setComposingText call now results in one replacing text
event instead of a replacing text event plus an update composition event.
Currently, the Gecko-side selection tries to mirror the Java-side
selection, but this is difficult because the Gecko selection has some
subtle but important behavior differences from the Java selection.
This patch separates out Gecko selection from Java selection so that
they're only loosely coupled. The two selections will periodically
synchronize through events and notifications, but at certain times they
may fall out-of-sync, for example when a composition is active. This
shouldn't affect functionality in a major way, and it's an acceptable
trade-off.
widget/cocoa/nsNativeThemeCocoa.mm:3774:7 [-Wunreachable-code-break] 'break' will never be executed
widget/cocoa/nsNativeThemeCocoa.mm:3790:7 [-Wunreachable-code-break] 'break' will never be executed
widget/cocoa/nsNativeThemeCocoa.mm:3818:5 [-Wunreachable-code-break] 'break' will never be executed
This patch started life as making ImageEncoder.cpp:EncodingRunnable not
use nsAutoArrayPtr, but the API effects rippled out from there. On the
whole, I think using UniquePtr throughout has made the code clearer.
Right now we call disposeNative on GeckoEditable in the
nsWindow::Natives destructor. However, we may still have pending native
calls in the event queue at that point, and these events will cause
exceptions when handled. This patch makes GeckoEditable call
disposeNative, after ensuring there's no pending calls.
GeckoEvent.KEY_EVENT and GeckoEvent.IME_EVENT used to count as UI events
for the hang monitor. We should count the new native calls as native
events too through this patch.
Move the IME event handler implementation in nsWindow::OnIMEEvent to
individual native calls in nsWindow::Natives. This patch also moves most
member variables and helper functions related to IME to inside
nsWindow::Natives. This has the benefit of better organization and saves
some memory because only the top-level nsWindow now keeps IME states.
GetIMEComposition and RemoveIMEComposition are kept inside nsWindow
because they are not strictly related to IME events, and they are used
by some other event handlers in nsWindow.
In the period after nsWindow is destroyed, but before disposeNative is
called, we should discard any pending native calls. These calls would
result in exceptions anyways because the nsWindow weak pointer is now
null. After disposeNative is called, any native calls will still result
in exceptions because in that case, it's Java code's responsibility to
ensure that calls are not made after disposeNative is called.
This patch adds a separate close() call to nsWindow, and let the
GeckoView decide whether to make that call or not. This lets us use the
static version of disposeNative. If nsWindow is destroyed in the
meantime, we still want to call disposeNative, which would only be
possible using the static version of disposeNative.