界面渲染 only takes effect at Server startup, so the setting already told the
user to restart the IME process but offered no way to do it outside the
Ctrl+Shift+Alt+R developer shortcut. Add a 重启 button in the same section.
Settings runs in its own process, so the request travels the Aux pipe — the
supported cross-integrity control path the config notifications already use —
and the Server exits with the Watchdog restart code. The shortcut and the
button now share RestartServerProcess().
The toolbar occasionally stayed invisible while its host window looked
perfectly healthy: the HWND was shown at the right position and size, so
screenshot tools could still frame it, but WebView2 never painted into
it. Two independent causes, both specific to the toolbar.
The toolbar was the only small window left out of the cloaked warmup, so
whenever no client was active at startup its controller was created
against a hidden host and WebView2 never finished raster setup. The later
ShowWindow could not repair that.
The toolbar was also the only small window not renotified after
HWND_TOPMOST was applied. Pinning moves the host between z-bands, and in
a uiAccess process a WebView2 that is not told about it keeps compositing
against the old parent state. The toolbar reports navigation-ready last,
so the topmost gate normally opened inside its own navigation-completed
handler, before it had painted a single frame.
Changes:
- Warm up the toolbar host DWM-cloaked like the candidate and menu hosts,
and express hide as a cloak until the first navigation completes so the
warmup cannot be cut short. HideFloatingToolbarHost replaces the raw
ShowWindow(SW_HIDE), including in the fullscreen hook.
- Give the toolbar the same post-topmost put_Bounds +
NotifyParentWindowPositionChanged the menu host already had.
- Defer the first topmost application to a later message-loop turn via
WM_APPLY_SMALL_WINDOW_TOPMOST, and route EnsureSmallWindowsTopmost
through the same path so it can no longer pin inline.
- Add an opt-out diagnostic trace (ftb-diagnostic.log, disabled with
MSIME_FTB_DIAG=0) recording every visibility decision together with the
host and controller state, plus the foreground window behind a
fullscreen hide.
Also drops the earlier attempt at deriving g_is_ime_active from the IPC
active client, which targeted a different failure mode than the one
actually reproduced.
Support tsf/sendinput/ctrl_v voice commit, route TSF inserts via worker
InsertText, handle WM_SYSKEYDOWN for Ctrl+Shift+Alt+digit candidate delete,
and skip watchdog when the IME profile is disabled.