Clip the stable oversized candidate host to the actual rendered content,
preserving the editor cursor and mouse behavior outside the candidate card.
Temporarily restore the full region when displaying the context menu.
- store optional toolbar component preferences in config.toml
- synchronize component settings with the settings application
- apply component visibility changes at runtime
- launch the screen keyboard from the floating toolbar
- resize the toolbar window based on visible components
- add independent theme settings for the emoji panel, on-screen keyboard,
handwriting panel, and voice input overlay
- support follow-global, dark, and light modes
- add light color palettes for each Direct2D interface
- load the shared theme configuration when standalone panels start
- reload the voice overlay theme before it is displayed
- expose the new theme options through the settings backend
Expose candidate font, size, text color, and page size settings through the config and WebView bridge. Limit selection digits to the configured page size and apply appearance updates to the live candidate window.
Keep the transparent candidate HWND at wrap-cap width so right-edge
growth adjusts MarginLeft/Top instead of SetWindowPos-moving the host,
which was flashing through layered transparency. Measure/layout keep
horizontal candidates on one row and wrap only inside long items.
ProcessSelectionKey cleared the input before CandidateDatabaseKey(), so single-letter lists (e.g. n) wrote weights under the context key instead of the candidate's real pinyin (na/nv), and ranking never changed.
Add cpp-pinyin as a submodule to annotate hans-only word lists, insert them
into the quanpin dictionary, and clear the IME dict cache after successful writes.
Add dictionary import parsing for word/pinyin/weight lines, honor apostrophe
syllable splits, and notify the IME server to clear dict cache after writes.
Only read the full TSF candidate payload for ShowCandidate events.
Keep the last valid caret anchor when rebuilding candidates during
word creation, pinning, deletion, and fixed-position updates to prevent
the candidate window from jumping or flashing at the top-left corner.
Force wrap-aware measure, serialize FineTune after measure content
updates, and preserve flip-up host height via MarginTop.
feat: lazily load single-letter Pinyin candidates
- query the top 24 single-letter candidates from the database
- load the complete candidate list on the first page-down action
- apply the same behavior to Shuangpin and Quanpin
- resolve Shuangpin initials according to the active profile
- preserve candidate frequency adjustment and pinning
- disable deletion for single-letter candidates
- add regression tests for Shuangpin v-to-zh mapping and lazy expansion
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.
Pin the menu last when it is visible, stop FTB layout from raising Z-order, and raise the menu while still cloaked so it does not flash under the toolbar.
Right-click was gated on the focused TIP Main session, so the menu
failed after focus loss. Route LangbarRightClick over Aux instead and
stop accepting it on Main.
Keep horizontal candidates on one line with max-content/nowrap, and resize the host/WebView before painting so content is never laid out in a still-narrow viewport.
Handle WM_DPICHANGED for the floating toolbar and tray menu, size the menu from cached CSS DIPs on each show, and warm WebView2 hosts on-monitor under DWMWA_CLOAK so startup no longer flashes while candidates still initialize.
Skip async AI/cloud refresh on paging and selection keys, early-exit when the
suggestion is already in the list, and dedupe series-cache inserts so repeated
cache hits no longer reset page_index or accumulate AI rows.
Refresh the menu toggle from general.floating_toolbar on show,
navigation, and config reload so it stays aligned with Settings.
Refs metasequoiaime/MetasequoiaImeTsf#17