If CompAttr and CompClause are properly configured, Japanese input
will be more comfortable.
Inspired by cursor_begin and cursor_end from Wayland zwp_text_input_v3::
preedit_string, I extended the cursor_pos concept as follows:
cursor_pos = MAKELONG( cursor_begin, cursor_end );
ime_to_tascii_ex() uses this to construct CompAttr, CompClause.
MS Windows native CompAttr, CompClause is a bit more complicated
than this, but the concept is useful enough.
It requires additional implementation in the Wine ime_ui_window proc and
richedit control. However, it is useful for applications that inline ime
composition string.
This can be tested with MS Office Word, Excel. LANG=ja_JP.UTF-8 wine EXCEL.EXE
Test key sequences:
- “n-i-h-o-n-g-o-n-o-m-o-j-i-d-e-s-u-.-SPACE”.
- And, RIGHT, LEFT, Shift+LEFT, Shift+RIGHT, ESC, SPACE, etc.
--
v4: winex11: Update only when caret pos changed in xic_preedit_caret.
winex11: Extend cursor_pos using cursor_begin, cursor_end.
winemac: Extend cursor_pos using cursor_begin, cursor_end.
winewayland: Extend cursor_pos using cursor_begin, cursor_end.
win32u: Add more CompAttr, CompClause implementation using cursor_begin, cursor_end concept.
https://gitlab.winehq.org/wine/wine/-/merge_requests/7812
This patch fixes a Japanese input issue in MS Office Visual Basic and Mery text
editor ime inline mode. The following was considered:
1. Japanese ime: the result string message is always placed between
WM_IME_STARTCOMPOSITION and WM_IME_ENDCOMPOSITION. Currently in Wine,
the result string message follows WM_IME_ENDCOMPOSITION.
dlls/imm32/tests/imm32.c::test_nihongo_no().
2. Chinese ime: same as Japanese ime.
3. Korean ime: mostly the same, but there are some cases where it is not
(e.g. CPS_COMPLETE, 'r-k-RETURN'). However, I haven't found any problem
even if it behave like Japanese ime message order.
3. zero-length preedit string: as in MR !3115 commit d1f9aae, the message
followed by WM_IME_ENDCOMPOSITION. Currently in Wine, it is associated
with WM_IME_STARTCOMPOSITION.
4. zero-length result string: ignore.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/7827
On Wed Apr 16 01:25:38 2025 +0000, Brendan McGrath wrote:
> Oops - sorry. I got the GUID mixed up with `timestamp/x-wg-transform`.
> The GUID might not be necessary actually. I might be able to use the
> `preserve_timestamps` boolean instead. I think the only difference would
> be that if GStreamer lost the `timestamp/x-wg-transform` state, we would
> fall back to using the gstreamer values. Which is possibly better.
Oops (again). I just tried using the `preserve_timestamps` boolean and it doesn't work. The `timestamp/x-wg-transform` is a flag that lets `video_decoder.c` know that an input timestamp has been provided (and that it should use it). It will otherwise fall back to the behavior defined by `provide_timestamps`.
But if we want to get rid of the need for the GUID, I guess we could move the existing logic in `video_decoder.c` (for generating our own timestamp) in to `wg_transform.c`.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/7623#note_101018
For https://gitlab.winehq.org/wine/wine/-/merge_requests/7512 to use it to locate window shared objects.
--
v16: win32u: Use the session shared object for user handle entries.
win32u: Use the session shared object to implement is_window.
server: Move the user object handle table to the shared memory.
server: Allocate a session shared memory header structure.
server: Use NTUSER_OBJ constants for user object types.
include: Implement ReadAcquire64.
https://gitlab.winehq.org/wine/wine/-/merge_requests/7610
--
v5: amstream: Implement dynamic formats in ddraw stream.
amstream/tests: Test for dynamic formats in ddraw stream.
amstream: Implement custom allocator for ddraw stream.
amstream/tests: Test for custom allocator in ddraw stream.
amstream: Release allocator when Disconnect is called in ddraw stream.
amstream: Implement IMemAllocator stub for ddraw stream.
https://gitlab.winehq.org/wine/wine/-/merge_requests/7715